zoukankan      html  css  js  c++  java
  • 手动脱壳—dump与重建输入表(转)

    文章中用到的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”…

  • 相关阅读:
    sign in和sign up区别
    sql语句左右表连接理解
    神器
    js不能执行的几个小白错误
    关于isset使用产生Can't use function return value in write context错误
    jQuery中怎么添加innerText、innerHtml(转)
    C#开发BHO程序(引)
    C# 开发BHO插件
    JS对日期时间的操作
    解决JQuery中datatables设置隐藏显示列多次提交后台刷新数据的问题
  • 原文地址:https://www.cnblogs.com/Fightingbirds/p/3172905.html
Copyright © 2011-2022 走看看