乐于分享
好东西不私藏

我让 AI 学会了"拆"App——Antigravity 逆向分析能力搭建手记

我让 AI 学会了"拆"App——Antigravity 逆向分析能力搭建手记

你能想象吗?对着 AI 说一句"帮我分析这个 APK",它就自己打开 IDA、拆解代码、Hook 运行时、提取密钥、还原源码……全程不用你碰一下鼠标。


先说结论

我给 AI 编程助手 Antigravity 装上了 4 把"瑞士军刀",让它从一个只会写代码的助手,变成了一个能独立完成逆向分析的安全研究员

整个过程的核心只有一件事:通过 MCP 协议,把本地逆向工具的能力"喂"给 AI。


这事儿的背景

Antigravity 是 Google DeepMind 做的 AI 编程助手,你可以把它理解为一个住在你电脑里的"超级程序员"。它能写代码、调 bug、搜文档,但有个致命短板——它不会用逆向工具

就好比请了一位顶级厨师,但厨房里没有刀和锅。

而我手上有这些"刀和锅":

工具
干什么用
IDA Pro
把编译后的程序"翻译"回人能读的代码
AndroidKiller
把 Android 安装包(APK)拆开看里面的零件
Frida
在 App 运行的时候"偷看"它在做什么
ADB
遥控你的 Android 手机

问题是:这些都是独立的桌面软件,AI 根本不知道它们的存在。


MCP:给 AI 装上"手"

这里要介绍一个关键概念——MCP(Model Context Protocol,模型上下文协议)

说人话就是:一套让 AI 调用外部工具的标准接口。

你可以把 MCP 想象成一个"万能遥控器"。每个工具是一台不同的电器,MCP 就是那个能控制所有电器的遥控器。AI 拿着这个遥控器,就能操作任何接入的工具。

┌─────────────┐     MCP 协议     ┌──────────────┐│             │ ◄──────────────► │  IDA Pro     ││             │ ◄──────────────► │  AndroidKiller││ Antigravity │ ◄──────────────► │  Frida       ││  (AI 助手)  │ ◄──────────────► │  ADB         ││             │ ◄──────────────► │  更多工具...  │└─────────────┘                  └──────────────┘

怎么接入?三步搞定

第一步:给每个工具写一个"翻译官"

就是一个 Python 小脚本,告诉 AI 这个工具能做什么、怎么调用。比如 IDA Pro 的翻译官长这样(简化版):

# 注册一个叫 "ida-pro" 的工具服务mcp = FastMCP("ida-pro", instructions="二进制静态分析工具")# 告诉 AI:你可以用这个功能反编译函数@mcp.tool()asyncdefdecompile_function(binary_path, function_name):"""把编译后的代码翻译回人能读的版本"""# 后台调用 IDA Pro 完成分析    ...

一共写了 4 个翻译官,注册了 35 个能力

第二步:登记到 Antigravity

在配置文件里告诉 AI:"嘿,你现在有这 4 个新工具可以用了。"

第三步:重启 AI,完事

重启后,AI 的工具栏里就多了 35 个新按钮。


35 个新能力,都能干嘛?

直接上图:

🔬 IDA Pro — "代码翻译机"

能把编译后的二进制程序翻译回接近源代码的形式。就像把一本被翻译成外星语的书重新翻译回中文。

  • 反编译函数、列出所有函数名
  • 提取程序中的字符串(比如密钥、URL)
  • 追踪某个函数被谁调用了

📦 AndroidKiller — "APK 拆解工"

能把 Android 安装包拆成零件,看清里面的每一行代码。

  • 反编译 APK、重新打包
  • 阅读和搜索底层代码(smali)
  • 解析应用的配置清单

🎯 Frida — "运行时侦探"

能在 App 运行的时候,实时拦截和修改它的行为。就像给正在运转的机器装上透视镜。

  • 注入自定义脚本
  • 拦截函数调用,看参数和返回值
  • 枚举所有加载的类和方法

📱 ADB — "手机遥控器"

远程控制 Android 设备的一切。

  • 安装/卸载 App
  • 传文件、执行命令
  • 截屏、看日志

实战:AI 自主完成一次完整逆向

工具装好后,我们拿一个真实的 Cocos2d-x 游戏 App 做了测试。

注意:以下全过程由 AI 自主完成,我只负责看着。

🔍 第一步:AI 先"看"了一眼 APK

AI 自动解析了应用清单,搞清楚了应用的基本信息(包名、入口、权限),然后把 APK 解压,找到了核心的引擎库文件。

🔐 第二步:AI 发现代码被加密了

应用的 JavaScript 源码被加密成了 .jsc 文件。AI 在 22MB 的引擎库里搜索字符串,找到了 xxtea_decrypt 和 jsb_set_xxtea_key——确认使用了 XXTEA 加密算法

🗝️ 第三步:AI 用两种方式找到了密钥

方法一(静态分析):AI 调用 IDA Pro 反编译了应用的启动函数,在代码里看到了密钥的一部分。但由于编译器优化,密钥被截断了。

方法二(动态分析):AI 立刻切换策略,通过 Frida Hook 了密钥设置函数,在 App 运行时捕获到了完整密钥。

两条路线交叉验证,最终确认了加密密钥。

💡 这里最让我惊讶的是:AI 在静态分析遇到困难时,自己决定切换到动态分析方案。不是我告诉它的。

📂 第四步:AI 批量解密了所有源码

AI 写了一个 Python 脚本,用提取到的密钥一次性解密了 27 个加密文件。解密流程是:

加密文件 → XXTEA 解密 → Gzip 解压 → 可读的 JavaScript 源码 ✅

📊 第五步:AI 分析了源码结构

还原出源码后,AI 自动分析了应用的完整架构——模块系统、网络协议、调试接口,甚至找到了开发者遗留在代码中的内部调试系统。


过程中踩的坑(也是最有意思的部分)

坑 1:路径里有空格

IDA Pro 装在 C:\Program Files\...,空格导致命令行解析出错。AI 自己发现了问题,给路径加上了引号修复。

坑 2:SDK 版本 API 变了

MCP SDK 更新后构造函数的参数名改了(description → instructions)。AI 用 Python 的反射机制自动检测了正确的参数名。

坑 3:线程安全问题(最精彩的一个)

Frida 脚本在自己的线程运行,但 Cocos2d-x 的 JS 引擎函数必须在"GL 渲染线程"调用。直接调用 = 程序崩溃。

AI 的解决方案非常巧妙:Hook 了引擎的帧更新函数(每秒调用 60 次),把要执行的代码排队,在下一帧由正确的线程安全执行。

这就像你不能在高速路上突然停车修轮胎,但可以在下一个服务区停下来修。

坑 4:内存结构未知

AI 需要读取 JS 引擎的返回值,但不知道返回值在内存中长什么样。

解决方法:先让引擎计算 42(已知结果),再计算 "hello"(已知类型),通过对比内存 dump 推导出数据结构。就像用已知答案的数学题来推导公式。


这套方案的意义

🚀 效率飞跃

传统逆向分析:在 5 个软件窗口之间来回切换,手动复制粘贴数据。

现在:对 AI 说一句话,它自己协调所有工具完成分析。

🔧 即插即用

这 4 个 MCP Server 脚本是通用的,换个 App 照样能用。就像你买了一套厨具,做中餐能用,做西餐也能用。

🧠 AI 的"判断力"

最让人印象深刻的不是工具本身,而是 AI 在工具之间做出的决策

  • 静态分析遇到瓶颈 → 自动切换动态分析
  • 一种 Hook 方式崩溃 → 自动尝试替代方案
  • 字符串搜索没结果 → 改用二进制模式搜索

最后

工具的能力边界,就是 AI 的能力边界。

通过 MCP 协议,我们只是把 AI 的"能力边界"往外推了一步。但就是这一步,让 AI 从"会写代码"变成了"能拆程序"。

如果把这个思路推广开来——安全审计、固件分析、协议逆向、漏洞挖掘——每个领域的专业工具,都可以用同样的方式接入 AI。

这不是未来,这是已经发生的事情。


欢迎关注协议分析与还原,一起用AI实现各项能力的全面跃升。