作者:Fly2015

这个程序是吾爱破解脱壳练习第8期的加壳程序,该程序的壳是MoleBox V2.6.5壳,之前也碰过该种壳但是这个程序似乎要复杂一点。

首先对加壳程序进行侦壳处理。

Exeinfo PE侦壳的结果:

DIE侦壳的结果,很显然DIE告诉我们被加壳程序的源程序使用Delphi编写的,这个比较有用,对于我们找到程序的真实OEP很有帮助作用。

OD载入该加MoleBox V2.6.5壳的程序,入口点汇编的代码如图。看到PUSHAD,我们很自然会想到使用ESP定律进行脱壳。F8单步走到PUSHAD的下一条指令即地址00469BD9处,选择ESP寄存器,右键-->HW Break [esp](硬件断点),F9运行程序。

程序在刚才下硬件写入断点的地址处断了下来,如图。

单步F7到地址0046997B3处,发现Call eax指令中的EAX保存是加壳程序真实OEP的VA地址0045159C。

F7跟进到地址0045159C处查看,汇编代码是不是很熟悉?典型的Delphi程序的入口点汇编代码。说实话,我不怎么喜欢Delphi程序的反汇编,因为对于Delphi程序的反汇编没有比较理想的工具。

OK,被加壳程序的真实OEP找到了,是不是就可以直接Dump给程序脱壳完事呢?试一试就知道了。使用OD的插件OllyDump或者Load PE+ImportREC或者是Scylla_x86进行程序的脱壳,然后运行程序,结果如图。

程序运行的不友好界面又出现了。被加壳程序的真实OEP地址已经找到了,但是程序运行还是出了问题,那么很有可能是Dump程序的IAT没有修复好。在进行程序的IAT修复的时候,直接将ImportREC程序中显示的无效函数地址给剪切了。经过观察发现,被剪切的无效函数不是系统Dll的导出函数,但是一般被加壳程序的IAT表中的函数地址结尾的标记是-1或者0等。后来经过参考吾爱破解上的帖子才知道,原来是有部分函数的API地址被加密处理了。

下面使用OD在程序的内存数据中查找IAT表保存的内存位置。当找到了被加壳程序的真实的OEP以后,就可以在原程序真实OEP地址以后(被加壳原程序)代码中去查找被加壳原程序的IAT的保存地址即找到IAT表的入口地址。

从上面找到的代码中,观察发现跟进地址0040658C处就能找到调用系统Dll导出函数的代码。果然,跟进以后找到了程序调用系统API函数的地方,比较明显的是在地址004554DC处保存着函数user32.PostQuitMessage的调用地址。

在该程序的内存数据区Ctrl+G到地址004554DC处找到了函数user32.PostQuitMessage地址的保存位置。

上下拖动一下OD的数据区的滚动条,就可以找到IAT表的起始VA地址0045512C和IAT表的结束地址00455728并且IAT表的大小为455724 - 45512C = 5F8。


在IAT表发现了被加密的系统API函数的位置。很显然,被加密处理的IAT表中的函数地址在系统的Dll中是不存在,OD的解析中没有对应的系统API函数,如图。

现在的任务就是将这部分加密的系统API函数恢复还原出来。

Ctrl+F2让OD再次调试载入被加壳的程序,删除之前下的硬件写入断点,OD内存数据区Ctrl+G到IAT表的起始VA地址0045512C处,然后找到IAT表中所有的被加密的系统API函数的保存地址如00455170处,选择这些地址 右键-->下DWORD型的硬件写入断点,几次F9以后被加密的系统函数API地址显示出来了,然后将这些API函数地址记录下来。

下面是经过上面这种方法记录下来的被加密系统API函数的地址。

被加密系统API函数的地址没有恢复之前,用Scylla_x86看到的IAT表函数的结果是有18个无效函数地址。

离被加壳程序脱壳又进了一步。Ctrl+F2让OD再次运行程序进行分析,删除前面下的所有类型的断点。再次根据ESP脱壳定律,用之前的方法找到该程序的真实的OEP的VA地址并运行到此即地址0045159C处。在OD的内存数据区Ctrl+G到IAT表的起始VA地址0045512C处,然后找到IAT表中被加密系统API函数的地址处,根据前面的记录的系统API函数的正确地址手动将加密的函数API地址修改过来,如图。

手动将加密的系统API函数的地址修改正确之后,用Scylla_x86看到的IAT表函数的结果,如图。

OK,大功告成。直接用OD的插件OllyDump在程序真实的OEP的RVA为5159C处进行dump进程就可以完成改程序的完美脱壳了。或者使用Load PE结合RecImport进行程序的Dump和IAT表的修复,完成程序的脱壳。或者直接使用Scylla_x86工具进行先程序Dump然后进行Fix Dump。

但是在使用工具的时候请注意Scylla_x86和RecImport所填写的数据不一样,前者填入的VA地址,后者填写的RVA地址。

程序脱壳成功,运行验证一下,如图。

总结,上面的脱壳的方法是挫了点,但是思路没有错还是解决了问题,后面有空研究一下,其他比较好的脱壳的方法。

Mole Box V2.6.5脱壳分析文档以及完美脱壳后的程序的下载地址:http://download.csdn.net/detail/qq1084283172/8896587

吾爱破解脱壳练习第8期的地址:http://www.52pojie.cn/thread-11306-1-1.html。

吾爱破解脱壳练习第8期脱壳分析的地址:http://www.52pojie.cn/thread-11306-2-1.html。

手动脱Mole Box V2.6.5壳实战的更多相关文章

  1. 手动脱Mole Box壳实战总结

    作者:Fly2015 这个程序是吾爱破解脱壳练习第8期的加壳程序,该程序的壳是MoleBox V2.6.5壳,这些都是广告,能够直接无视了.前面的博客手动脱Mole Box V2.6.5壳实战中已经给 ...

  2. 手动脱UPX压缩壳

    示例程序演示 样例程序选择win7自带的notepad.exe,该程序原本是没有加壳的: 拷贝notepad.exe文件一个副本,重命名为notepad - upx.exe,我们对notepad - ...

  3. 手动脱WinUpack 壳实战

    作者:Fly2015 吾爱破解培训第一课选修作业第6个练习演示样例程序.不得不反复那句话,没见过这样的壳,该壳是压缩壳的一种,相对于压缩壳,加密壳的难度要大一些.特别是IAT表的修复问题上. 首先分别 ...

  4. 手动脱RLPack壳实战

    作者:Fly2015 吾爱破解论坛培训第一课选修作业练习的第7题. 这个壳没听说过.可是脱起来比較简单.依据ESP定律就可以直达光明,Dump出原来的程序. 老规矩.首先对须要脱壳的程序进行查壳处理. ...

  5. 手动脱KBys Packer(0.28)壳实战

    作者:Fly2015 吾爱破解培训第一课选修作业第5个练习程序.在公司的时候用郁金香OD调试该加壳程序的时候出了点问题,可是回家用吾爱破解版的OD一调试,浑身精神爽,啥问题也没有. 首先使用查壳工具对 ...

  6. 手动脱PeCompact 2.20壳实战

    作者:Fly2015 PeCompact壳又是一个没有听说过的壳,需要脱壳的程序是吾爱破解培训的第一课的选修作业四.最近对脱壳有点上瘾了,当然也遭受了脱壳受挫的无奈,但是比较幸运还是把这个壳给搞了. ...

  7. 手动脱NsPacK壳实战

    作者:Fly2015 这里脱壳的程序是吾爱破解培训的作业2,相较于作业1略微要强一点,可是仅仅要掌握了脱壳的ESP定律,脱这个Nspack壳并不难.只是还是蛮有意思的. 1.使用查壳软件对加壳的程序进 ...

  8. <逆向学习第三天>手动脱FSG壳,修复IAT。

    其实对于简单的壳来说,脱壳常用的方法也无非是那几种,但是每种有每种的好处,具体使用那种方法视情况而定,我今天学习的这个壳很简单,但是重点在于修复IAT. 一.查壳: FSG 2.0的壳. 二.脱壳: ...

  9. <逆向学习第二天>如何手动脱UPX、Aspack壳

    UPS.AsPack压缩壳介绍: UPX .AsPack是一款先进的可执行程序文件压缩器.压缩过的可执行文件体积缩小50%-70% ,这样减少了磁盘占用空间.网络上传下载的时间和其它分布以及存储费用. ...

随机推荐

  1. MySQL注入与informantion_schema库

    目录 只可读 自动开启 和MySQL注入有关的3个表 手动注入的使用案例 表介绍 查询一个表中全部字段的过程 MySQL V5.0安装完成会默认会生成一个库(informantion_schema), ...

  2. Docker安装Openvas

    目录 安装 在本机内运行 在局域网内运行 关闭 参考 安装 ➜ ~ docker search openvas NAME DESCRIPTION STARS OFFICIAL AUTOMATED mi ...

  3. mysql索引设计的注意事项(大量示例,收藏再看)

    mysql索引设计的注意事项(大量示例,收藏再看) 目录 一.索引的重要性 二.执行计划上的重要关注点 (1).全表扫描,检索行数 (2).key,using index(覆盖索引) (3).通过ke ...

  4. AOP面试造火箭始末

    本文已整理致我的github地址,欢迎大家 star 支持一下 这是一个困扰我司由来已久的难题,Dubbo 了解过吧,对外提供的服务可能有多个方法,一般我们为了不给调用方埋坑,会在每个方法里把所有异常 ...

  5. PAT-1018(Public Bike Management)最短路+额外条件+所有最短路中找出满足条件的路径+dijkstra算法

    Public Bike Management PAT-1018 使用一个vector来存储所有最短路的前驱结点,再通过使用dfs和一个额外的vector记录每一条路径 #include<iost ...

  6. POJ-2406(KMP+字符串压缩)

    Power String POJ-2406 字符串压缩模板题,但是是求有多少个这样最短的子串可以组成s. #include<iostream> #include<cstring> ...

  7. 树莓派4b通过外接ssd硬盘启动系统失败的排查和解决

    树莓派4b通过外接ssd硬盘启动系统失败,症状: 屏幕卡在黑屏或提示 mmc1:Controller never released inhibit bit(s).... 先说如何设置硬盘启动,后面是解 ...

  8. linux 设置系统时间

    第一种: 服务器date时间不准: root@mdy-zabbix2:~# date Fri Sep 28 09:58:56 UTC 2018 实际是下午6点 第一步:执行tzselect 第二步: ...

  9. 树莓派 3/4 安装 FreeBSD

    已盼春来归 已盼春来归 今日去 愿为春来归 盼归春天来了 FreeBSD 的春天在哪里? 树莓派是什么,相信凡是关注了我们的人都不会不知道,但是介于非专业人员需要在此做简要介绍.我们的安卓手机,大部分 ...

  10. webpack核心模块tapable用法解析

    前不久写了一篇webpack基本原理和AST用法的文章,本来想接着写webpack plugin的原理的,但是发现webpack plugin高度依赖tapable这个库,不清楚tapable而直接去 ...