Android逆向分析通常不会只用一款工具完成全部工作,而是需要在反编译、静态阅读、动态跟踪、网络抓包、脱壳对抗等环节中不断切换。不同工具擅长处理的层级也不一样:有些工具适合还原Java层业务逻辑,有些适合分析Native层算法,还有些专门解决HTTPS证书校验和加壳样本。本文按照静态反编译、动态Hook调试、网络抓包、脱壳与辅助四个方向整理常用助手工具箱,并给出基础命令和组合思路。

一、静态反编译与代码还原工具
静态分析是接触APK样本后的第一步,目标是把安装包还原为可阅读的资源和源码。Apktool是这个环节中最基础的助手,它能把classes.dex反汇编为smali,同时解出AndroidManifest.xml和resources.arsc。对于没有加固的APK,使用 apktool d target.apk -o decoded_app 即可得到完整工程目录。反编译后可以查看应用声明的权限、组件导出情况以及资源文件结构,例如清单文件中的 <application> 标签是否包含 android:debuggable 属性,或者是否存在 <activity android:exported="true"> 这样的导出组件。Apktool也支持重新打包,使用 apktool b decoded_app -o repacked.apk,但重打包后的APK通常需要重新签名,否则无法安装。
apktool d target.apk -o decoded_app apktool b decoded_app -o repacked.apk
如果只是想快速阅读Java源码,jadx比Apktool更直接。它能把dex直接反编译为Java代码,并支持搜索方法名、交叉引用和字符串。命令行使用 jadx -d decompiled_src target.apk,也可以使用图形界面 jadx-gui。jadx的优势是搜索体验好,适合从界面关键字或接口路径反查业务逻辑;缺点是遇到高度混淆的代码时,生成结果可能不完整,需要结合smali阅读。对于Native层,也就是lib目录下的.so文件,Ghidra是常用选择。它免费且支持ARM、ARM64、x86等多种架构,可以把Native函数恢复为C伪代码。JEB虽然自动化程度更高,但属于商业软件,适合预算充足的团队。dex2jar加JD-GUI是早年常用的组合,现在大部分场景已被jadx取代,因为多一次格式转换会增加代码误差。
jadx -d decompiled_src target.apk dex2jar target.apk
静态工具在Windows环境下使用时,如果jadx解压在 C:\Android\tools\jadx,建议把完整的 C:\Android\tools\jadx\bin 加入环境变量,这样可以在任意目录直接调用。查看smali代码时,需要把smali语法和Java语法对照起来理解,例如寄存器操作、invoke指令以及类型描述符。静态分析得到的结论通常只是线索,例如看到一个checkSign方法,但不知道它返回true还是false,这时就需要动态工具去验证。
二、动态调试与Hook分析工具
动态分析可以绕过一部分静态混淆,直接观察应用运行时的真实数据。Frida是当前使用最广泛的动态Hook框架,它通过向目标进程注入JavaScript脚本,拦截Java方法、Native函数,甚至修改参数和返回值。在Android设备上使用Frida,需要先推送与宿主机版本一致的frida-server到设备,并赋予执行权限。连接成功后,宿主机运行 frida-ps -U 能看到设备进程列表,说明环境准备完成。
adb push frida-server /data/local/tmp/ adb shell chmod 755 /data/local/tmp/frida-server adb shell su -c /data/local/tmp/frida-server & frida-ps -U
一个典型的Frida脚本会使用 Java.perform 进入Java运行环境,再通过 Java.use 获取目标类,并替换目标方法的 implementation。下面这段脚本拦截了MainActivity中的checkSign方法,先打印入参,再调用原方法并将结果返回。这样可以在不修改APK的情况下观察签名校验逻辑。
Java.perform(function () {
var MainActivity = Java.use('com.example.app.MainActivity');
MainActivity.checkSign.implementation = function (input) {
console.log('checkSign input=' + input);
var result = this.checkSign(input);
console.log('checkSign result=' + result);
return result;
};
});
Frida更适合编写灵活的脚本,而Objection则把常用Hook动作做成了交互式命令,降低使用门槛。启动命令为 objection -g com.target.app explore,进入后可以使用 android hooking list classes 列出类,也可以使用 android sslpinning disable 一键绕过常见SSL Pinning。对于需要持久化修改系统或应用行为的场景,Xposed或LSPosed模块是更好的选择。虽然模块开发比Frida脚本复杂,但一次安装可以长期生效。Magisk则负责提供Root能力,并配合Shamiko等模块隐藏Root痕迹,用来对抗部分应用的运行环境检测。动态分析工具的核心价值在于把静态线索变成可确认的事实。
三、网络抓包与证书处理
协议分析是逆向中不可绕过的环节。Charles、Burp Suite和mitmproxy主要面向HTTP与HTTPS流量,Wireshark和tcpdump则用于底层TCP、UDP数据包。Android 7.0以后,应用默认不信任用户自行安装的CA证书,因此即便在手机上安装了Burp或Charles证书,很多HTTPS请求仍然无法被解密。解决办法之一是把证书移入系统信任库。可以先用OpenSSL计算证书的subject hash,再挂载系统分区写入证书。
openssl x509 -inform PEM -subject_hash_old -in burp.pem | head -1 mv burp.pem 9a5ba575.0 adb push 9a5ba575.0 /data/local/tmp/ adb shell su -c mount -o remount,rw /system adb shell su -c cp /data/local/tmp/9a5ba575.0 /system/etc/security/cacerts/ adb shell su -c chmod 644 /system/etc/security/cacerts/9a5ba575.0
只安装系统证书并不代表所有HTTPS都能解密,因为很多应用还实现了SSL Pinning。它会校验服务端证书的固定指纹或公钥,即使系统信任了代理证书,应用也会拒绝连接。对付这种场景,可以使用Objection执行 android sslpinning disable,或者编写Frida脚本Hook常见的证书校验方法。对于非HTTP协议、双向证书认证或代理检测较严的样本,还可以使用r0capture、ecapture等工具从系统层抓取明文流量。tcpdump通常需要Root权限,命令类似 adb shell su -c tcpdump -i any -s 0 -w /sdcard/capture.pcap,保存后的文件可以导入Wireshark分析。
抓包时要注意代理本身会改变流量路径,部分应用会检测系统代理设置。遇到这种情况可以尝试使用透明代理或iptables转发,让应用无感知地把流量交给代理设备。网络分析往往需要和动态Hook配合,以确定关键请求的参数构造、加密字段和返回码判断逻辑。
四、脱壳与自动化辅助工具
如果APK经过加固,静态分析和动态Hook之前通常需要先脱壳。BlackDex、FART、Youpk和frida-dexdump是常用的脱壳工具。BlackDex在真机环境下主动脱壳,操作相对简单,适合快速获取classes.dex;FART需要刷入定制系统或额外模块,但能通过主动加载类来dump更多代码;Youpk针对整体加固样本有较好效果。frida-dexdump则是基于Frida在内存中搜索dex特征并保存,使用起来比较灵活。
python3 main.py -n com.target.app -o dump_dex
在Windows下使用frida-dexdump时,输出路径也可以写成 C:\Android\dumps,反斜杠必须保留。脱壳后通常会得到多个dex文件,可以再用jadx逐一打开,恢复原先被加固隐藏的Java层逻辑。除此之外,MT管理器和NP管理器是手机端常用的辅助工具,适合修改资源、编辑dex、去除广告和汉化。AndroidKiller等集成环境可以统一调用Apktool、签名工具和日志查看器,适合习惯Windows图形化的用户。单独处理dex和smali时,baksmali与smali仍然是最基础的工具组合。
baksmali d classes.dex -o smali_out smali a smali_out -o patched.dex
修改smali后重新打包,要注意签名和zipalign问题。Android 7.0以后建议使用v2或v3签名,否则安装可能失败。自动化的思路可以概括为:先使用Apktool和jadx静态定位,再用Frida动态验证方法行为,抓包补充请求参数,遇到加固样本先用脱壳工具还原dex,最后形成从定位到验证再到补丁的完整闭环。所有工具都应当在授权测试、学习研究或自有应用调试范围内使用,避免用于非法侵入。
Android逆向助手逆向工具箱Frida修改时间:2026-08-30 04:18:20