文章中用到的demo下载地址:

http://download.csdn.net/detail/ccnyou/4540254

附件中包含demo以及文章word原稿

用到工具:

Ollydbg

LordPE

ImportREC

这些工具请自行下载准备

Dump原理这里也不多做描述,想要了解google it!常见的dump软件有LordPE,ProcDump,PETools等本文以LordPE为例

首先,打开 LordPE,由于此时机器上只有一个汉化版,也懒得花时间去找原版了。我们打开选项,设置成如图样子:

设置好后,在LordPE的进程窗口选择相关进程(这里以加了Aspack壳 的dumpDemo.exe为例),单击右键,执行【完整转存】DumpFull,保存即可,如果有Anti-Dump,先执行修正镜像大小(correct ImageSize),再dump full。保存名字默认为dumped.exe

重建输入表:

一般而言,一个加密的外壳,破坏原有的输入表是必有的功能。程序被dump出来后还需要重建输入表,例如这个程序dump后运行提示:

这里以ImportREC为例。在运行ImportREC之前,需要满足:

  • 目标文件完全被dump,另存为另一个文件
  • 目标文件正在运行中
  • 事先找到程序的真正入口(OEP)或IAT的偏移和大小

这里使用堆栈平衡原理找OEP,由于找OEP不是本文重点,这简单点说明过程:

1,OD载入,在执行完pushad后,看到各个寄存器被压进

0012FFA4h~0012FFC0h中,如图:

2,在OD中下硬件访问断点:

hr 12FFA4

3,按F9运行程序,外壳代码处理结束后,调用popad恢复现场环境,将访问这些堆栈。OD就会中断,此时离OEP不远了。中断如图:

其实如果了解其原理,可以在PE文件开始运行时,记下当时的ESP,假设是 12FFC4h,大多数程序第一句都是push 指令,就是对12FFC0h进行写入操作,因此对其设置硬件写断点,(hr 12FFC0),就可以方便地来到OEP附近了。

4,回到正题,跟到Retn后发现程序来到

00401700 /.  55            PUSH EBP

这里,按Ctrl+A让OD分析一下,发现这里就是真正入口点了,记录之。

好像有点离体了。。。。回到刚才正题,运行ImportREC,在下拉框中选择dumpdemo进程,然后在右边OEP中填入我们获取的OEP的RAV,这里我们输入1700(由于映像基质是00400000),然后点击 自动搜寻(IAT AutoSearch),让其自动检测IAT大小和偏移

如果出现如图对话框,表示输入的OEP发挥作用了

单击 【获取输入表】(Get Imports)按钮,让其自动分析IAT结构得到基本信息,如图:

这里有一个无效的,经过尝试右键菜单中的Trace level 1,2,3命令修复均无效,而且由图中数据也可以看出这个指针式无效的,我们展开,右键【删除指针数据】,现在全部都是有效的了。

5,修复已脱壳的Dumped.exe,选保证选中【增加新区段】(默认选中),再点击【修复转存文件】,打开Dumped.exe,此时不需要手工备份,程序将创建文件Dumped_.exe,此时OEP也被修正。我们运行Dumped_.exe,已经没有刚才那个错误提示了。功能完全正确,确定就是比刚才的大了点(原文件11.5k,这个修正后的36.0k),中间多了外壳数据和新增区段(.mackt)的输入表数据。

6,如果不舍得新增一段区段的空间,也可以在.rdata中选取一段空白,这里输入000029C0,在单击修复转存文件即可,这次修复后体积是32.0k,节省了4k  O__O”…

手动脱壳—dump与重建输入表(转)的更多相关文章

  1. 脱壳第二讲,手动脱壳PECompact 2.x

    脱壳第二讲,手动脱壳PECompact 2.x PS: 此博客涉及到PE格式.所以观看此博客你要熟悉PE格式 首先,逆向inc2l这个工具,汇编中可能会用的 inc头文件转换为lib的工具 但是他有壳 ...

  2. 破解之寻找OEP[手动脱壳](2)

    1.使用ESP定律 OD载入后,F8一次,在寄存器窗口的ESP的内容上(如0012FFA4)右键:“在数据窗口中跟随”,到内存数据窗口,将内存数据窗口以HEX 数据形式显示,在刚才的地址起始位置上(如 ...

  3. 重建UNDO表空间遭遇ORA-01548

    今天开发那边的一套数据库的undo表空间不知道被谁设置成了自动扩展,然后所谓的屋漏偏逢连夜雨的是, 开发人员今天跑了一个很大的事物,然后直接后果就是undo表空间不断被扩展,直到把文件系统写爆了.没办 ...

  4. upx 手动脱壳

    查壳 UPX 0.89.6 - 1.02 / 1.05 - 2.90 (Delphi) stub -> Markus & Laszlo upx这类压缩壳手动脱壳非常简单. 一.查找oep ...

  5. [PE结构分析] 8.输入表结构和输入地址表(IAT)

    在 PE文件头的 IMAGE_OPTIONAL_HEADER 结构中的 DataDirectory(数据目录表) 的第二个成员就是指向输入表的.每个被链接进来的 DLL文件都分别对应一个 IMAGE_ ...

  6. 小甲鱼PE详解之输入表(导入表)详解2(PE详解08)

    在此之前,我们已经对这个输入表进行了一些实践和理解,这有助于大家对这个概念更进一步的加深认识.小甲鱼觉得,越是复杂的问题我们应该越是去动手操作它,认识它,这样才容易熟悉它! 在上一节课我们像小鹿一样的 ...

  7. 小甲鱼PE详解之输入表(导入表)详解(PE详解07)

    捷径并不是把弯路改直了,而是帮你把岔道堵上! 走得弯路跟成长的速度是成正比的!不要害怕走上弯路,弯路会让你懂得更多,最终还是会在终点交汇! 岔路会将你引入万劫不复的深渊,并越走越深…… 在开始讲解输入 ...

  8. BarTender中如何调整数据输入表单的大小?

    BarTender中的表单设计,是一个简单而又复杂的操作.简单的是它提供很多实用的工具,帮助用户实现更多的功能,复杂的是要对其进行排版设计,这就要看小伙伴们的个人要求高低了. 自定义数据输入表单时,你 ...

  9. [源码]Delphi 5KB无输入表下载者

    [源码]Delphi 5KB无输入表下载者源码 PROGRAM Fun; type DWORD = LongWord; THandle = LongWord; BOOL = LongBool; LPC ...

随机推荐

  1. redis 有序集合(zset)函数

    redis 有序集合(zset)函数 zAdd 命令/方法/函数 Adds the specified member with a given score to the sorted set stor ...

  2. .Net Core技术研究-Span<T>和ValueTuple<T>

    性能是.Net Core一个非常关键的特性,今天我们重点研究一下ValueTuple<T>和Span<T>. 一.方法的多个返回值的实现,看ValueTuple<T> ...

  3. 关于linux系统CPU篇--->上下文切换

    1.什么是CPU上下文切换? linux是一个多任务操作系统,它支持远大于CPU数量的任务同时运行,当然这些任务实际上并不是真的同时在运行,而是因为系统在很短的时间内,将CPU轮流分配给它们,造成多任 ...

  4. SQL server 删除日志文件 秒删

    直接执行 USE [库名称]GOALTER DATABASE [库名称] SET RECOVERY SIMPLE WITH NO_WAITGOALTER DATABASE  [库名称] SET REC ...

  5. QGraphicsItem的paint函数的一些相关问题

    在QGraphicsItem中,一个成员函数paint(),其声明如下: void QGraphicsItem::paint ( QPainter * painter, const QStyleOpt ...

  6. Oracle SQL语句之常见优化方法总结--不定更新

    1.SQL语句尽量用大写的: 因为oracle总是先解析SQL语句,把小写的字母转换成大写的再执行. 2.WHERE子句中的连接顺序: ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理, ...

  7. Linux学习笔记之Linux添加/删除用户和用户组

    本文总结了Linux添加或者删除用户和用户组时常用的一些命令和参数. 1.建用户: adduser phpq //新建phpq用户 passwd phpq //给phpq用户设置密码 2.建工作组 g ...

  8. SQL Server2017还原数据库时指定mdf文件及日志文件的名称

    由于需要还原同一个数据库的不同备份到不同数据库中,可是在还原的时候,可是在指定目标数据库时,填写不同的数据库名称,在SQL Server Data文件夹中生成的.mdf文件还是同一个,如图,虽然是很简 ...

  9. Linux Git用户组

    Vivien: groupadd admin useradd -d /home/bill -s /bin/bash -m bill 用户组 查看用户列表 cat /etc/passwd 或者 cat ...

  10. Docker Swarm Mode 学习笔记 (基本概念)

    ​ Swarm 是使用 SwarmKit 构建的 Docker 引擎内置(原生)的集群管理和编排工具 节点 ​ 运行 Docker 的主机可以主动初始化一个 Swarm 集群 docker swarm ...