一句话:AI 看不懂汇编里的堆布局,但它能帮你把几万行反汇编压缩成"这里在做什么"。

一、AI 在逆向里的真实定位

先说清楚边界:

AI 能做的:

  • 反汇编/伪代码的语义解释(这段在干什么)
  • 函数功能命名(sub_4012A0parse_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 渗透测试与漏洞挖掘实战