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),仅供参考

相关新闻

视频怎么加字幕?SRT、VTT、ASS字幕添加方法

视频怎么加字幕?SRT、VTT、ASS字幕添加方法

在视频处理中,字幕是非常常见的一类需求。例如:MP4 视频添加字幕;给课程视频添加字幕;给采访视频添加对白;给短视频添加中文字幕;将 SRT 字幕添加到视频中。如果经常做视频,可以直接使用专业编辑…

2026/9/29 7:01:54 阅读更多 →
大模型私人定制:5分钟用llama-factory微调Qwen,TaoToken统一Key接入不写一行代码

大模型私人定制:5分钟用llama-factory微调Qwen,TaoToken统一Key接入不写一行代码

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/29 7:00:53 阅读更多 →
Jupytext 将 IJavascript 内核 Notebook 转换为 Markdown 文档:机制、样例与镜像测试解析

Jupytext 将 IJavascript 内核 Notebook 转换为 Markdown 文档:机制、样例与镜像测试解析

开发工具 【免费下载链接】jupytext Jupyter Notebooks as Markdown Documents, Julia, Python or R scripts 项目地址: https://gitcode.com/gh_mirrors/ju/jupytext 点击查看 免费下载 Jupytext 的核心能力之一,是把任意内核的 Jupyter Notebook 双向…

2026/9/29 7:00:53 阅读更多 →

最新新闻

从设计规范到AI生成:测试用例资产化的关键实践

从设计规范到AI生成:测试用例资产化的关键实践

1. 为什么多数测试用例写着写着就“废”了我见过太多项目组把测试用例当成一个“交付物”来凑:需求评审完了,测试经理排个deadline,测试工程师花两三天把用例铺满Excel,领导一看数量不少,归档。然后呢?开发…

2026/9/29 7:39:24 阅读更多 →
软件测试面试题高频考点解析:从测试思维到项目实战

软件测试面试题高频考点解析:从测试思维到项目实战

“软件测试面试题”这五个字,大概是测试从业者搜索频率最高的关键词了。我干了十年测试,当过候选人,也做过面试官,见过太多人捧着“100道题背答案”,结果一问项目就露馅。这里先把话说透:面试题从来不是考你…

2026/9/29 7:39:24 阅读更多 →
Jspreadsheet 单元格内嵌图片渲染实战:image 列类型、base64 内嵌与 updateTable 钩子全解析

Jspreadsheet 单元格内嵌图片渲染实战:image 列类型、base64 内嵌与 updateTable 钩子全解析

前端UI组件 【免费下载链接】ce Jspreadsheet is a lightweight JavaScript data grid component for creating interactive data grids with advanced spreadsheet controls. 项目地址: https://gitcode.com/gh_mirrors/ce/ce 点击查看 免费下载 本指南围绕 Jspre…

2026/9/29 7:39:24 阅读更多 →
如何5分钟装上DSH小鲸鱼挂件:DeepSeek余额Widget的4种一键安装方法

如何5分钟装上DSH小鲸鱼挂件:DeepSeek余额Widget的4种一键安装方法

如何5分钟装上DSH小鲸鱼挂件:DeepSeek余额Widget的4种一键安装方法 【免费下载链接】DeepSeek-Balance-Whale-Widget DeepSeek Harness(DSH)一只住在 DSH 界面右下角的小鲸鱼娘,帮你盯着DeepSeek账户余额。QQ弹弹,支持…

2026/9/29 7:39:24 阅读更多 →
我做了个反直觉实验:Transformer 的“异常层”,其实不比普通层脆弱

我做了个反直觉实验:Transformer 的“异常层”,其实不比普通层脆弱

⚠️ 本文为个人独立研究(TRL-4 实验室原型),非生产级方案。所有结论基于有限样本(有效独立架构 3 类),外推有效性未经独立验证。请勿将本文内容用于生产环境、安全关键场景或商业决策。先说结论&#xff1…

2026/9/29 7:39:24 阅读更多 →
Watchexec 贡献指南:事件架构、调试手段与扩展开发实战

Watchexec 贡献指南:事件架构、调试手段与扩展开发实战

开发工具CLI 【免费下载链接】watchexec Executes commands in response to file modifications 项目地址: https://gitcode.com/gh_mirrors/wa/watchexec 点击查看 免费下载 本文以 CONTRIBUTING.md 为骨架,面向希望向 Watchexec(一个"…

2026/9/29 7:38:24 阅读更多 →

日新闻

开源模型端侧落地实战:量化、推理加速与Agent上下文管理

开源模型端侧落地实战:量化、推理加速与Agent上下文管理

1. 从"追平"到"端侧落地":开源模型这波到底变了什么如果你最近半年一直在关注模型圈的动态,应该能明显感觉到一个拐点:开源模型和闭源旗舰之间的差距,正在从"代差"变成"身位差"。以前大家…

2026/9/29 0:00:05 阅读更多 →
AI Evals实战指南:从零搭建LLM应用评估体系与CI/CD集成

AI Evals实战指南:从零搭建LLM应用评估体系与CI/CD集成

1. 为什么AI Evals值得你花时间搞明白做LLM应用的人,迟早会撞上同一堵墙:模型输出飘忽不定,今天答得好好的,明天换个问法就胡说八道。你改了一版提示词,感觉好像好了点,但到底好了多少?说不清。…

2026/9/29 0:00:05 阅读更多 →
Java采购管理系统实战:从数据库设计到事务一致性

Java采购管理系统实战:从数据库设计到事务一致性

简介:这是一套面向Java Web初学者与课程设计者的采购管理系统完整源码,采用JSP技术搭建,配合MySQL数据库,用于解决企业采购信息的管理问题,适合作为毕业设计、课程大作业或进销存类项目的参考模板。系统实现了用户登录…

2026/9/29 0:00:05 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/28 5:40:26 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/28 9:47:26 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/28 8:07:01 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/28 16:55:15 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/29 5:58:00 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/29 3:55:56 阅读更多 →