作者: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. FakeTaobaoDeepLink - 复制淘宝deeplink来拦截淘宝广告的自动拉起

    Fake Taobao Deeplink 复制 ** com.taobao.tao.welcome.Welcome ** 的intent-filter来拦截误触广告后自动拉起淘宝app 完整工程 Gi ...

  2. 大家最常用的编程论坛是哪个呢,欢迎评论!!掘金16 juejin 简书41 jianshu 博客85 csdn137 csdn

    软件编程交流论坛 掘金  16 juejin 简书  41 jianshu 博客  85 cnblogs csdn  137 csdn stackoverflow 0 思否 github 大家最常用的 ...

  3. pytorch(17)学习率调整

    学习率调整 class _LRScheduler 主要属性 optimizer:关联的优化器 last_epoch:记录epoch数 bash_lrs:记录初始学习率 class _LRSchedul ...

  4. JVM-对象及对象内存布局

    目录 前言 类与对象 对象类二分模型 对象 对象内存布局 JOL工具 对象头 Mark Word 类型句柄 对象头与锁膨胀 无锁 偏向锁 轻量级锁 重量级锁 重量级锁降级 实例数据 填充 对象生命周期 ...

  5. 在C++中实现aligned_malloc

    malloc的默认行为 大家都知道C++中可以直接调用malloc请求内存被返回分配成功的内存指针,该指针指向的地址就是分配得到的内存的起始地址.比如下面的代码 int main() { void * ...

  6. 使用quartz.net 完成一个winform版的任务提醒工具

    这个任务提醒工具是这样的,是每日定时执行,触发时间为 小时和分钟.每天早上来就可以把当天要做的添加到datagridview中,只记录了标题和内容和时间.双击dgv就查看内容. 如果每天计划重复,也可 ...

  7. Educational Codeforces Round 69 (Rated for Div. 2) D. Yet Another Subarray Problem 【数学+分块】

    一.题目 D. Yet Another Subarray Problem 二.分析 公式的推导时参考的洛谷聚聚们的推导 重点是公式的推导,推导出公式后,分块是很容易想的.但是很容易写炸. 1 有些地方 ...

  8. CSS盒子的尺寸

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...

  9. IPFS矿机封装原理解释

    近期无论是从媒体.新闻的高度曝光,还是市场拓展的覆盖度来看,IPFS 俨然成为今年最值得关注的行业话题与入场趋势.对于许多刚了解 IPFS 的小白来说,矿机的「封装」.「有效算力」和「原值算力」这些概 ...

  10. F - Fluctuation Limit HDU - 6860

    题目链接:https://vjudge.net/problem/HDU-6860 题意:相邻两天的差值的绝对值不超过K. 思路:该题的关键在于前面的点会影响后面的点,后面的点会影响前面的点,我们要找到 ...