首页
社区
课程
招聘
[原创]利用ESP定律快速脱壳(PECompact 2.x)教程
发表于: 2005-8-2 11:16 7494

[原创]利用ESP定律快速脱壳(PECompact 2.x)教程

2005-8-2 11:16
7494
利用ESP定律快速脱壳(PECompact 2.x)教程

【破文作者】云枫
【作者邮箱】jfsc2004@163.com
【个人主页】jfsc2004.ys168.com
【使用工具】od lordPE importREC
【操作系统】Windows XP
【下载地址】http://www.skycn.com/soft/15760.html
--------------------------------------------------------------------------------
【破解声明】初次写脱文,大家多多关照!
【软件名称】MP3压缩大师 V4.0
【保护方式】PECompact 2.x -> Jeremy Collake
--------------------------------------------------------------------------------

【脱壳过程】
     第一次写脱文,请大家多多关照。本文只限于脱壳,不涉及破解。当然还希望能够得到作者的谅解。

先载入主程序
来到
00404BB8   B8 B0905F00         mov eax,MP3Exper.005F90B0
00404BBD     50                  push eax
00404BBE     64:FF35 00000000    push dword ptr fs:[0]
00404BC5     64:8925 00000000    mov dword ptr fs:[0],esp ---------------->看这个
00404BCC     33C0                xor eax,eax
00404BCE     8908                mov dword ptr ds:[eax],ecx
00404BD0     50                  push eax
00404BD1     45                  inc ebp
00404BD2     43                  inc ebx
一。运用esp定律
1.f8单步运行到00404BC5
看右边窗口的esp值,我这里是0012ffbc
2.好下命令 d 0012ffbc
我们发现下方的转存窗口有所变化出现:
0012FFBC  E0 FF 12 00 B0 90 5F 00  ?.?_.
0012FFC4  4F 6D 81 7C 38 07 93 7C  Om?8?
在0012FFBC的4个字节下下硬件写入->DWord 断点(也就是在E0 FF 12 00上下)
f9运行程序
二.找oep
运行后断在
005F90E4     51                  push ecx
005F90E5     57                  push edi
005F90E6     56                  push esi
005F90E7     52                  push edx
观察一下,不是oep阿,奇怪(这里不懂,望高手指点)
向下翻
005F915D     8985 D0120010       mov dword ptr ss:[ebp+100012D0],eax
005F9163     8BF0                mov esi,eax
005F9165     59                  pop ecx
005F9166     5A                  pop edx
005F9167     EB 0C               jmp short MP3Exper.005F9175
005F9169     03CA                add ecx,edx
005F916B     68 00800000         push 8000
005F9170     6A 00               push 0
005F9172     57                  push edi
005F9173     FF11                call dword ptr ds:[ecx]
005F9175     8BC6                mov eax,esi
005F9177     5A                  pop edx
005F9178     5E                  pop esi
005F9179     5F                  pop edi
005F917A     59                  pop ecx
005F917B     5B                  pop ebx
005F917C     5D                  pop ebp
005F917D     FFE0                jmp eax--------------->关键代码
005F917F     0000                add byte ptr ds:[eax],al
005F9181     0000                add byte ptr ds:[eax],al

在005F917D     FFE0                jmp eax--------------->关键代码上下断点
f9运行,断下,在f8单步运行一下,到了---oep
00404BB8 M>  68 682A4700         push MP3Exper.00472A68              ; ASCII "VB5!6&vb6chs.dll"
00404BBD     E8 F0FFFFFF         call MP3Exper.00404BB2              ; jmp to MSVBVM60.ThunRTMain
00404BC2     0000                add byte ptr ds:[eax],al
00404BC4     98                  cwde
00404BC5     0000                add byte ptr ds:[eax],al

三.dump and修复
拿出lordPE选择文件,full dump
此时不要关闭od,拿出importREC,选取进程,oep填 00404bb8-400000= 4bb8填4bb8
点自动搜索ita,再点获取输入表,发现函数都有效,最后点修复抓取文件,save.....
脱壳到此结束,谢谢大家看完。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 320
活跃值: (104)
能力值: (RANK:180 )
在线值:
发帖
回帖
粉丝
2
不知怎么搞的

我觉得PCE2.x 比 PCE1.X 还好脱

pce 1.x Dump 下来 修复输入表有点麻烦

不知道我脱的是特别处理的还是怎么样

--->PEid 插件

外壳 Morphine 1.4 - 2.7

里面还有一层 PECompact 1.68 - 1.84
2005-8-3 21:35
0
雪    币: 1264
活跃值: (612)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
最快的方法:he eip
f9 shift+9几下看到JMP EAX 在一次SHIFT+9到OEP
搞定
2005-8-4 00:26
0
雪    币: 288
活跃值: (415)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
4
005F90E4     51                  push ecx
005F90E5     57                  push edi
005F90E6     56                  push esi
005F90E7     52                  push edx
......
这些一路的PUSH把通用寄存器的数值入栈就相当于pushad了
005F9177     5A                  pop edx
005F9178     5E                  pop esi
005F9179     5F                  pop edi
005F917A     59                  pop ecx
005F917B     5B                  pop ebx
005F917C     5D                  pop ebp
这几个就相当于popad了
jmp eax是跳到OEP(程序)
00404BB8   B8 B0905F00         mov eax,MP3Exper.005F90B0
00404BBD     50                  push eax
00404BBE     64:FF35 00000000    push dword ptr fs:[0]
00404BC5     64:8925 00000000    mov dword ptr fs:[0],esp ---------------->看这个
00404BCC     33C0                xor eax,eax
00404BCE     8908                mov dword ptr ds:[eax],ecx
00404BD0     50                  push eax
00404BD1     45                  inc ebp
00404BD2     43                  inc ebx
这几句是SEH,不应该用ESP定律的,经过00404BCE     8908                mov dword ptr ds:[eax],ecx
以后程序会因为出错,跳转到005F90B0上面继续运行,更多的请寻找与SEH有关的帖子

BTW:为什么觉得楼主脱这个pec2好烦索的呢?
2005-8-4 00:45
0
雪    币: 320
活跃值: (104)
能力值: (RANK:180 )
在线值:
发帖
回帖
粉丝
5
F8到 00404BCC xor eax,eax 看堆栈 SHE 句柄
Goto句柄地址 看到下面有一个 retn

在那里新建Eip 设断点 按2次F9 (或F9 shift+F9)取消断点

看到下面的JMP eax 设断点 F9 运行 F8 到OEP

这个直接就可以在OD Dump PEC 1.X版 有点麻烦

DLL 的话 修复重定位表

菜鸟方式: 用LordPE 查看Dump下来的Dll第一个区段尾部的Hex数值 看到 00 10 00 00 的HEX数值 那里就是重定位表的开始

用WinHex 把重定位表开始到结束(dump文件第一??段后面的HEX值)的那些Hex数值 另存为XXX.bin

然后再用PEComAngela修复重定位表

以上参考看雪先闲脱文
2005-8-4 02:14
0
雪    币: 269
活跃值: (51)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
学习收教.
2005-8-4 15:09
0
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
只能看懂一点点
2005-8-4 16:25
0
雪    币: 7
活跃值: (30)
能力值: (RANK:20 )
在线值:
发帖
回帖
粉丝
8
005F917D     FFE0                jmp eax--------------->关键代码

能给解释一下为什么这句就是关键代码呢   

怎么看关键代码啊      我怎么就 不会呢
2005-8-8 16:12
0
雪    币: 7
活跃值: (30)
能力值: (RANK:20 )
在线值:
发帖
回帖
粉丝
9
那前面不也有向这样的东东吗  

如:005F9167     EB 0C               jmp short MP3Exper.005F9175

还有:005F9173     FF11                call dword ptr ds:[ecx]

它们不是关键代码吗
2005-8-8 16:16
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
在0012FFBC的4个字节下下硬件写入->DWord 断点(也就是在E0 FF 12 00上下)
这一步过不了..
2005-8-17 05:16
0
游客
登录 | 注册 方可回帖
返回
//