当 AI 编程助手不再只会写代码,而是学会了拆解 APK、反编译二进制、动态 Hook 运行时……逆向工程的效率会发生什么变化?
一、缘起:让 AI 助手"看懂"二进制
Antigravity 是 Google DeepMind 团队开发的一款强大的 AI 编程助手。它能写代码、调试、搜索、生成文件,但它的能力边界取决于它能调用的工具集。
面对一个 Android 逆向分析的需求,标准的代码编辑能力远远不够。我们需要的是:
- IDA Pro
反编译 native 库中的函数 - AndroidKiller
拆解 APK、阅读 smali 代码 - Frida
在运行时动态 Hook Java/Native 方法 - ADB
管理设备、传输文件、执行命令
问题来了——这些都是独立的桌面工具,AI 怎么调用它们?
答案是 MCP(Model Context Protocol)。
二、什么是 MCP?
MCP 是一套标准协议,用于将外部工具和数据源连接到 AI 系统。你可以把它理解为 AI 的"插件接口":
AI 编程助手 ←—— MCP 协议 ——→ 本地工具(IDA、Frida、ADB...)通过为每个工具编写一个 MCP Server(一个 Python 脚本),AI 就能像调用内置函数一样,直接在对话中使用这些工具。
三、配置过程:4 个 MCP Server,35 个工具
3.1 环境准备
C:\Program Files\IDA Professional 9.1 | ||
E:\AndroidKiller_v1.3.1 | ||
pip install mcp |
3.2 编写 MCP Server 脚本
每个工具对应一个 Python 脚本,使用 MCP 的 FastMCP 框架注册工具函数。以 IDA Pro 为例:
from mcp.server.fastmcp import FastMCPmcp = FastMCP("ida-pro", instructions="IDA Pro 9.1 static analysis server for binary reverse engineering",)@mcp.tool()asyncdefdecompile_function(binary_path: str, function_name: str = "", function_address: str = ""):"""使用 Hex-Rays 反编译指定函数"""# 调用 idat.exe 的批处理模式,运行 IDAPython 脚本 cmd = f'"{IDAT_EXE}" -A -S"{script_path}" -P+ "{binary_path}"' proc = await asyncio.create_subprocess_shell(cmd, ...) ...最终创建了 4 个 MCP Server 脚本:
.gemini/tools/├── ida_server.py # IDA Pro 静态分析(7 个工具)├── android_killer_server.py # AndroidKiller APK 逆向(7 个工具)├── frida_server.py # Frida 动态插桩(8 个工具)└── adb_server.py # ADB 设备管理(14 个工具)3.3 注册到 Antigravity
在 Antigravity 的全局配置文件中注册所有服务器:
// ~/.gemini/antigravity/mcp_config.json{"mcpServers":{"ida-pro":{"command":"python","args":[".gemini/tools/ida_server.py"],"env":{"IDA_DIR":"C:/Program Files/IDA Professional 9.1"}},"android-killer":{"command":"python","args":[".gemini/tools/android_killer_server.py"]},"frida":{"command":"python","args":[".gemini/tools/frida_server.py"]},"adb":{"command":"python","args":[".gemini/tools/adb_server.py"]}}}重启 Antigravity 后,35 个逆向分析工具立即可用。
四、工具能力一览
🔬 IDA Pro — 二进制静态分析
decompile_function | |
list_functions | |
list_strings | |
list_importslist_exports | |
get_xrefs | |
run_idapython |
📦 AndroidKiller — APK 逆向工程
decompile_apk | |
rebuild_apk | |
dex_to_jar | |
parse_manifest | |
read_smalisearch_smali | |
sign_apk |
🎯 Frida — 运行时动态插桩
run_script | |
hook_java_method | |
list_classesdump_methods | |
trace_functions | |
list_processeslist_apps |
📱 ADB — Android 设备管理
shell | |
install_apkuninstall_app | |
pull_filepush_file | |
screenshot | |
logcat | |
forward_port |
五、实战验证:从 APK 到源码的全自动逆向
配置完成后,我们用一个真实的 Cocos2d-x 游戏应用进行了端到端测试。整个逆向过程 AI 全程自主完成,仅在关键决策点与用户确认。
Phase 1:APK 结构分析
AI 首先调用 parse_manifest 解析应用清单,确认应用包名、入口 Activity 和权限声明,接着将 APK 解压提取 native 库(.so 文件)和资源。
Phase 2:加密机制识别
通过 list_strings 在核心引擎库 libcocos2djs.so(22MB)中搜索加密相关字符串,AI 发现了:
jsb_set_xxtea_key— XXTEA 密钥设置函数 xxtea_decrypt— 解密函数
结论:应用使用 XXTEA 加密 保护 JavaScript 源码(.jsc 文件)。
Phase 3:密钥提取(IDA Pro × Frida 协作)
静态分析路线:AI 调用 decompile_function 反编译 AppDelegate::applicationDidFinishLaunching,在反编译结果中发现密钥的部分内容:
strcpy((char *)v8 + 1, "****-****-**");jsb_set_xxtea_key();由于 SSO(小字符串优化)导致密钥可能被截断,AI 又自动切换到 Frida 动态方案:
// AI 自动生成的 Frida Hook 脚本Interceptor.attach(Module.findExportByName("libcocos2djs.so", "jsb_set_xxtea_key"), {onEnter: function(args) {console.log("[*] XXTEA Key: " + args[0].readUtf8String()); }});最终通过二进制 .rodata 段的精确搜索确认了完整的 XXTEA 加密密钥。
Phase 4:批量解密
AI 编写 Python 脚本,使用提取到的密钥对所有 27 个 JSC 文件执行 XXTEA 解密 + Gzip 解压,全部还原为可读的 JavaScript 源码:
解密流程:JSC (encrypted) → XXTEA 解密 → Gzip 解压 → JS (plaintext)Phase 5:源码分析
还原出的源码揭示了完整的游戏客户端逻辑。AI 进一步自动分析了应用的内部架构,包括模块加载机制、网络协议结构、以及内置的调试接口——发现了硬编码在客户端代码中的调试认证密钥和完整的后台调试系统调用链路。
六、技术难点与解决方案
在整个配置和实战过程中,遇到了几个典型问题:
6.1 IDA 路径含空格
C:\Program Files\IDA Professional 9.1 中的空格导致命令行解析错误。
解决:在 MCP Server 中使用 create_subprocess_shell 并手动为路径添加引号,替代列表形式的 create_subprocess_exec。
6.2 FastMCP API 版本差异
MCP SDK v1.27 中 FastMCP 构造函数的参数名为 instructions 而非 description。
解决:AI 通过 inspect.signature() 自动检测正确的参数名并修复所有 4 个脚本。
6.3 Frida 跨线程调用崩溃
Frida 的 setTimeout 回调运行在 Frida 线程,而 Cocos2d-x 的 evalString 必须在 GL 线程调用,直接调用会导致 access violation。
解决:Hook Scheduler::update(float)(Cocos2d-x 每帧回调),作为 GL 线程桥接:
// 在 GL 线程上安全执行 JS 代码Interceptor.attach(schedulerUpdateAddr, {onEnter: function() {while (pendingEvals.length > 0) {var js = pendingEvals.shift();doEval(js); // 在 GL 线程上调用 evalString } }});6.4 se::Value 内存布局探测
Cocos2d-x 的 se::Value 结构体布局不同于预期,需要通过 hexdump 逆向推导:
Layout: [value 8 bytes] [type 4 bytes]Type: 0=Undefined 2=Number 4=StringAI 通过逐步探测(先 eval 42,再 eval "hello"),从原始字节中推导出正确的结构体布局,最终实现了从 Frida 端读取 JS 引擎返回值的能力。
七、这套体系的价值
对效率的提升
传统逆向分析需要在 IDA、终端、文本编辑器之间反复切换。配置 MCP 后,AI 可以:
- 自主决策工具链
:根据分析阶段自动选择静态分析或动态 Hook - 跨工具协作
:IDA 反编译结果直接喂给 Frida 脚本生成 - 迭代式调试
:根据运行结果自动修正脚本中的 bug
可复用性
这套 MCP Server 脚本是通用的——不限于特定应用或场景。任何 Android 逆向项目都可以直接复用。
局限性
MCP Server 运行时占用系统资源(每个是独立的 Python 进程) IDA Pro 分析大型二进制(>20MB)时等待时间较长 Frida 需要 root 设备或 Gadget 注入
八、总结
通过 MCP 协议,我们为 Antigravity 打造了一套 完整的逆向分析工具链:
AI 不再只是写代码的助手,而是一个能独立完成逆向分析的"安全研究员"。
这套方案的核心思想是:把专业工具的能力通过标准协议暴露给 AI,让 AI 在对话中自主调度和组合这些能力。
未来,随着 MCP 生态的成熟,任何领域的专业工具都可以用同样的方式接入 AI 系统——安全审计、固件分析、协议逆向、漏洞挖掘……
工具的能力边界,就是 AI 的能力边界。
本文基于实际项目经验整理,工具配置和实战分析均在本地 Windows 环境完成。
夜雨聆风