文章总结: 本文分享了利用Frida和AI工具逆向CTFAPK的实战经验。通过Hook文件删除提取自毁DEX,利用AI分析解密算法得出密码,再HookTextView直接获取Flag。文章重点剖析了对抗动态加载与自毁机制的策略,验证了AI辅助逆向的效率提升,并提供了完整的Frida通用Hook代码与流程总结。 综合评分: 91 文章分类: CTF,移动安全,逆向分析
利用AI逆向CTF-APK
原创
MicroPest MicroPest
MicroPest
2026年1月15日 19:38 安徽
导读:利用多种AI工具+MCP接口+frida hook逆向,绕过限制,解密算法,得出flag,最后给出总结报告。
一、工具准备
1、检材:2024数证杯初赛APK逆向题—“检材-03.apk“;
2、JADX AI-MCP Plugin:
3、jadx-mcp server,如cherry studio中配置:
4、安装frida:
pip install frida;
pip install frida-tools;
5、安装雷电模拟器;
6、推送frida-server到雷电模拟器中,并运行;
7、配置转发端口:
adb forward tcp:27042 tcp:tcp27042
adb forward tcp:27043 tcp:tcp27043
8、参考文章:《2024数证杯初赛APK逆向题WP(CTF2023)》。
二、逆向过程
先看参考文章。下面我将细化过程,将要点讲明白。
1、通过frida的js将中途释放出来并删除掉的update_1_.dex恢复出来(参考文章中提及);
2、比较 “检材-03.apk”和“update_1_.dex”,会发现:前者相比缺少了三个非常重要的字符串DICT、KEY、PASSWORD:
以及 缺少了一个重要的函数 com.power.flag.A中的calculateFlag(Context context, String str, String str2),
以及 两者的 loadkey函数都不尽相同。
3、将update_1_.dex中的com.power.flag.A和com.power.flag.B交由kimi处理,找到加解密算法,
如下:
4、根据上面的3写一个解密代码:
DICT = “9>AG3OCP1N2-4L5K6M7+BQD&EVF=0@8$”
CIPHER = “+>M=+K-@MN+-MK-@MN++MK+OM=M&MK”
(1). 反向:密文字符 → 原十六进制字符
rev = {DICT[i+1]: DICT[i] for i in range(0, len(DICT), 2)}
(2). 逐个替换
hex_str = ”.join(rev[c] for c in CIPHER) # 796F752061726520617765736F6D65
print(‘hex =’, hex_str)
(3). 十六进制 → 字符串
plain = bytes.fromhex(hex_str).decode(‘ascii’)
print(‘password =’, plain)
得出密码:you are awesome
5、当输入上面的password后,出现:
6、再hook textview吧。现在我们提供一个完整的frida hook,省略掉上面的update_1_.dex以及上面的5,直接将flag显示出来,代码如下:
【hook_textview.js:】
Java.perform(function () {
letFile=Java.use(“java.io.File”)
File.delete.implementation=function () {
// this.delete(); // 不删除文件
console.log(“Call delete: “+this)
returntrue;
}
letTextView=Java.use(“android.widget.TextView”);
TextView.setText.overload(‘java.lang.CharSequence’).implementation=function (text) {
this.setText(text)
console.log(“SetText: “+text)
}
});
7、验证:
frida -U -f com.power.ctf2023 -l hook_textview.js
在雷电模拟器apk密码框输入:you are awesome,提交后得到flag
三、总结
相比PE的AI-mcp逆向,apk的就显得繁琐些。但核心思想主要在frida hook这里,有了AI助力,包括js的编写都成了飞速。
我们通过frida hook java.io.File提取了被删文件update_1_.dex来进行前后对比分析,掌握加解密算法,得出了密码;并再次frida hook android.widget.TextView,将密码输入后解出flag。最后,我将上述两过程合二为一,给出完整的frida hook代码,得到flag。
利用 Frida 对 APK 进行动态分析——完整流程小结
- 目标
样本: com.power.ctf2023
需求:绕过「动态加载 + 自毁 dex」的密码验证,拿到正确 flag。
- 静态观察(JEB / jadx)
主 apk 仅负责加载 assets/a → 解密成 update_1_.dex → 反射调用 com.power.flag.A.loadKey() 。
关键常量: DICT / PASSWORD / KEY 全部硬编码在 A.class 。
- 动态痛点
不保留 dex → 无法静态二次反编译;
密码错 → 不进入分支,后续逻辑不加载;
类可能延迟加载 → 直接 Java.use() 报 ClassNotFoundException 。
- Frida 解决步骤
- 结果
运行时字典仍为 “9>AG3OCP1N2-4L5K6M7+BQD&EVF=0@8$” ;
逆算后得到新口令 “you are awesome” ,最终 flag 通过 TextView 日志一次性拿到:flag{ISEC-41a2369f6b586047b628d570c11d66f1}
- 通用经验
“动态加载 + 自删除”是 CTF/壳常见套路——先拦删除,再枚举类;
遇到 ClassNotFoundException → 延迟/轮询/枚举 三选一;
任何硬编码的“字典-密文”组合都可逆推,只要运行时把实参抓出来;
Frida 的核心价值:让隐藏逻辑在内存里“现形”,再反推即可。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:MicroPest MicroPest MicroPest《利用AI逆向CTF-APK》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论