[实践] “AI,你说的是真的吗?” 🤨 交叉验证AI分析结果与汇编(Assembly)代码

大家好,各位安全领域的未来之星! 🌱

上次我们使用了“作弊码”:将复杂的代码扔给AI,然后问“这是什么功能?”。AI直接告诉我们“这是勒索软件的加密逻辑!”,是不是很方便?

但是等等! ✋

“安全分析师的职责就是怀疑。”

AI确实很聪明,但有时会编造不存在的事实(幻觉),或者错误地解释细微之处。AI可能说“加密”,但实际上只是“编码”;可能说“删除”,但实际上是“移动”。

所以今天,我们将学习如何将AI的解释作为“参考资料”,并与实际的“真相之屋”——汇编(Assembly)代码进行对照验证。只有经过这个过程,我们才能盖上“分析完成!”的印章。

汇编语言并不难。只需确认3个关键点即可! 🧐


1. 为什么非要看汇编? (明明有C代码…)

Ghidra的反编译(C形式)界面有时会欺骗我们。

  1. 省略的信息: 编译器优化过程中,重要的变量可能会消失。
  2. AI的误解: AI仅凭变量名或函数结构就断定“这是AES加密”,但实际拆解后,很多时候只是简单的XOR。

“对AI的主张进行事实核查(Fact Check)”,这正是逆向工程的核心能力。


2. 准备工作:屏幕设置 🖥️

将Ghidra界面设置为双屏显示。

  • 左侧: 列表(Listing)视图 -> 汇编语言 (真相)
  • 右侧: 反编译(Decompile)视图 -> C语言 (解释本)
  • 窗口外: 与AI的对话框 -> 摘要 (主张)

3. 实战验证:AI的主张 vs 汇编事实 🥊

我们将沿用上次的勒索软件示例进行验证。

💬 AI的主张 (上次的结果)

“此函数通过循环(Loop)对文件数据和密钥值进行XOR运算以执行加密。”

现在,睁大眼睛,在左侧的列表视图(Assembly)中寻找证据吧。

✅ 检查点 1. 真的有循环吗? (Loop)

AI说有“循环”。在汇编中,循环通常表现为比较(CMP)和跳转(JMP/JNZ)的组合。

  • 查找汇编代码:
LAB_1400012f0:              ; 반복 시작 지점 라벨
   ...
   INC  EAX                ; EAX (카운터 i) 값을 1 증가 (++i)
   CMP  EAX, ECX           ; EAX(i)와 ECX(파일크기)를 비교 (i < size ?)
   JL   LAB_1400012f0      ; i가 더 작으면(JL) 다시 라벨로 점프(Jump)
  • 验证结果: 出现了CMP(比较)和JL(Jump If Less)指令。确实是循环结构。 (与AI解释一致! ⭕)

✅ 检查点 2. 真的在进行XOR运算吗? (Logic)

这是最关键的部分。AI说“XOR加密”。如果这里出现ADD或SUB,那么AI就错了。

  • 查找汇编代码:
MOV  EDX, [RBP + local_var] ; 데이터를 레지스터로 가져옴
MOV  EAX, [RBP + key_var]   ; 키 값을 가져옴
XOR  EDX, EAX               ; ⭐ 여기다! XOR 연산 수행!
MOV  [RBP + local_var], EDX ; 결과를 다시 메모리에 저장
  • 验证结果: 清清楚楚地出现了XOR指令。如果这里是AESENC(AES加密指令),那就是“高级加密”;如果只是XOR,那就是“简单加密”。亲眼确认,确凿无疑。 (与AI解释一致! ⭕)

✅ 检查点 3. 函数调用确认 (API Call)

AI说“最后会覆盖文件”。要写入文件,需要请求操作系统,对吧?

  • 查找汇编代码:
PUSH ...                    ; 파라미터 넣기
CALL dword ptr [->WriteFile] ; ⭐ WriteFile API 호출!
TEST EAX, EAX               ; 성공했는지 확인
  • 验证结果: CALL指令后面清晰可见WriteFile这个Windows API名称。文件写入行为被证实是事实。 (与AI解释一致! ⭕)

4. 如果AI错了怎么办? (幻觉案例) ⚠️

有时会发生这种情况。

  • AI: “此代码生成RSA非对称密钥。”
  • 实际汇编:
CALL rand      ; 랜덤 숫자 생성
MOV [key], EAX
  • 分析师的判断: “不对啊?这只是用了rand()函数生成一个随机数而已?根本不是RSA那种高大上的东西!”

👉 这一刻正是你战胜AI的时刻。 你应该在分析报告中写上“AI误诊修正:非RSA,仅为简单随机密钥生成”。


5. 初学者汇编映射表 📝

这些是验证AI解释时常用的指令对。只要记住这些,就能掌握80%!

AI解释 (C语言) 要查找的汇编指令 (Opcode) 含义
— — —
函数调用 (Call) CALL 跳转到其他函数
条件语句 (If) CMP, TEST + JZ, JNZ 比较并跳转
循环 (For/While) JMP, LOOP 返回到特定位置
变量赋值 (=) MOV, LEA 复制值/获取地址
算术运算 (+, -) ADD, SUB, INC, DEC 加法、减法
逻辑运算 (&, ^) AND, OR, XOR 位运算 (加密中很重要!)
结束 (Return) RET 结束函数并返回

—

🎉 实践总结

今天,我们学习了如何不盲目相信AI这个翻译官的话,而是通过查看汇编这个原文进行交叉验证(Cross Validation)。

  1. 从AI那里听取整体概况。 👂
  2. 在汇编视图中,用肉眼确认是否存在核心指令(XOR, CALL, CMP)。 👀
  3. 如果一致则通过,不一致则相信自己的眼睛。 👁️

养成这个习惯后,你们将不再是“只会运行工具的脚本小子”,而是“洞察代码真相的真正分析师”。

下一次,我们将进入动态分析(Dynamic Analysis)阶段,通过实际执行来亲眼确认通过静态分析所了解的内容。

汇编,别害怕!揭开面纱后就没什么大不了的! 加油! 💪



Comments

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注