手动脱Mole Box V2.6.5壳实战
作者: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壳实战的更多相关文章
- 手动脱Mole Box壳实战总结
作者:Fly2015 这个程序是吾爱破解脱壳练习第8期的加壳程序,该程序的壳是MoleBox V2.6.5壳,这些都是广告,能够直接无视了.前面的博客手动脱Mole Box V2.6.5壳实战中已经给 ...
- 手动脱UPX压缩壳
示例程序演示 样例程序选择win7自带的notepad.exe,该程序原本是没有加壳的: 拷贝notepad.exe文件一个副本,重命名为notepad - upx.exe,我们对notepad - ...
- 手动脱WinUpack 壳实战
作者:Fly2015 吾爱破解培训第一课选修作业第6个练习演示样例程序.不得不反复那句话,没见过这样的壳,该壳是压缩壳的一种,相对于压缩壳,加密壳的难度要大一些.特别是IAT表的修复问题上. 首先分别 ...
- 手动脱RLPack壳实战
作者:Fly2015 吾爱破解论坛培训第一课选修作业练习的第7题. 这个壳没听说过.可是脱起来比較简单.依据ESP定律就可以直达光明,Dump出原来的程序. 老规矩.首先对须要脱壳的程序进行查壳处理. ...
- 手动脱KBys Packer(0.28)壳实战
作者:Fly2015 吾爱破解培训第一课选修作业第5个练习程序.在公司的时候用郁金香OD调试该加壳程序的时候出了点问题,可是回家用吾爱破解版的OD一调试,浑身精神爽,啥问题也没有. 首先使用查壳工具对 ...
- 手动脱PeCompact 2.20壳实战
作者:Fly2015 PeCompact壳又是一个没有听说过的壳,需要脱壳的程序是吾爱破解培训的第一课的选修作业四.最近对脱壳有点上瘾了,当然也遭受了脱壳受挫的无奈,但是比较幸运还是把这个壳给搞了. ...
- 手动脱NsPacK壳实战
作者:Fly2015 这里脱壳的程序是吾爱破解培训的作业2,相较于作业1略微要强一点,可是仅仅要掌握了脱壳的ESP定律,脱这个Nspack壳并不难.只是还是蛮有意思的. 1.使用查壳软件对加壳的程序进 ...
- <逆向学习第三天>手动脱FSG壳,修复IAT。
其实对于简单的壳来说,脱壳常用的方法也无非是那几种,但是每种有每种的好处,具体使用那种方法视情况而定,我今天学习的这个壳很简单,但是重点在于修复IAT. 一.查壳: FSG 2.0的壳. 二.脱壳: ...
- <逆向学习第二天>如何手动脱UPX、Aspack壳
UPS.AsPack压缩壳介绍: UPX .AsPack是一款先进的可执行程序文件压缩器.压缩过的可执行文件体积缩小50%-70% ,这样减少了磁盘占用空间.网络上传下载的时间和其它分布以及存储费用. ...
随机推荐
- MySQL注入与informantion_schema库
目录 只可读 自动开启 和MySQL注入有关的3个表 手动注入的使用案例 表介绍 查询一个表中全部字段的过程 MySQL V5.0安装完成会默认会生成一个库(informantion_schema), ...
- Docker安装Openvas
目录 安装 在本机内运行 在局域网内运行 关闭 参考 安装 ➜ ~ docker search openvas NAME DESCRIPTION STARS OFFICIAL AUTOMATED mi ...
- mysql索引设计的注意事项(大量示例,收藏再看)
mysql索引设计的注意事项(大量示例,收藏再看) 目录 一.索引的重要性 二.执行计划上的重要关注点 (1).全表扫描,检索行数 (2).key,using index(覆盖索引) (3).通过ke ...
- AOP面试造火箭始末
本文已整理致我的github地址,欢迎大家 star 支持一下 这是一个困扰我司由来已久的难题,Dubbo 了解过吧,对外提供的服务可能有多个方法,一般我们为了不给调用方埋坑,会在每个方法里把所有异常 ...
- PAT-1018(Public Bike Management)最短路+额外条件+所有最短路中找出满足条件的路径+dijkstra算法
Public Bike Management PAT-1018 使用一个vector来存储所有最短路的前驱结点,再通过使用dfs和一个额外的vector记录每一条路径 #include<iost ...
- POJ-2406(KMP+字符串压缩)
Power String POJ-2406 字符串压缩模板题,但是是求有多少个这样最短的子串可以组成s. #include<iostream> #include<cstring> ...
- 树莓派4b通过外接ssd硬盘启动系统失败的排查和解决
树莓派4b通过外接ssd硬盘启动系统失败,症状: 屏幕卡在黑屏或提示 mmc1:Controller never released inhibit bit(s).... 先说如何设置硬盘启动,后面是解 ...
- linux 设置系统时间
第一种: 服务器date时间不准: root@mdy-zabbix2:~# date Fri Sep 28 09:58:56 UTC 2018 实际是下午6点 第一步:执行tzselect 第二步: ...
- 树莓派 3/4 安装 FreeBSD
已盼春来归 已盼春来归 今日去 愿为春来归 盼归春天来了 FreeBSD 的春天在哪里? 树莓派是什么,相信凡是关注了我们的人都不会不知道,但是介于非专业人员需要在此做简要介绍.我们的安卓手机,大部分 ...
- webpack核心模块tapable用法解析
前不久写了一篇webpack基本原理和AST用法的文章,本来想接着写webpack plugin的原理的,但是发现webpack plugin高度依赖tapable这个库,不清楚tapable而直接去 ...