免责声明
逆向工程请遵守法律法规与软件许可,本文仅用于学习与安全研究。
入口:从字符串与导出函数开始
第一步不是 F5,而是定位目标功能:
Strings面板搜索关键字Imports看调用路径Xrefs追踪引用链
这三板斧能让你在大项目里快速落位。
函数边界:IDA 不一定总对
IDA 的函数识别是“概率判断”。遇到混淆或异常编译选项时,常见现象:
- 函数被切得过碎
- 函数边界偏移
- 误把数据当代码
处理办法:
Create Function手动修正Undefine再重新分析- 观察 调用约定 与栈变化
伪代码不是终点,而是起点
F5 只是帮你“看懂”,还需要你“重命名”。建议:
- 先重命名变量,再重命名函数
- 把“数据结构”命名清楚,会让伪代码自动变得更直观
// 原始伪代码
v3 = *(int *)(a1 + 16);
if ( v3 == 2 ) sub_100123(a1);
// 重命名后
state = *(int *)(ctx + kStateOffset);
if (state == kRunning) startJob(ctx);
IDAPython:做一点自动化就很舒服
import ida_kernwin
import ida_funcs
for ea in idautils.Functions():
name = ida_funcs.get_func_name(ea)
if name.startswith("sub_"):
ida_kernwin.msg(f"[todo] {name}\n")
脚本不需要复杂,能减少重复劳动就值得。
常见误区
- 把“寄存器名”当成“变量名”
- 只相信反编译,不看汇编
- 不做动态验证,结论过早
小结
IDA 的关键不是“工具熟练度”,而是定位问题 + 语义重建的能力。把流程跑顺了,你会发现逆向工程其实很像读别人写的代码。