首页
社区
课程
招聘
[原创]关于一般加壳软件的手工脱壳
发表于: 2006-4-24 18:45 3581

[原创]关于一般加壳软件的手工脱壳

2006-4-24 18:45
3581
关于一般加壳软件的手工脱壳

一般我们常见的壳有ASPACK、UPX、还有一种就是:ASProtect,相对来说,最后这种壳比较难
脱些,当然我们可以选择一些简单的来学习脱壳技术,一般初学者不要对一些复杂的壳进行
脱壳,这些壳中加入了INT中断调用技术,使得这些壳,脱起来比较费事,具我所知,一般
壳无非就是PUSHD压入,POPAD输出,这些壳的制作,都相对比较简单,然而对于其它壳的脱
法,你可以慢慢的学习,但是对于今天要学习的这些内容都是入门级的,知道了简单的,再学难的,这样会好一点,好了,再不多说了,今天就看看如何脱这三种壳:

脱壳的步骤一般是:找入口点,第二步DUMP出程序,第三步修复PE文件。

首先:我们来学习如何脱 ASPACK 这种壳,我发现,现在许多程序都用这种壳,就拿它来入
手,我使用的调试工具一般是:Ollydbg ,由于自身电脑的许多问题,所以只能使用它了,
不过也不比TRw2000和Softice等软件差。最后再加上一些PE工具,PE工具就需要认真选择了
Peditor 一般可以使用,但是我推鉴的PE软件还是:Import Reconstructor
这个PE工具,修复ITA表,可以说是完美,所以还是用它好。

破解对象:加了 ASPACK 壳的<<冰雪批量文件分割机>>

使用工具:Ollydbg and Import Reconstructor

首先使用Ollydbg载入mulfilesplit.exe 这个文件后,程序会出现一个提示对话框,
关了就可以了,第二个对话框,选择否,否则程序解压后不是正常代码,就算是解
压了,也没有什么用处。载入程序后,停到了如下代码处:

00563001 > 60               PUSHAD
00563002   E8 03000000      CALL mulfiles.0056300A
00563007  -E9 EB045D45      JMP 45B334F7
0056300C   55               PUSH EBP

上面这个语句一看就很明白,使用PUSHAD 压入程序,这种程序破解相对比较简单,刚才
说过,一般载入程序后,停在了这个地方,现在就需要找POPAD 这个语句,因为这儿就是
解压出程序的入口点,所以这个也很重要,必须找到,经过一段时间的跟踪,找到了如下
代码处:(POPAD)[来到这行,有一个简单的办法是:直接找这个地方,按F4运行到这里]
                最后再单步运行到 005633BA 处!
005633AF   61               POPAD
005633B0   75 08            JNZ SHORT mulfiles.005633BA
005633B2   B8 01000000      MOV EAX,1
005633B7   C2 0C00          RETN 0C
005633BA   68 C4764D00      PUSH mulfiles.004D76C4

那么开头说的入口点,在那呢?

看到 005633BA 的代码处了,最后的这部分字符是:004D76C4这个就是入口点
按F8单步跟踪,来到005633BA,这时就可以Dump出程序了,这时要用到Ollydbg
中的插件:OllyDump.dll,当然你也可以使用其它PE Dump出的程序,如LoadPE等!
好了,现在就Dump出程序,记住:必须运行到 005633BA 处。
这时程序Dump出程序后,被我们保存为:Dump.exe 运行试试看,会弹出一个对话框:
当然这时的程序无法正确运行,因为PE头被程序自身破坏了,所以还需要最后的一步
就是修复PE文件,下面就开始修复PE文件,对了,还忘了说了,不能关闭刚才的Ollydbg
(关了也不要紧,你可以运行正确的程序。)
运行 Import Reconstructor 在进程中选择 mulfilesplit.exe
在OEP处填入口点〔000D76C4〕,为什么不是004D76C4,因为入口点的计算方法是这样的:

]入口点 = 入口点 - 400000] 格式是这样的,所以输入也就是:004D76C4

输入完成后,点击ITA自动搜索,再点击获取输入信息,在上面显示的全部都是有效的,
最后,点击修理抓取文件,选择刚才生成的Dump.exe,这时会在程序目录下生成一个
Dump_.exe试试这个程序就可以运行了,我们再使用PEID 看看原来程序是使用了:
Borland Delphi 编写的程序,这个程序就可以成功运行了,好了这个壳就脱完了。

下面我们再来看看如何脱 UPX 壳:

破解目标是风飘雪动画教程中的一个Crackme文件,这个文件是使用了UPX的壳。
UPX这类壳与Aspack是一个道理,所以脱起壳来,也相单简单,
使用Ollydbg 载入程序后,运行程序点击“否”,程序停在如下地址处:

00438B40 > 60               PUSHAD
00438B41   BE 00C04200      MOV ESI,Key-Crac.0042C000
00438B46   8DBE 0050FDFF    LEA EDI,DWORD PTR DS:[ESI+FFFD5000]

直接找POPAD

00438C8E   61               POPAD   \\按F4直接运行到这里
00438C8F  -E9 6C83FCFF      JMP Key-Crac.00401000  \\再按F8单步一下

找到入口点:00401000 ,这时使用 Ollydbg 的插件DUMP出程序,
先不要关闭Ollydbg,直接运行Import Reconstructor
在OEP处填入:00001000 点击ITA自动搜索,再点击获取输入信息,
这时修理刚才Dump出的程序,你再运行程序看看,是不是可以正常运行了.
这个壳也就脱完了,是不是与ASPACK一模一样。

最后,我再来说说如何脱 ASProtect 这个壳,这个壳太变态,不过也需要我们
来学习如何脱这一类型的壳:

破解对象:一个密码软件加了ASProtect这个壳。

接触这个壳时,我们先来了解一个知识点,专业述语说是:“跑飞”
使用 Ollydbg 载入这个程序后,直接运行,你会发现会产生许多的异长,
按 Shift + F9 跳过,我按了27下Shift + F9后,程序就正常运行了,看来
解压程序的Popad 在26下处,这一点一定要记住,我们再重新运行一遍程序,
按Shift + F9 键26下后,程序停在了如下代码处:

00D605CC   3100             XOR DWORD PTR DS:[EAX],EAX
00D605CE   64:8F05 00000000 POP DWORD PTR FS:[0]
00D605D5   58               POP EAX

这时我们向下找第一个RETN,在这个RETN处下一个断点,按F2就可以了。

那么这个程序的入口点,怎么找呢?当然是使用软件PEID了,这个程序,可以很方便的
找到程序的入口点,入口点为:0046ED84,这时打开Ollydbg 的 Cmd 窗口,
输入: BP 0046ED84 按回车后,BP 命令是下断点的命令,这时我们我们直接按Shift+F9
第一次中断在如下代码处:

00D60609   C3               RETN

再按一下F9后,程序中断在如下:

0046ED84   55               PUSH EBP
0046ED85   8BEC             MOV EBP,ESP
0046ED87   83C4 F4          ADD ESP,-0C
0046ED8A   B8 9CEB4600      MOV EAX,AnyPass.0046EB9C

程序中断在 0046ED84 处,这时我们直接Dump出程序,保存为Dump.exe

关于这个程序的修复还是用Import Reconstructor
不过需要一个插件:ASProtect 1.2x Emul.dll

好了,有了这些我们就运行Import Reconstructor,选择进程:AnyPass.exe

在OEP处填入刚才使用PEID工具找到的那个入口点,0006ED84,格式还是这样。
点击ITA自动搜索,再点击获取输入信息,这时我们发现主界面列表中还有没有
被修复的,点击右边的“显示无效的”在选定的选项中点击右键选择:
追踪层次1(分解),后再点击显示无效的,再点击右键选择:
使用插件追踪 ASProtect 1.2x Emul.dll,这时这些列表中,全部都显示为“是”
选择刚才Dump出的程序Dump.exe进行修复,这时PE头就修复好了,我们看看程序是用什么编
程语言编写的原来又是:Borland Delphi 编写的,运行Dump_.exe看看,
原来程序可以正常运行了!

今天的手工脱壳就告一段落了,你会了吗?

2006-1-23

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//