首页
社区
课程
招聘
ESP定律,一分钟搞定ShellProtect壳
2004-11-11 20:53 10878

ESP定律,一分钟搞定ShellProtect壳

2004-11-11 20:53
10878
【破解作者】 clide2000
【使用工具】 OD,LordPE,ImportREC16
【破解平台】 Win9x/NT/2000/XP
【软件名称】 unpackit.exe
【软件简介】 专门练习脱ShellProtect壳的目标文件
【加壳方式】 ShellProtect
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】

OD载入后停在,设置忽略所有的异常.F8单步执行,当执行到00405002一行处时,观察当前堆栈
00405000 >  90                nop
00405001    60                pushad                 
00405002    68 0E204000       push Unpackit.0040200E  ;执行完这句后,看看堆栈
00405007    E8 23010000       call Unpackit.0040512F
0040500C    FFE0              jmp eax
0040500E    81EC 00010000     sub esp, 100
00405014    8BEC              mov ebp, esp
00405016    EB 01             jmp short Unpackit.00405019
00405018    E8 8B9D2001       call 0160EDA8
0040501D    0000              add byte ptr ds:[eax], al
0040501F    4B                dec ebx
00405020    EB 01             jmp short Unpackit.00405023
00405022    E8 53E83103       call 0372387A
00405027    0000              add byte ptr ds:[eax], al

行到00405002一行处时时堆栈内容如下:
0012FFA4   FFFFFFFF
0012FFA8   77F5166A  RETURN to ntdll.77F5166A from ntdll.77F78C4E
0012FFAC   0012FFF0
0012FFB0   0012FFC4    ;看这里,可以用Esp定律了
0012FFB4   7FFDF000
0012FFB8   7FFE0304
0012FFBC   0012FFB0
0012FFC0   00000000

在命令行下hr 12ffb0硬件断点,F9运行
中断在
0040511F   /EB 01             jmp short Unpackit.00405122  ;中断在此,F8后,来到00405122
00405121   |E8 E97F0300       call 0043D10F
00405126    006A 00           add byte ptr ds:[edx], ch
00405129    FF95 A7000000     call dword ptr ss:[ebp+A7]
0040512F    EB 01             jmp short Unpackit.00405132
00405131    E8 C8000000       call Unpackit.004051FE
00405136    E8 00000000       call Unpackit.0040513B
0040513B    58                pop eax
0040513C    2D 3B214000       sub eax, Unpackit.0040213B
00405141    EB 01             jmp short Unpackit.00405144
00405143    E8 034508C9       call C948964B
00405148    C2 0400           retn 4
***************************************************************************************
从0040511F跳到这里
00405122   /E9 7F030000       jmp Unpackit.004054A6  ;断续按一下F8,跳到004054A6
00405127   |6A 00             push 0
00405129   |FF95 A7000000     call dword ptr ss:[ebp+A7]
0040512F   |EB 01             jmp short Unpackit.00405132
00405131   |E8 C8000000       call Unpackit.004051FE
00405136   |E8 00000000       call Unpackit.0040513B
0040513B   |58                pop eax
0040513C   |2D 3B214000       sub eax, Unpackit.0040213B
00405141   |EB 01             jmp short Unpackit.00405144
00405143   |E8 034508C9       call C948964B
00405148   |C2 0400           retn 4

从00405122又跳到了这
004054A6    68 E0164000       push Unpackit.004016E0     ;将OEP压入堆栈
004054AB    C3                retn                       ;跳到OEP

最终来到OEP处:
004016E0  /.  55              push ebp
004016E1  |.  8BEC            mov ebp, esp
004016E3  |.  6A FF           push -1
004016E5  |.  68 F8244000     push Unpackit.004024F8
004016EA  |.  68 66184000     push <jmp.&MSVCRT._except_handler3>;  SE handler installation
004016EF  |.  64:A1 00000000  mov eax, dword ptr fs:[0]
004016F5  |.  50              push eax
004016F6  |.  64:8925 0000000>mov dword ptr fs:[0], esp
004016FD  |.  83EC 68         sub esp, 68
00401700  |.  53              push ebx
00401701  |.  56              push esi
00401702  |.  57              push edi
00401703  |.  8965 E8         mov dword ptr ss:[ebp-18], esp
00401706  |.  33DB            xor ebx, ebx
00401708  |.  895D FC         mov dword ptr ss:[ebp-4], ebx
0040170B  |.  6A 02           push 2
0040170D  |.  FF15 90214000   call dword ptr ds:[<&MSVCRT.__set_>;  MSVCRT.__set_app_type
00401713  |.  59              pop ecx

此时用LorPE在004016E0此OEP处dump出程序.然后用ImportREC16加载当前这个进程,OEP输入16e0,点"IAT AutoSearch"按钮,会找到全部API调用,最后修复dump出和程序.成功运行
--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
练习文件下载
附件:test.rar 附件:test.rar

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

收藏
点赞7
打赏
分享
最新回复 (16)
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
meila2004 2004-11-11 21:27
2
0
有没有他的加壳程序啊?
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
meila2004 2004-11-11 21:28
3
0
忘了,先说一声~~顶
支持~:D
雪    币: 3007
活跃值: (3552)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
china 5 2004-11-11 21:41
4
0
载入,Ctrl+F查找POPAD,F2设置断点,F9运行,后被拦截,F8几次,到4016E0,脱壳,修复之。
雪    币: 299
活跃值: (300)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
clide2000 7 2004-11-12 10:43
5
0
最初由 meila2004 发布
有没有他的加壳程序啊?


软件就是 海雨天风 兄发的“一个新壳,附主程序和源代码”贴
http://bbs.pediy.com/showthread.php?s=&threadid=6845
雪    币: 299
活跃值: (300)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
clide2000 7 2004-11-12 10:44
6
0
另,忘记说了,OD应该启用一下隐藏插件(因为我一直用自动隐藏的插件,所以忘记说了)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
stephenteh 2004-11-12 10:53
7
0
i just put a breakpoint on code section then f9....it bring me to the oep.....
雪    币: 299
活跃值: (300)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
clide2000 7 2004-11-12 12:44
8
0
最初由 stephenteh 发布
i just put a breakpoint on code section then f9....it bring me to the oep.....

试了一下,果然如此,若用这种方法,该叫做秒杀了.:p
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
看不懂 2004-11-12 12:56
9
0
"OD载入后停在,设置忽略所有的异常.F8单步执行,当执行到00405002一行处时,观察当前堆栈
00405000 >  90                nop
00405001    60                pushad                 
00405002    68 0E204000       push Unpackit.0040200E  ;执行完这句后,看看堆栈"
我的怎么是这个:
0063FE1C   00000000
0063FE20   81867068
0063FE24   0063FF78
0063FE28   0063FE3C    《-这个是ESP最开始的值
0063FE2C   00530000
0063FE30   818670C8
0063FE34   81867088
0063FE38   00405000     UNPACKIT.<ModuleEntryPoint>
0063FE3C   BFF8B86C     返回到 KERNEL32.BFF8B86C 来自 KERNEL32.BFF74399
0063FE40   00000000
0063FE44   81867068
0063FE48   00530000
0063FE4C   61706E55
0063FE50   74696B63
0063FE54   45584500
0063FE58   0063FE00
0063FE5C   0063FE68
0063FE60   00000003
0063FE64   00000006
0063FE68   80000003
0063FE6C   00000000
0063FE70   00000000
0063FE74   BFF76920     KERNEL32.DebugBreak
0063FE78   00000001
0063FE7C   00000000
0063FE80   00000004
雪    币: 299
活跃值: (300)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
clide2000 7 2004-11-12 14:13
10
0
最初由 看不懂 发布
"OD载入后停在,设置忽略所有的异常.F8单步执行,当执行到00405002一行处时,观察当前堆栈
00405000 > 90 nop
00405001 60 pushad
00405002 68 0E204000 push Unpackit.0040200E ;执行完这句后,看看堆栈"
我的怎么是这个:
........


这个应该不是当时的堆栈内容吧
雪    币: 411
活跃值: (1160)
能力值: ( LV9,RANK:810 )
在线值:
发帖
回帖
粉丝
David 20 2004-11-12 15:13
11
0
哪里有这个壳下载。
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
看不懂 2004-11-12 18:29
12
0
最初由 clide2000 发布


这个应该不是当时的堆栈内容吧

下方的的确是当时的内容
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mytech 2004-11-12 23:06
13
0
可以用Esp定律了
雪    币: 212
活跃值: (55)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
海雨天风 1 2004-11-13 09:25
14
0
老兄速度好迅速哦!:p
雪    币: 298
活跃值: (512)
能力值: ( LV12,RANK:490 )
在线值:
发帖
回帖
粉丝
stasi 12 2004-11-13 10:50
15
0
晕 是aspack的翻版?
雪    币: 85496
活跃值: (198820)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
linhanshi 2004-11-13 12:04
16
0
支持!!!
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
看不懂 2004-11-14 13:41
17
0
运行前
运行到00405002后
游客
登录 | 注册 方可回帖
返回