android如何实现加密参数定位
这篇文章给大家分享的是有关android如何实现加密参数定位的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
在逆向一个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就是专业的定位小能手,从定位流程上来说也只有三步。
注入目标进程
objection -g com.xxx.xxx explore
跟踪类
android hooking watch class 'com.xxx.xxx.lx.ApiSign'
查看入参和返回值
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("resault stackAdd is:" + Where(stack)); } 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调试等等。
感谢各位的阅读!关于“android如何实现加密参数定位”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341