这篇文章给大家分享的是有关android如何实现加密参数定位的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
在逆向一个Android程序时,如果只是盲目的分析需要阅读N多代码才能找到程序的关键点或Hook点,本文将分享一下如何快速的找到APP程序的加密参数位置,其实不论是找关键位置、找hook点,找加密参数、代码逻辑追踪,都是类似的处理方法。
一般静态分析找加密参数的流程都是先查壳(脱壳)、反编译、查找程序的入口方法、分析程序的执行流程。
假设已经使用Android killer反编译了未加壳的app,直接使用工程搜索检索需要查找的参数名,根据AK的反馈信息进行对比,找到其对应的参数位置。也可以根据应用执行流程逐行向下分析代码,比较累。
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、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; }
通过这种方式大概率能打印出签名计算的位置,这也属于巧计的一种,大家一定不要忘记这种定位方式。
代码注入也属于动态分析,流程是先修改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如何实现加密参数定位”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。