一、前言
最近花了些时间来考虑如何结合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:
28cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6U0K9r3q4J5L8r3g2K6x3X3N6S2L8W2)9J5c8V1N6p5b7g2)9J5k6r3q4F1k6s2u0G2K9h3c8Q4x3X3c8J5k6i4k6W2M7Y4y4A6L8X3N6Q4x3X3c8f1L8$3!0D9i4K6u0r3M7X3g2D9k6h3q4K6k6i4x3`.
a66K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3N6V1j5g2)9J5k6i4N6A6K9$3W2Q4x3@1p5&6x3o6V1H3i4K6u0r3
安装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.
[培训]科锐逆向工程师培训第53期2025年7月8日开班!
太强了,我只想说这真是小母牛敲门,牛逼到家了。