修复 IAT 之初探
之前尝试了手动修复 IAT,了解修复的原理后,本次记录使用工具修复的过程;
使用工具
- OllyDbg 1.10原版,简称
OD
; OD
汉化
和插件
均来自互联网;- UnPackMe来自互联网,仅供学习使用;
- 加壳工具为UPX,感谢 🙏 开源;
- Dump 工具为 PETools,来自互联网;
- IAT 重建工具为 ImportREC,来自互联网;
- 文中特殊数字均是
HEX
,为了书写方便采用DEC
;
操作流程
使用 UPX 加密 CM,然后导入 OD;
使用栈平衡法定位并跳转至 OEP,接下来在操作过程中不能关闭 OD 且程序需停留在 OEP 位置;
打开 PETools,将内存数据 Dump 出来并保存至可执行文件:
默认保存为 dumped.exe;
打开 ImportREC 选择 CM 进程:
选择后,日志窗口会提示关联模块获取完成:
然后在下方填写 dumped.exe 程序 OEP 的 RVA,以及 IAT 的起始位置(RVA)和尺寸:
根据 VA 和 RVA 的转换公式计算如下(注意都是 16 进制哦):
OEP 的 RVA = 401000 - 400000 = 1000;
IAT 的 RVA = 403184 - 400000 = 3184;
IAT 的 Size = 40328C - 403184 = 108;
填写 ImportREC 的选项:
然后点击
Get Imports
,开始获取输入表的内容:获取完成后,需要检查获取的数据是否有效,如果 valid 为 NO,需要手动检查是否为无用信息,否则需要修正后重新获取(当前不涉及重定向);
接着点击
Fix Dump
选项,在弹出窗口选择 dumped.exe,用于修复;修复后的程序可以正常运行,但导入 OD 后依然会提示入口点超出代码段范围:
修改代码段的起始地址(RVA)即可:
然后选中修改并保存到可执行文件,完工!