android加密参数定位方法

android加密参数定位方法作者正在编写一本爬虫逆向相关的书籍《书名还没有想好》。目前刚写了50页,上图是文章目录的一部分,想问一下大家现在对哪阶段的内容会更感兴趣,或者哪部分的内容会更有学习力,或者帮我想个书名。可在本文末留言告知,感谢大家。下面开始本文正文内容。在逆向一个Android程序时,如果只是盲目的分析需要阅读N多代码才能找到程序的关键点或Hook点,本文将分享一下如何快速的找到APP程序的加密参数位置,其实不论是找关键位置、找hook点,找加密参数、代码逻辑追踪,都是类似的处理方法。巧用搜索-静态分析

大家好,又见面了,我是你们的朋友全栈君。

作者正在编写一本爬虫逆向相关的书籍《书名还没有想好》。
在这里插入图片描述

目前刚写了50页,上图是文章目录的一部分,

想问一下大家现在对哪阶段的内容会更感兴趣,

或者哪部分的内容会更有学习力,或者帮我想个书名。

可在本文末留言告知,感谢大家。


下面开始本文正文内容。

在逆向一个Android程序时,如果只是盲目的分析需要阅读N多代码才能找到程序的关键点或Hook点,本文将分享一下如何快速的找到APP程序的加密参数位置,其实不论是找关键位置、找hook点,找加密参数、代码逻辑追踪,都是类似的处理方法。


巧用搜索-静态分析

一般静态分析找加密参数的流程都是先查壳(脱壳)、反编译、查找程序的入口方法、分析程序的执行流程。
假设已经使用Android killer反编译了未加壳的app,直接使用工程搜索检索需要查找的参数名,根据AK的反馈信息进行对比,找到其对应的参数位置。也可以根据应用执行流程逐行向下分析代码,比较累。


objection定位

objection是基于Frida的动态分析工具包,可以免root动态调式apk,同时支持iOS和Android。安装方法可以到github查看。Github:https://github.com/sensepost/objection
在通过搜索之后如果有几个不确定的位置,则正好可以使用Objection,Objection就是专业的定位小能手,从定位流程上来说也只有三步。

  • 1、注入目标进程
    objection -g com.xxx.xxx explore 
    
  • 2、跟踪类
    android hooking watch class 'com.xxx.xxx.lx.ApiSign'
    
  • 3、查看入参和返回值
    android hooking watch class_method 'com.xxx.xxx.lx.ApiSign.a' --dump-args --dump-return
    

    然后通过参数和返回值与请求接口中的协议进行对比就可以却确定究竟是在哪一个位置了。


frida-hook

frida、xposed这类hook工具也是动态分析的一种。假设某App的接口有 signature 签名,并且该参数值看上去非常像是Base64,并且长度为定长且少于20位。这个时候如果通过工具全局搜索没有找到,则可以通过frida凭感觉Hook下App中所有操作Base64的位置。
Frida代码如下:

var Base64Class = Java.use("android.util.Base64");
Base64Class.encodeToString.overload("[B", "int").implementation = function(a,b){ 
   
    var resault = this.encodeToString(a,b);
    console.log(">>> Base64 " + resault);
    if(resault.length <= 20){ 
   
        // 获取当前线程状态
        var stackAdd = threadinstance.currentThread().getStackTrace();
        // 获取当前方法名
        console.log(stackAdd[1].getMethodName())
    }
    return rc;
}

通过这种方式大概率能打印出签名计算的位置,这也属于巧计的一种,大家一定不要忘记这种定位方式。


log注入

代码注入也属于动态分析,流程是先修改apk的smali代码,既是在某关键函数前加入 android/util/Log 输出,配合LogCat 查看程序执行时的log数据。

关于android/util/Log的 Log extends Object 一共有5个方法:Log.v() Log.d() Log.i() Log.w() and Log.e()

一般使用Log.v() 日志输出函数就可以了,不做案例了,详细内容会往书中写。


动态调试

其实定位的方法只有两种静态分析和动态分析,动态调试也属于动态分析,和上面的方法异曲同工。

动态调试这里可以理解为堆栈调试,有时候需要利用到不同的工具和方法,

比如 JEB调试、smali调试、IDA调试等等。

不再细说了,本文简单总结一下。


大家现在对哪阶段的内容会更感兴趣,望留言告知,感谢大家。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145527.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Qt的QFile

    Qt的QFile在这里可以说是Qt的帮助文档一样了!确定不进来看看QFile这个东西怎么用么!

    2022年6月14日
    90
  • ssh配置config文件命令_config文件能删除吗

    ssh配置config文件命令_config文件能删除吗在使用ssh连接服务器时,经常要输入一些不同的主机地址和密码,使用config文件可以很好的解决这个问题。在配置之前我们先生成ssh密钥。#使用以下命令一路回车即可ssh-keygen-trsa#为.ssh目录设置权限chmod600~/.ssh/config文件配置十分简单,只需要按照以下格式配置即可。#config文件需要放到~/.ssh/conf

    2025年5月24日
    2
  • 海贼王最新漫画图片_海贼王漫画52pk

    海贼王最新漫画图片_海贼王漫画52pk制作工具模块-隐藏身份信息的User-Agent模块;对象服务器识别不了身份信息。importrandomuser_agent_data=[{“User-Agent”:”Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/65.0.3314.0Safari/537.36SE2.XMetaSr1.0″},{“Use

    2022年8月23日
    4
  • ldapsearch命令详解_ldapsearch命令详解

    ldapsearch命令详解_ldapsearch命令详解参数用途-?打印关于使用ldapsearch的帮助。-aderef指定别名反向引用。请输入never、always、search或find。如果不使用此参数,缺省为never。-A只检索属性的名称,而不检索属性的值。-bbasedn指定用作搜索起始点的专有名称。使用引号来指定该值,例如:”ou=West,o=Acme,c=US”如果要搜索的服务器需要指定搜索…

    2025年6月16日
    2
  • android于src和background差额

    android于src和background差额

    2022年1月15日
    39
  • Struts2 拦截器的Interceptor接口与AbstractInterceptor抽象类

    Struts2 拦截器的Interceptor接口与AbstractInterceptor抽象类在学习Struts2框架的时候,遇到了拦截器,一开始拦截器都应该之间或者间接去实现Interceptor接口的,但是后来看到了AbstractInterceptor这个抽象类。之前学过的JAVA知识有点忘记了,所以特意查了一下关于抽象类和接口之间的关系。我们不想使用Interceptor接口去实现拦截器对象,是因为这个接口中有3个方法,但是我们在实际上我们主要用到的就是只有intercept()这

    2022年5月15日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号