新闻详情

新闻详情

首页 / 资讯中心 / 详情

CTF 逆向 Windows 脱壳实战:DUMP 转储与 IAT 重建(OllyDump + ImportREC 全流程)

发布时间:2026/9/29 7:01:56来源:尧图网络
CTF 逆向 Windows 脱壳实战:DUMP 转储与 IAT 重建(OllyDump + ImportREC 全流程)
文档网络安全教程【免费下载链接】ctf-wikiCome and join us, we need you!项目地址https://gitcode.com/gh_mirrors/ct/ctf-wiki点击查看免费下载本指南讲解 Windows 平台脱壳的最后两步核心操作在找到 OEPOriginal Entry Point程序原始入口点后将内存中的程序转储DUMP成文件并重建因加壳而失效的导入地址表IAT, Import Address Table。读者将掌握 OllyDump/LoadPE 转储、ImportREC 修复输入表的标准流程学会通过 AutoSearch、Get Imports、Fix Dump 三步完成脱壳并理解 IAT 失效的底层原因与手动定位 IAT 的进阶方案。原理为什么脱壳后必须重建 IATIAT全称是Import Address Table导入地址表表中的每一项指向导入函数的实际内存地址。当可执行文件使用外来 DLL 的代码时Windows 装载器需要将 DLL 装载到进程的虚拟地址空间并把定位导入函数所需的信息写入 IAT程序运行时对导入函数的调用都通过 IAT 间接完成。从 PE 文件结构看DataDirectory[1]保存着导入表IMPORT TABLE的 RVA它指向IMAGE_IMPORT_DESCRIPTOR结构体数组。该结构体中三个关键成员共同构成了所谓的双桥结构OriginalFirstThunk指向 INTImport Name Table导入名称表的 RVAName指向导入函数所属库文件的名称字符串FirstThunk指向 IATImport Address Table导入地址表的 RVA。IMAGE_IMPORT_BY_NAME结构体记录导入函数信息其中Hint是函数编号Name[1]是以\0结尾的 ANSI 函数名称字符串。程序装载到内存时装载器会按以下步骤将函数实际地址写入 IAT读取Name装载对应 DLLLoadLibrary→ 读取OriginalFirstThunk获取 INT 地址 → 遍历 INT 读取IMAGE_IMPORT_BY_NAME→ 通过GetProcAddress取得函数地址 → 将地址写入FirstThunk指向的 IAT 数组。文件中 INT 与 IAT 保存的数据完全相同内存中通过 INT 找函数名称、通过 IAT 找函数实际地址。详细结构说明可参阅仓库文档 导入表PE 导入表详解。那么加壳与 IAT 失效有何关系从 保护壳简介 可知壳的执行流程包括保存入口参数pushad/popad→ 通过GetProcAddress、GetModuleHandle、LoadLibrary等 API 构造自己的输入表 → 解密各区块数据 → 跳转回原程序入口点。加壳时外壳自行构造了一个输入表在跳回 OEP 之前需要重新对每一个 DLL 引入的所有函数重新获取地址并填写到 IAT 表中。因此用转储工具从内存中把程序抓出来时壳构造的 IAT 与脱壳后的文件并不匹配——这就是 dump 出的程序无法正常运行的根源。第一步找到 OEP 后转储程序OllyDump / LoadPE脱壳的前提是先找到 OEP。仓库的 unpack 目录提供多种定位 OEP 的方法可配合使用单步跟踪法利用 Ollydbg 的步过F8、步入F7、运行到F4走完自脱壳过程ESP 定律法在pushad压栈后对 ESP 设硬件断点触发时离 OEP 很近内存镜像法对.rsrc与.text段下内存断点直达 OEP一步到达 OEP 法搜索popad等壳特征指令快速定位。当调试器中的EIP已经停在 OEP 处时就该转储程序了。在 Ollydbg 中右键选择用 OllyDump 脱壳调试进程也可以使用 LoadPE 来完成转储在弹出的窗口中重点确认入口点地址Entry Point是否选对然后取消勾选重建输入表因为接下来会使用 ImportREC 单独重建。将转储出的文件命名保存本文示例命名为dump.exe。第二步运行 dump.exe 验证并定位问题尝试运行dump.exe会发现程序无法正常启动。此时按以下思路排查对于简单的壳转储后无法运行是最常见的现象不必惊慌如果确认找到的 OEP 是正确的并且用 IDA 反编译查看结果良好代码逻辑完整清晰那么第一怀疑对象就是程序的 IAT 出现了问题结论需要对 dump 出的文件重建 IAT输入表。第三步使用 ImportREC 修复输入表ImportREC是脱壳修复输入表的常用工具其完整操作流程如下。3.1 选择正在调试的进程打开ImportREC在下拉列表中选择一个正在运行的进程原版.exe。注意原版.exe是 Ollydbg 中正在调试的进程此时 OD 中的EIP正停在 OEP 位置。使用 OllyDump 转储之后不要关闭这个调试进程否则 ImportREC 将无法附加。3.2 填写 OEPRVAImportREC 修复输入表需要知道 OEP需在窗口右侧中间的OEP输入框中填入RVA相对虚拟地址。已知在 Ollydbg 中程序当前入口点VA为0049C25C镜像基址ImageBase为00400000则OEP(RVA) 入口点(VA) - 镜像基址 0049C25C - 00400000 0009C25C在OEP输入框中填入0009C25C3.3 AutoSearch自动搜索原 IAT点击AutoSearch按钮ImportREC 会自动在内存中搜索原始 IAT 的位置弹出提示框发现可能是原IAT地址此时 IAT 的 RVA 与 SIZE 已被自动定位3.4 Get Imports获取并验证导入函数点击Get Imports按钮即可重建 IAT。窗口左侧会列出 IAT 中各个导入函数及其地址并标记是否有效Valid。当 ImportREC 找到内存中 IAT 的位置并检测出各个函数都有效图中可见所有导入项均为有效状态时说明重建结果正确3.5 Fix Dump修复转储文件点击Fix Dump按钮在弹出的文件选择框中打开先前使用 OllyDump 插件转储出来的dump.exe。ImportREC 会自动为它恢复导入表并生成修复后的文件dump_.exe。运行dump_.exe程序即可正常运行——至此整个脱壳流程完成。进阶手动查找 IAT 地址并重建AutoSearch 是 ImportREC 的自动方案当自动搜索失效或需要精确控制时可以参考仓库中的 手动查找 IAT 并使用 ImportREC 重建 一文核心步骤如下使用 ESP 定律快速跳转到 OEP示例为00401110在 Ollydbg 中右键选择查找 - 所有模块间的调用双击进入程序的某个调用函数注意区分程序函数与系统函数依次执行右键 - 跟随进入函数、右键 - 数据窗口中跟随 - 内存地址定位到 IAT 数据区若数据显示为十六进制不方便辨认可在数据窗口右键选择长型 - 地址显示函数名向上翻到 IAT 表起始位置示例为004050D8处的kernel.AddAtomA向下找到最后一个函数示例为user32.MessageBoxA计算整个 IAT 块大小示例为 OD 下方显示的块大小0x7C打开 ImportREC 选择进程分别填入OEP: 1110、RVA: 50D8、SIZE: 7C点击获取输入表在输入表窗口右键选择高级命令 - 选择代码块选择完整转储并保存为dump.exe转储完成后选择转储到文件修复 dump.exe得到可正常运行的dump_.exe。这种方式将 IAT 定位从自动搜索变为手工计算对理解 IAT 在内存中的布局起始 RVA 与块大小非常有帮助。注意事项与常见问题调试进程不能提前关闭ImportREC 需要附加到 OD 中正在调试的原版.exe且 OD 的 EIP 必须停留在 OEP 处否则修复将无从下手OEP 填写的是 RVA 而非 VA务必用入口点地址减去镜像基址如0049C25C - 00400000 0009C25C转储时先不要勾选重建输入表OllyDump 自带的重建能力有限交给 ImportREC 统一处理更可靠判断是否为 IAT 问题若 dump 出的文件无法运行但 OEP 正确且 IDA 反编译结果良好优先怀疑 IAT可结合导入表结构文档 导入表 理解修复前后文件与内存中 IAT 的差异适用于简单壳本文方案针对压缩壳等简单壳场景对于 VMProtect、Themida 等加密壳壳执行完毕后 IAT 结构可能被高度破坏或虚拟化AutoSearch 往往失效需要更复杂的 IAT 修复手段。赞分享文档网络安全教程【免费下载链接】ctf-wikiCome and join us, we need you!项目地址https://gitcode.com/gh_mirrors/ct/ctf-wiki点击查看免费下载相关推荐ctf-wiki 逆向实战Windows 加壳程序脱壳后的 DUMP 与 IAT 重建OllyDump ImportREC 全流程ctf wiki 逆向实战Windows 加壳程序脱壳后的 DUMP 与 IAT 重建OllyDump ImportREC 全流程 本指南完整讲解 W文档网络安全教程CTF 逆向实战Windows DLL 文件脱壳全流程LordPE 修改特征值 OllyDbg 调试 ImportREC 重建 IATCTF 逆向实战Windows DLL 文件脱壳全流程LordPE 修改特征值 OllyDbg 调试 ImportREC 重建 IAT 本篇文章基文档网络安全教程ctf-wiki Windows 脱壳实战手动定位 IAT 地址并使用 ImportREC 重建导入表ctf wiki Windows 脱壳实战手动定位 IAT 地址并使用 ImportREC 重建导入表 导读 当加壳程序如 UPX 壳在内存中被解开后程文档网络安全教程上一篇IoT-For-Beginners 数字农业实战用 CounterFit 虚拟硬件读取土壤湿度ADC 模拟传感器入门下一篇Feast 0.12 接入 AWS Redshift 与 DynamoDB构建云上特征存储的离线/在线双后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

HTML表单7大属性与9大元素核心原理与实战 2026/9/29 7:54:14

HTML表单7大属性与9大元素核心原理与实战

1. 为什么必须吃透 form 表单的这7种属性和9种元素&#xff1f;——一个做了8年前端的老手的真实体会刚入行那会儿&#xff0c;我总以为表单就是<form>套几个<input>&#xff0c;提交按钮一按&#xff0c;数据就飞走了。直到第一次做银行级用户注册页&#xff0c;被…

阅读更多 →
EPLAN 电缆 块属性 导出 2026/9/29 7:54:02

EPLAN 电缆 块属性 导出

电缆标签导出 块属性1.选中要要导出的 页 2.工具–外部编辑—到处数据 选择需要到处的属性导出文件

阅读更多 →
Mediabunny 入门:在浏览器中完成媒体文件读写、转换与处理的纯 TypeScript 工具箱 2026/9/29 7:54:02

Mediabunny 入门:在浏览器中完成媒体文件读写、转换与处理的纯 TypeScript 工具箱

音视频视频处理音频处理 【免费下载链接】mediabunny Pure TypeScript media toolkit for reading, writing, and converting video and audio files, directly in the browser. 项目地址&#xff1a; https://gitcode.com/gh_mirrors/me/mediabunny 点击查看 免费下载 Mediab…

阅读更多 →
本地知识助手:让代码与文档同步的智能索引方案 2026/9/29 7:53:55

本地知识助手:让代码与文档同步的智能索引方案

1. 为什么你的 Wiki 总是和代码对不上干我们这行的&#xff0c;大概都经历过这种场景&#xff1a;新同事入职&#xff0c;你甩给他一个 Wiki 链接&#xff0c;说“照着这个搭环境就行”。结果他折腾了一下午跑过来问你&#xff0c;为什么文档里写的mvn clean install在他机器上…

阅读更多 →
Python Machine Learning 第6章实战指南:模型评估与超参数调优的最佳实践 2026/9/29 7:53:49

Python Machine Learning 第6章实战指南:模型评估与超参数调优的最佳实践

示例工程机器学习深度学习 【免费下载链接】python-machine-learning-book-2nd-edition The "Python Machine Learning (2nd edition)" book code repository and info resource 项目地址&#xff1a; https://gitcode.com/gh_mirrors/py/python-machine-learning-bo…

阅读更多 →
黑马程序员JavaScript前端开发课后习题:从语法到DOM实战精讲 2026/9/29 7:53:48

黑马程序员JavaScript前端开发课后习题:从语法到DOM实战精讲

1. 为什么这本教材的课后习题值得逐题啃下来《JavaScript前端开发案例教程》这本书&#xff0c;黑马程序员的读者群体里几乎人手一本。我在带人和自己复盘的时候发现一个很奇怪的现象&#xff1a;书里的正文部分大家读得挺认真&#xff0c;一到课后习题就集体“跳过”&#xff…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉