一、前言
最近花了些时间来考虑如何结合Frida, 让我们可以在反编译代码上直接对方法或者类进行hook或者调用,初想感觉挺简单,但是实现过程中也有不少坑,比如:1).自动生成js代码,除了定义代码模板外还得考虑静态方法,构造函数,内部类,匿名类,以及混淆后的不可见字符的类或者方法等等问题,以及调用一个方法时参数确定与实例化问题,可能还需要用户介入编辑代码,因此需要提供代码编辑能力;2). 独立于命令行窗口,需要自己写一个shell窗口来显示Frida的输出以及命令输入或者其他的交互。
最后花了一些时间来实现这样的一种支持,好在这些问题都得到了解决。结合Frida框架,新的GDA反编译器能够解决如下几个问题:
1. 如果当前反编译的APK未安装在设备中,则自动安装并启动APP。
2. 自动处理静态方法、构造函数、内部类、匿名类、以及混淆后的不可见字符的类或者方法。
3. 在反编译代码的基础上,想HOOK那儿就HOOK那儿,无需写任何JS代码便可以看到方法的参数值和返回值。
4. 在反编译代码的基础上,想执行那儿就执行那儿,GDA自动完成适当地做自动代码生成,最小化代码编写。
5. 可以实现基于Frida的“带壳HOOK/方法调用”功能,反编译DUMP出的DEX文件,只要android设备中安装有原APP即可自动关联。
6. 完全自定义JS脚本,自动生成建议代码,满足类似需要修改参数,修改返回值或者其他的需求。
解决了这几个问题,基本能覆盖大部分的工作需求,比如常常遇到设置HOOK后HOOK点无法执行;漏洞验证时,无法触发上层调用者等等问题。当然如果代码分析清楚了,也可以写JS代码实现,但在反编译器中操作会方便很多。先上一个效果图:
感谢Mobile Security, GDA 对Frida 的支持得到了Frida 官方的关注和转发,感谢@漏网之鱼同学给予的支持和建议
二、准备工作
下载GDA:
https://github.com/charles2gan/GDA-android-reversing-Tool/releases
http://www.gda.wiki:9090/
安装python+Frida(网上很多安装教程),确保Frida能够正常使用,。
pip3 install frida
pip3 install frida-tools
验证Frida是否安装成功:Frida --version
三、如何上手
在GDA中,你可以实现“指哪儿打哪儿”、“所见即所得”的动态分析效果。因为Frida对java层的HOOK是以方法为单位的,所以对于如下反编译代码:
你只需要右键单击便可进行HOOK或者执行你所点击的方法,同时能够看到动态执行的结果。
上图的反编译代码中1,2,3分别代表三种可以进行操作的点,鼠标单击右键可以对目标做HOOK、执行等操作:右键点击1可以HOOK或者执行当前反编译的方法;2是当前方法调用的方法;3是类对象。1,2既可以做方法的HOOK也可以做类的HOOK,3只能做类的HOOK。
代码中任何被调用的类和方法都可以直接进行HOOK.
上图是右键菜单中对Frida支持的功能,其中:
1)方法HOOK:第一次HOOK时自动安装并启动当前分析的APK文件,此后做HOOK时不重启APP.
2)方法重启HOOK:每次执行HOOK时都会重启APP.
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2021-7-17 08:54
被gjden编辑
,原因: