前言

壳代码,都会重定向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重定向相关推荐

  1. Windows下dump文件生成与分析

    一.    生成Dump文件方式 1.1任务管理器 在程序崩溃后,先不关闭程序,在任务管理器中找到该程序对应的进程.右键->创建转储文件. 此时会在默认的目录下创建出一个dump文件. 可以看出 ...

  2. DUMP文件分析4:栈溢出

    前面说到过,栈溢出类型的异常通过编程的方式获取DUMP可能不成功,因为栈溢出会破坏SEH(结构化异常处理)框架.实际上,通过DUMP文件来调试栈溢出同样是困难的,因为栈溢出本身一般不会造成异常,异常往 ...

  3. Java如何dump文件

    jmp命令使用 查看内存对象占用情况 ./jmap -histo $pid > /var/www/logs/aaaa.txt dump命令(jmap -dump:format=b,file=文件 ...

  4. Dump 文件的生产,作用,查看和调试

    1. 如何排查程序crash,freeze等问题? 在日常开发中,即使代码写得有多谨慎,免不了还是会发生各种意外的事件,比如服务器内存突然飙高,又或者发生内存溢出(OOM).当发生这种情况时,我们怎么 ...

  5. linux分析mat使用教程,使用MAT(Memory Analyzer Tool)工具分析dump文件

    <使用MAT(Memory Analyzer Tool)工具分析dump文件> 前言 生产环境中,尤其是吃大内存的JVM,一旦出现内存泄露等问题是非常容易引发OutofMemory的,如果 ...

  6. Windows下dump文件的生成

    Windows下Dump文件分为两大类,内核模式Dump和用户模式Dump.内核模式Dump是操作系统创建的崩溃转储,最经典的就是系统蓝屏,这时候会自动创建内核模式的Dump.用户模式Dump进一步可 ...

  7. Windows下的Dump文件

    一.    生成Dump文件方式 1.1任务管理器 在程序崩溃后,先不关闭程序,在任务管理器中找到该程序对应的进程.右键->创建转储文件. 此时会在默认的目录下创建出一个dump文件. 可以看出 ...

  8. 自定义VS程序异常处理及调试Dump文件(一)

    1. Dump文件 1. Dump文件介绍 Dump文件(Dump File),也叫转储文件,以.DMP为文件后缀.dump文件是进程在内存中的镜像文件,通过转换然后存储成以.DMP后缀的文件.dum ...

  9. dump文件 修复iat_内存溢出如何Dump文件

    分析垃圾堆是解决内存外问题最普遍的方法,也是唯一可靠的方法.在这篇文章中,我将使用Eclipse MAT,因为这是我最有经验的工具,但是您可以对任何其他类似的工具采取类似的方法. 在我们开始之前,请注 ...

最新文章

  1. 什么是存储过程?什么是触发器?SQL中存储过程与触发器的区别是什么?
  2. c++检测a字符串是否包含b字符串_Python编程基础—字符串
  3. Java实战应用50篇(一)-Java并发编程:volatile关键字解析
  4. 验证码识别的原理python_Python验证码识别处理实例
  5. 如何使用schematics快速创建全新的SAP Spartacus Storefront并启用SSR
  6. 计算机设计大赛国奖作品_5. 模拟退火求解旅行商问题
  7. 计算机的五大组成部分(计组学习一)
  8. 重新leetcode第1天——二叉树遍历算法讲解合集
  9. JavaScript和JQuery获取DIV的值
  10. php excel 添加图片不显示图片,excel表格中使用宏批量插入图片,发给别人打开图片不显示...
  11. font-family 使用设置
  12. PHP 5.6,7.0,7.1,7.2 和 HHVM 运行效率比较
  13. matlab 切点投资组合 程序,MATLAB证券投资组合分析
  14. 图像校色 白平衡调整
  15. Android 状态栏适配
  16. webpack打包、js处理兼容性、代码压缩问题Uncaught SyntaxError: Cannot use import statement outside a module (at index
  17. javaweb JAVA JSP水费管理系统JSP电费管理系统JSP缴费管理系统JSP水费缴费系统JSP水电费管理
  18. 阿里云短信服务(JAVA)
  19. oracle 二进制算法,二进制搜索(查找)
  20. 使用Docker搭建自己的在线密码管理器软件-Bitwarden

热门文章

  1. 【Linux学习】什么是 inode
  2. Linux server 服务器基本操作
  3. 基于nodejs+vue二维码在线点餐系统 python点餐码 java php
  4. SIGCOMM 2021网址
  5. STP——BPDU格式及字段说明
  6. KVM虚拟机网络模式
  7. Linux界面下运行vaspkit,linux下超详细教程安装phonopy - 第一原理 - 小木虫 - 学术 科研 互动社区...
  8. tensorflow移植到Android端,实现物体检测自动拍照
  9. 说说测试环境、预发布环境、生产环境
  10. Abp框架从零开始(基于.Net Core 2.2) 小记(四) Abp中使用Redis