一句话:AI 看不懂汇编里的堆布局,但它能帮你把几万行反汇编压缩成"这里在做什么"。
一、AI 在逆向里的真实定位
先说清楚边界:
AI 能做的:
- 反汇编/伪代码的语义解释(这段在干什么)
- 函数功能命名(
sub_4012A0→parse_header) - 识别常见加密算法、协议结构
- 把反编译伪代码改写成可读的 C 代码
- 从字符串/常量里提取线索
AI 做不了的:
- 精确的堆布局推演
- 需要动态调试才能确定的运行时行为
- 复杂 ROP 链的偏移计算
- 对抗混淆(ollvm、虚拟化)的完整还原
定位:AI 是"翻译官"和"笔记整理员",不是"漏洞发现器"。
二、用 AI 解释伪代码
最基础的用法。把 IDA/Ghidra 的伪代码贴给 AI:
# 任务
解释以下反编译伪代码的功能。
# 要求
1. 用一句话概括函数作用
2. 逐行解释关键操作
3. 推断函数签名(参数类型、返回值含义)
4. 给函数起一个有意义的名字
5. 标注任何可疑操作(内存拷贝、格式化字符串、边界计算)
# 伪代码
```c
int sub_4012A0(char *a1) {
char v2[64];
int v3;
v3 = strlen(a1);
if (v3 > 128) return -1;
strcpy(v2, a1); // <- 注意这里
sprintf(v2, "user=%s", a1);
return strlen(v2);
}
AI 会直接指出 `strcpy` 到 64 字节缓冲但没有长度校验 → 栈溢出。
**AI 对"危险函数模式"的识别非常准**,这是它替代人工初筛的价值。
## 三、危险函数清单(让 AI 扫描)
```markdown
# 任务
扫描以下反汇编代码,找出所有危险函数调用,
按(潜在漏洞类型、危险等级)分类。
# 重点关注
- 字符串:strcpy/strcat/sprintf/vsprintf/gets
- 内存:memcpy/memmove(无长度校验时)
- 格式化:printf/fprintf(格式化字符串)
- 命令:system/popen/exec*
- 整数:乘法/加法(可能溢出)
- 数组下标(可能越界)
# 输出 Markdown 表格
| 地址 | 函数 | 风险 | 说明 |
这招在批量筛查大型二进制时特别有效,能快速定位候选点。
四、函数批量命名
大型二进制有几百个 sub_xxxx,人工命名极其耗时。
# 任务
根据以下函数的伪代码,为它们推断语义化名称。
命名规则:动词_名词,如 parse_config / send_packet / calc_checksum
# 输入
sub_401000: [伪代码]
sub_401200: [伪代码]
sub_4014A0: [伪代码]
...
# 输出
{"sub_401000": {"name": "", "purpose": "", "confidence": 0.0}}
这是 AI 逆向最实用的场景,能极大加速梳理进度。
五、识别加密/编码算法
# 任务
以下代码实现了某种加解密逻辑,请识别:
1. 是哪个算法(AES/DES/RC4/自定义?)
2. 模式(ECB/CBC/CTR?)
3. 密钥来源
4. 有无明显缺陷(硬编码密钥、ECB 模式、IV 固定)
# 代码
[伪代码 或 反汇编片段]
AI 常能从魔数(0x67452301 = MD5/SHA1 初始化)和循环结构判断出算法,比人工查表快。
六、协议逆向
给 AI 一段抓包 + 对应的解析函数:
# 输入
抓包数据(hex):
00 01 00 2a 41 42 43 44 ...
解析函数伪代码:[...]
# 任务
解析该协议格式,输出字段表:
| 偏移 | 长度 | 字段名 | 含义 | 示例值 |
AI 结合抓包和代码,能快速还原私有协议结构。
七、处理混淆/虚拟化(有限帮助)
ollvm 混淆后的控制流,AI 帮助有限,但可以做:
# 任务
以下控制流被 ollvm 扁平化混淆。尝试:
1. 识别分发器(dispatcher)变量
2. 还原真实的状态转移顺序
3. 输出简化的等价代码
如果不确定,明确说明无法还原。
对简单混淆 AI 能还原个大概,复杂的虚拟化保护基本无解。
八、Fuzz 辅助:AI 生成输入种子
二进制 Fuzz 的痛点是种子。让 AI 根据协议分析生成:
# 任务
目标程序处理自定义二进制协议,格式如下(已逆向):
magic(4) + version(2) + type(1) + flags(1) + length(4) + payload + crc(4)
type 取值:0x01=登录 0x02=查询 0x03=上传
# 任务
生成 30 个 Fuzz 种子,重点覆盖:
- length 与实际 payload 不一致
- type 为未定义值
- payload 超长
- 边界值(length=0, 0xFFFF, 0xFFFFFFFF)
然后喂给 AFL++。这比随机生成种子命中率高得多。
九、AI 辅助写 Exploit(有限场景)
对于已知漏洞类型 + 已定位偏移的情况,AI 能帮写 PoC:
# 背景
- 漏洞类型:栈溢出
- 偏移:112 字节到返回地址
- 保护:无 NX,无 ASLR(32位)
- 需要调用 system("/bin/sh"),该地址已知 0x080491E0
- "/bin/sh" 字符串地址 0x0804A040
# 任务
生成完整的 Python pwntools exploit。
AI 能生成框架正确、大概率可用的脚本。但偏移量必须你自己确认——AI 算偏移一定会错。
十、工具链整合
| 工具 | AI 如何配合 |
|---|---|
| IDA Pro | 伪代码导出 → AI 解释;AI 命名结果回填 |
| Ghidra | 利用其 API 导出函数 → AI 批量处理 |
| radare2/r2ai | r2ai 插件直接内嵌 LLM 对话 |
| angr | AI 帮助确定约束条件 |
| pwntools | AI 生成 exploit 骨架 |
推荐工作流:
Ghidra 导出所有函数伪代码
→ 脚本批量喂 AI 做功能标注
→ 结果写回 Ghidra(comment + rename)
→ 人工聚焦高价值函数
十一、小结
AI 在逆向里的角色很清晰:
它是那个能帮你读完所有反汇编、写下笔记、然后告诉你"这几个函数最可疑"的助手。
至于"这个可疑点到底能不能利用、怎么构造利用链",还是得靠你和调试器。
| 任务 | AI 适配度 |
|---|---|
| 伪代码解释 | ★★★★★ |
| 函数命名 | ★★★★★ |
| 危险函数筛查 | ★★★★☆ |
| 算法识别 | ★★★★☆ |
| 协议还原 | ★★★☆☆ |
| 混淆还原 | ★★☆☆☆ |
| Exploit 编写 | ★★★☆☆ |
| 堆布局推演 | ★☆☆☆☆ |
下一篇:AI Agent 自主渗透框架。
系列文章:AI 渗透测试与漏洞挖掘实战