dump文件 修复iat_在OD中手工修复IAT重定向
前言
壳代码,都会重定向IAT表项到壳里的地址.
如果找到真正的IAT表项的API地址列表, 自己手工填到ImpREC中挺繁琐的.
这时, 可以在已经停在OEP处的OD中, 先在ImpREC中填写正确OEP, 得到IAT表项.
当IAT表项在壳内时(无效项), 在OD中根据ImpREC提示的IAT表项地址, 手工找到真实的API地址, 将IAT手工填充(2进制拷贝,2进制粘贴), Dump出去壳PE. 在用ImpREC再次Load, 修复IAT, 只要做少量确认和删除任务, IAT就可修复完成.
记录
异常计数法
对于有对抗的壳, 大概只能采用异常技术法(相对于F8, F7)走到OEP.
OD载入PE后, 直接(SHIFT+F9), 记录N-1次的计数到程序启动.
再次载入PE, (SHIFT+F9)(N-1)次, 在Memory窗口F2断点到代码段(PE头下面就是代码段).
最后一次(SHIFT+F9), 命中时, 离OEP就几步(过了JMP就是OEP), 可以F8,F7走过去.
ImpREC中无效IAT项的识别
无效IAT
可以在无效表项上右击, 选择反汇编, 看看是不是找到有效IAT(包括IAT表项重定向)
可以看出, 这个IAT表项是ImpREC识别错了, 没有指向API地址, 也没有API重定向. 在这个IAT上看看, 如果表项都是无效的, 可以将这个IAT整个cut掉.
被重定向的IAT
去[0x3f11f0]看, 确实是实际的IAT
在OD中手工修复IAT重定向
拿IAT为例子
这个表项内容在壳地址里.
IAT范围
IatAddrBegin = 00268284
IatAddrEnd = 00268284 + 0xB7 * 4 = 00268560
FirstRva = 00268284
FirstApiPtr = 003f0000
FirstRealApiPtr = [0x003f11f0] = 0x7c809bd7
IAT表项是以0结尾的, 从第一个IAT表项往下拉, 拖选到0结尾的地址, 选择2进制拷贝.
在CPU窗口内存小窗口, go到IatAddrBegin, 往下拖选到IatAddrEnd(如果实际API个数较少, 可以拖到多留一个\0的位置, 总之选择2进制粘贴时, 目标地址范围选择区域要>=原地址范围), 选择2进制粘贴.
此时, EIP就在OEP, 用OllyDump插件Dump出无壳PE. 用ImpREC再次载入OD中的目标程序, 填写OEP, 取IAT集合. 这时, 只有少量无效IAT, 可以用看反汇编的方法确认无效项, 然后cut掉. 当IAT全部有效时, 修复IAT. 可选PeRebuild, 脱壳完成.
dump文件 修复iat_在OD中手工修复IAT重定向相关推荐
- Windows下dump文件生成与分析
一. 生成Dump文件方式 1.1任务管理器 在程序崩溃后,先不关闭程序,在任务管理器中找到该程序对应的进程.右键->创建转储文件. 此时会在默认的目录下创建出一个dump文件. 可以看出 ...
- DUMP文件分析4:栈溢出
前面说到过,栈溢出类型的异常通过编程的方式获取DUMP可能不成功,因为栈溢出会破坏SEH(结构化异常处理)框架.实际上,通过DUMP文件来调试栈溢出同样是困难的,因为栈溢出本身一般不会造成异常,异常往 ...
- Java如何dump文件
jmp命令使用 查看内存对象占用情况 ./jmap -histo $pid > /var/www/logs/aaaa.txt dump命令(jmap -dump:format=b,file=文件 ...
- Dump 文件的生产,作用,查看和调试
1. 如何排查程序crash,freeze等问题? 在日常开发中,即使代码写得有多谨慎,免不了还是会发生各种意外的事件,比如服务器内存突然飙高,又或者发生内存溢出(OOM).当发生这种情况时,我们怎么 ...
- linux分析mat使用教程,使用MAT(Memory Analyzer Tool)工具分析dump文件
<使用MAT(Memory Analyzer Tool)工具分析dump文件> 前言 生产环境中,尤其是吃大内存的JVM,一旦出现内存泄露等问题是非常容易引发OutofMemory的,如果 ...
- Windows下dump文件的生成
Windows下Dump文件分为两大类,内核模式Dump和用户模式Dump.内核模式Dump是操作系统创建的崩溃转储,最经典的就是系统蓝屏,这时候会自动创建内核模式的Dump.用户模式Dump进一步可 ...
- Windows下的Dump文件
一. 生成Dump文件方式 1.1任务管理器 在程序崩溃后,先不关闭程序,在任务管理器中找到该程序对应的进程.右键->创建转储文件. 此时会在默认的目录下创建出一个dump文件. 可以看出 ...
- 自定义VS程序异常处理及调试Dump文件(一)
1. Dump文件 1. Dump文件介绍 Dump文件(Dump File),也叫转储文件,以.DMP为文件后缀.dump文件是进程在内存中的镜像文件,通过转换然后存储成以.DMP后缀的文件.dum ...
- dump文件 修复iat_内存溢出如何Dump文件
分析垃圾堆是解决内存外问题最普遍的方法,也是唯一可靠的方法.在这篇文章中,我将使用Eclipse MAT,因为这是我最有经验的工具,但是您可以对任何其他类似的工具采取类似的方法. 在我们开始之前,请注 ...
最新文章
- 什么是存储过程?什么是触发器?SQL中存储过程与触发器的区别是什么?
- c++检测a字符串是否包含b字符串_Python编程基础—字符串
- Java实战应用50篇(一)-Java并发编程:volatile关键字解析
- 验证码识别的原理python_Python验证码识别处理实例
- 如何使用schematics快速创建全新的SAP Spartacus Storefront并启用SSR
- 计算机设计大赛国奖作品_5. 模拟退火求解旅行商问题
- 计算机的五大组成部分(计组学习一)
- 重新leetcode第1天——二叉树遍历算法讲解合集
- JavaScript和JQuery获取DIV的值
- php excel 添加图片不显示图片,excel表格中使用宏批量插入图片,发给别人打开图片不显示...
- font-family 使用设置
- PHP 5.6,7.0,7.1,7.2 和 HHVM 运行效率比较
- matlab 切点投资组合 程序,MATLAB证券投资组合分析
- 图像校色 白平衡调整
- Android 状态栏适配
- webpack打包、js处理兼容性、代码压缩问题Uncaught SyntaxError: Cannot use import statement outside a module (at index
- javaweb JAVA JSP水费管理系统JSP电费管理系统JSP缴费管理系统JSP水费缴费系统JSP水电费管理
- 阿里云短信服务(JAVA)
- oracle 二进制算法,二进制搜索(查找)
- 使用Docker搭建自己的在线密码管理器软件-Bitwarden
热门文章
- 【Linux学习】什么是 inode
- Linux server 服务器基本操作
- 基于nodejs+vue二维码在线点餐系统 python点餐码 java php
- SIGCOMM 2021网址
- STP——BPDU格式及字段说明
- KVM虚拟机网络模式
- Linux界面下运行vaspkit,linux下超详细教程安装phonopy - 第一原理 - 小木虫 - 学术 科研 互动社区...
- tensorflow移植到Android端,实现物体检测自动拍照
- 说说测试环境、预发布环境、生产环境
- Abp框架从零开始(基于.Net Core 2.2) 小记(四) Abp中使用Redis