逆向工具链实战:apktool + jadx + Frida 组合拳怎么打
上一篇讲了单工具用法,这篇讲组合拳。真正的逆向分析,往往是多个工具配合使用,各取所长。工具链分工
[*]apktool:负责拆资源 — 布局、图片、清单,改完还能回编译
[*]jadx:负责看代码 — 反编译质量最高,支持搜索和交叉引用
[*]dex2jar + JD-GUI:备选查看 — jadx 失败时用它兜底
[*]Frida:动态 hook — 运行时拦截方法,看实际参数和返回值
实战流程:分析一个 App 的登录逻辑
[*]用 apktool 拆开,看 AndroidManifest 找到登录 Activity
[*]用 jadx 打开,搜索 "login" 关键字,定位到登录方法
[*]发现密码做了加密 — 找到加密函数,看用的是什么算法
[*]用 Frida hook 加密函数,打印出输入和输出,验证猜测
Frida 动态 hook 示例
Java.perform(function() {
var cls = Java.use("com.target.CryptoUtil");
cls.encrypt.implementation = function(input) {
console.log("input: " + input);
var ret = this.encrypt(input);
console.log("output: " + ret);
return ret;
};
});
这段代码会在 App 运行时拦截加密方法,把输入和输出都打出来。静态分析看不到的运行时数据,动态 hook 一目了然。
回编译与重打包(apktool)
改完资源或 smali 后,可以回编译:
apktool b output_dir -o modified.apk
然后需要重新签名才能安装:
jarsigner -keystore debug.keystore modified.apk alias_name
注意:修改后的 App 如果有签名校验逻辑,需要在 smali 里把校验绕过,否则闪退。
https://www.metk.cn/img/posts/reverse_tools.jpg
逆向工具链的核心思路:静态分析找入口 → 动态 hook 验证行为 → 必要时改代码回编译。三条线配合使用,效率远高于只用一种。 这篇干货,比那些只有命令没有解释的强太多了。 步骤写得很清楚,跟着走了一遍,卡在第二步的环境配置上,后来装了老版本才好。 感谢,正需要这个,之前找的资料都太老了。 我用的另一条路线,效果差不多,但工具链更轻一些,回头整理下发出来。 写得很好,不过第三部分有点跳跃,新手可能跟不上。 感谢分享,之前一直卡在这个点,看完豁然开朗。 看完最大的感受是基础知识还是要扎实,不然工具报错都不知道怎么查。 这个流程我在真机上验证过,确实可行,注意备份就行。 收藏了,最近正好要搞这块,省了不少翻文档的时间。