- 无法区分编译器自动生成的代码和自己编写的代码
解决:
源码对比法
写对应编译器的 demo 程序与分析的程序进行对比分析
之后再使用 OD 动态调试或是 IDA 静态分析
总结出一些库或者 CALL 的特征,方便下段
API 下断栈回溯跟踪法
根据栈回溯分析关键跳
而分析具体的算法,需要耐心,
分析上下文当中的每一个 CALL 的参数和返回值信息
以及一些敏感的内存写入或是访问代码
- IDA 的 F5 命令,反编译成 C 代码之后如何修改?
解决:
先为函数命名,根据其功能
还有参数、局部变量
IDA 快捷键
export 窗口 双击 start 或者其他导出函数,跳转到反汇编窗口
切换视图 单击空格
切换窗口 单击选项卡
窗口关闭再次打开 菜单 - View-OpenSubView - 对应的窗口
窗口不小心拽出 关闭活动窗口,再在菜单中打开
- 换算随机基址
假设 OD 中 OEP 地址:0138F5CD IDA 中 OEP 地址 :0042F5CD
计算在 IDA 中的地址
公式:OD 中 OEP 地址 - OD 中的映像基址 + 原始映像基址
OD 中的映像基址如何查看?
- 点击工具栏 E 枚举当前所有模块,找到主模块,主模块是 01360000
根据公式,在 IDA 中的地址 = 0138F5CD-01360000+00400000=42F5CD
IDA 中 OEP 地址:0042F5CD
exe 的默认映像基址是多少?DLL 的默认映像基址是多少?
exe:00400000
dll: 10000000
题目假设一
DLL 随机基址之后的一个代码地址 01520330,随机基址是 01000000
问,在 IDA 中的地址是多少?
01520330-01000000+10000000=10520330
实例分析,main 函数
1. 反编译查看代码,看是否能看懂,不能看懂,返回反汇编窗口老老实实的分析汇编
2. 先给函数起个名字,然后老老实实从开始分析汇编
3&