首页
社区
课程
招聘
[转帖]ExeStealth 常用脱壳方法 ExeStealth V2.72主程序
发表于: 2005-10-30 17:41 4571

[转帖]ExeStealth 常用脱壳方法 ExeStealth V2.72主程序

2005-10-30 17:41
4571
【软件简介】:EXE Stealth 是一个功能非常强大的EXE可执行文件加密工具,程序支持CRC保护,API重定向,删除EXE文件头信息等功能,还可以为你的EXE可执行文件增加防止SmartCheck,Softice,IDag等跟踪调试工具跟踪破解的功能!  

【作者声明】:初学Crack,只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!

【调试环境】:WinXP、Ollydbg1.09、PEiD、LordPE、ImportREC

―――――――――――――――――――――――――――――――――  
【脱壳过程】:
     
      

偶只是说 ExeStealth“常用”脱壳方法,没有说通用,呵呵,其实偶用这种方法脱掉了所有偶所碰到的ExeStealth加壳程序。下面举了三个例子:1个单纯ExeStealth V2.72加壳、1个伪装的ExeStealth壳、1个ExeStealth V2.72 + ASPack 2.12加壳程序。有兴趣的兄弟再自己验证吧。 第4个例子直捣黄龙:脱了ExeStealth V2.72的ExeStealth2.exe主程序。

设置Ollydbg忽略所有的异常选项。用Ollydbg手动脱壳,老规矩:用IsDebug 1.4插件去掉Ollydbg的调试器标志。载入后弹出“是压缩代码――要继续进行分析吗?”,点“否”。
―――――――――――――――――――――――――――――――――
一、例子    试炼品:用ExeStealth V2.72加壳的Win98的Notepad

加壳选项:CRC protect、API Redirection、Erase Import Information、Anti Prozess Dumping、Anti-SmartCheck、Anti-SoftIce、Anti-Idag

0040D060     EB 00                jmp short Notepad.0040D062 //进入OD后停在这!
0040D062     EB 2F                jmp short Notepad.0040D093

下断:BP CloseHandle

77E57963     64:A1 18000000       mov eax,dword ptr fs:[18] //断在这!取消断点 Ctrl+F9执行到返回
77E57969     8B48 30              mov ecx,dword ptr ds:[eax+30]
77E5796C     8B4424 04            mov eax,dword ptr ss:[esp+4]
77E57970     83F8 F4              cmp eax,-0C
77E57973     0F84 4CB4FFFF        je kernel32.77E52DC5
77E57979     83F8 F5              cmp eax,-0B
77E5797C     0F84 38B4FFFF        je kernel32.77E52DBA
77E57982     83F8 F6              cmp eax,-0A
77E57985     0F84 0F500200        je kernel32.77E7C99A
77E5798B     8BC8                 mov ecx,eax
77E5798D     81E1 03000010        and ecx,10000003
77E57993     83F9 03              cmp ecx,3
77E57996     50                   push eax
77E57997     0F84 26870000        je kernel32.77E600C3
77E5799D     FF15 3C10E477        call dword ptr ds:[<&ntdll.NtClose>]
77E579A3     85C0                 test eax,eax
77E579A5     0F8C 02B4FFFF        jl kernel32.77E52DAD
77E579AB     33C0                 xor eax,eax
77E579AD     40                   inc eax
77E579AE     C2 0400              retn 4  //返回到 0040D3B0

0040D3B0     58                   pop eax
0040D3B1     8B85 B62F4000        mov eax,dword ptr ss:[ebp+402FB6]
0040D3B7     BB 01000000          mov ebx,1
0040D3BC     E8 08000000          call Notepad.0040D3C9
0040D3C1     8D85 F52B4000        lea eax,dword ptr ss:[ebp+402BF5]
0040D3C7     50                   push eax
0040D3C8     C3                   retn   //返回到 0040D49F

0040D49F     8B9D B62F4000        mov ebx,dword ptr ss:[ebp+402FB6]   ; Notepad.00400000
0040D4A5     039D BA2F4000        add ebx,dword ptr ss:[ebp+402FBA]
                                  //EBX=00400000 + 000010CC=004010CC  这就是OEP值   
0040D4AB     C1CB 07              ror ebx,7

OK,在4010CC内存处下 内存访问断点,F9运行,断在OEP处!

004010CC     55                   push ebp  //在这儿用OllyDump插件直接DUMP
004010CD     8BEC                 mov ebp,esp
004010CF     83EC 44              sub esp,44
004010D2     56                   push esi
004010D3     FF15 E4634000        call dword ptr ds:[4063E4]
004010D9     8BF0                 mov esi,eax
004010DB     8A00                 mov al,byte ptr ds:[eax]
004010DD     3C 22                cmp al,22
004010DF     75 1B                jnz short 004010FC

――――――――――――――――――――――――

运行ImportREC,选择这个进程。把OEP改为000010CC,点IT AutoSearch,点“Get Import”,用“追踪层次1”全部修复,FixDump,正常运行!  

―――――――――――――――――――――――――――――――――
二、例子    试炼品:linson兄弟的伪装壳LiNSoN's Unpack Me 0.1

下载:http://tongtian.net/pediybbs/download.php?id=386

用PEID或FI侦测会报出是Microsoft Visual C++ 6.0,呵呵,上了linson的当啦  这就是linson伪装代码的效果,相信这个方法会被一些新壳所采用以蒙蔽侦壳工具的!

00405060     55                   push ebp //进入OD后停在这!这段代码是linson伪装的VC的入口方式
00405061     8BEC                 mov ebp,esp
00405063     6A FF                push -1
00405065     68 45230100          push 12345
0040506A     68 90780600          push 67890
0040506F     64:A1 00000000       mov eax,dword ptr fs:[0]
00405075     50                   push eax
00405076     64:8925 00000000     mov dword ptr fs:[0],esp
0040507D     83EC 44              sub esp,44
00405080     53                   push ebx
00405081     56                   push esi
00405082     57                   push edi
00405083     73 15                jnb short LZSunpac.0040509A
00405085     72 13                jb short LZSunpac.0040509A

0040509A     5F                   pop edi
0040509B     5E                   pop esi
0040509C     5B                   pop ebx
0040509D     83C4 44              add esp,44
004050A0     64:8B25 00000000     mov esp,dword ptr fs:[0]
004050A7     83C4 0C              add esp,0C
004050AA     8BE5                 mov esp,ebp
004050AC     5D                   pop ebp
004050AD     2BC0                 sub eax,eax
004050AF     60                   pushad
004050B0     E8 00000000          call LZSunpac.004050B5
004050B5     5D                   pop ebp
004050B6     81ED 421E4000        sub ebp,LZSunpac.00401E42
004050BC     B9 7B090000          mov ecx,97B
004050C1     8DBD 8A1E4000        lea edi,dword ptr ss:[ebp+401E8A]
004050C7     8BF7                 mov esi,edi
004050C9     AC                   lods byte ptr ds:[esi]
004050CA     F9                   stc
004050CB     90                   nop
004050CC     C0C0 C5              rol al,0C5
004050CF     02C1                 add al,cl
004050D1     EB 01                jmp short LZSunpac.004050D4
004050D4     FEC8                 dec al
004050D6     34 F3                xor al,0F3
004050D8     EB 01                jmp short LZSunpac.004050DB  //这里应是ExeStealth壳的入口

004050DB     EB 01                jmp short LZSunpac.004050DE

004050DE     2AC1                 sub al,cl
004050E0     2C 99                sub al,99
004050E2     2AC1                 sub al,cl
004050E4     C0C0 01              rol al,1
004050E7     2C 98                sub al,98
004050E9     04 E2                add al,0E2
004050EB     04 19                add al,19
004050ED     C0C8 16              ror al,16
004050F0     EB 01                jmp short LZSunpac.004050F3

――――――――――――――――――――――――
障眼法对于手动脱壳是没有太大影响的。直接下断:BP CloseHandle

77E57963     64:A1 18000000       mov eax,dword ptr fs:[18] //断在这!取消断点 Ctrl+F9执行到返回
  …… ……  省 略  …… ……
77E579AE     C2 0400              retn 4  //返回到 00405383

00405383     58                   pop eax
00405384     8B85 B3254000        mov eax,dword ptr ss:[ebp+4025B3]
0040538A     BB 01000000          mov ebx,1
0040538F     E8 08000000          call LZSunpac.0040539C
00405394     8D85 F2214000        lea eax,dword ptr ss:[ebp+4021F2]
0040539A     50                   push eax
0040539B     C3                   retn   //返回到 00405465

00405465     8B9D B3254000        mov ebx,dword ptr ss:[ebp+4025B3] ; LZSunpac.00400000
0040546B     039D B7254000        add ebx,dword ptr ss:[ebp+4025B7]
                                  //EBX=00400000 + 00001000=00401000  这就是OEP值   
00405471     C1CB 07              ror ebx,7

OK,在401000内存处下 内存访问断点,F9运行,几秒后断在OEP处!

00401000     6A 00                push 0  //在这儿用OllyDump插件直接DUMP
00401002     68 00304000          push 403000
00401007     68 05304000          push 403005
0040100C     6A 00                push 0
0040100E     E8 07000000          call 0040101A
00401013     6A 00                push 0
00401015     E8 06000000          call 00401020
0040101A     FF25 08204000        jmp dword ptr ds:[402008]
00401020     FF25 00204000        jmp dword ptr ds:[402000]

――――――――――――――――――――――――

运行ImportREC,选择这个进程。把OEP改为00001000,点IT AutoSearch,点“Get Import”,用“追踪层次1”全部修复,FixDump。

运行修复后的程序出错!用LordPE删除XJ和newIID区段,然后重建PE,正常运行!7.15->4.61K  

―――――――――――――――――――――――――――――――――
三、例子    试炼品:大嘴日语 V1.0

下载页面:  http://www.skycn.com/soft/12090.html   
软件大小:  6628 KB
软件语言:  简体中文
软件类别:  国产软件 / 共享版 / 外语学习
应用平台:  Win9x/NT/2000/XP
加入时间:  2003-05-13 16:32:19
下载次数:  2696
推荐等级:  ***   
开 发 商:  http://bmenglish.3322.net/

【软件简介】:大嘴日语集日语的听、说、读、写、背功能于一身,解决了困扰国人的学习日语难的问题。是一款集日语口语、日语背单词综合教育软件。大嘴日语精选了常用日语、基础日语、实用日语、日语情景会话等四大类共1300多句常用日语对话和情景对话内容以及大学日语第一册、大学日语第二册、大学日语第三册、大学日语第四册、大学日语补充词汇、标准日语初级上册、标准日语初级下册、标准日语中级上册、标准日语中级下册、标准日语补充词汇等8700多个单词的全部内容并以可爱的卡通人物,运用先进的日语语音朗读技术,同时大嘴日语的日语五十音采用真人发音,以语音复读方式学习五十音,纠正发音,使发音更准确。富于娱乐性;使您在使用电脑进行工作、学习或娱乐的同时,就能不知不觉、轻轻松松地掌握各类日常日语会话及常用日语单词。该方式既摆脱了枯燥的传统学习方法,又充分利用了在电脑前的各种冗余和等待时间,有效地提高了学习效率,在不知不觉中轻轻松松、迅速提高日语的听力、口语水平及日语单词数量。
――――――――――――――――――――――――
这是偶以前下载的,现在肯定不是 V1.0版啦,不知加壳方式变了没有。

BmJapanese.exe 用PEID看是EXEStealth 2.7壳,其实是 EXEStealth 2.7 + ASPack 2.12 双层壳。

00718060     EB 00                jmp short BmJapane.00718062//进入OD后停在这!
00718062     60                   pushad
00718063     EB 00                jmp short BmJapane.00718065

下断:BP CloseHandle

77E57963     64:A1 18000000       mov eax,dword ptr fs:[18] //断在这!取消断点 Ctrl+F9执行到返回
  …… ……  省 略  …… ……
77E579AE     C2 0400              retn 4  //返回到 0071836C

0071836C     58                   pop eax
0071836D     8B85 852E4000        mov eax,dword ptr ss:[ebp+402E85]
00718373     BB 01000000          mov ebx,1
00718378     E8 08000000          call BmJapane.00718385
0071837D     8D85 C42A4000        lea eax,dword ptr ss:[ebp+402AC4]
00718383     50                   push eax
00718384     C3                   retn  //返回到 0071845B

0071845B     8B9D 852E4000        mov ebx,dword ptr ss:[ebp+402E85]; BmJapane.00400000
00718461     039D 892E4000        add ebx,dword ptr ss:[ebp+402E89]
                                  //EBX=00400000 + 00315001=00715001  这就是第2层壳的入口
00718467     C1CB 07              ror ebx,7

OK,在00715001内存处下 内存访问断点,F9运行,断在00715001处!

00715001     60                   pushad //断在第2层ASPack壳的入口处  
00715002     E8 03000000          call 0071500A

偶们再来脱掉第2层ASPack马甲  下断:BP GetModuleHandleA

77E59F93     837C24 04 00         cmp dword ptr ss:[esp+4],0 //断在这!取消断点 Ctrl+F9执行到返回
77E59F98     0F84 23060000        je kernel32.77E5A5C1
77E59F9E     FF7424 04            push dword ptr ss:[esp+4]
77E59FA2     E8 55080000          call kernel32.77E5A7FC
77E59FA7     85C0                 test eax,eax
77E59FA9     74 08                je short kernel32.77E59FB3
77E59FAB     FF70 04              push dword ptr ds:[eax+4]
77E59FAE     E8 B0060000          call kernel32.GetModuleHandleW
77E59FB3     C2 0400              retn 4  //返回到 0071529B

00715295     FF95 4D0F0000        call dword ptr ss:[ebp+F4D]
0071529B     85C0                 test eax,eax  //向下找POPAD
0071529D     75 07                jnz short 007152A6

Ctrl+F在当前位置下查找命令:POPAD

0071539A     B8 18D91900          mov eax,19D918
0071539F     50                   push eax  //此处下断,F9运行断在这!
007153A0     0385 22040000        add eax,dword ptr ss:[ebp+422]
                                  //EAX=0019D918 + 00400000=0059D918  这就是OEP值   
007153A6     59                   pop ecx
007153A7     0BC9                 or ecx,ecx
007153A9     8985 A8030000        mov dword ptr ss:[ebp+3A8],eax
007153AF     61                   popad  //找到这里!
007153B0     75 08                jnz short 007153BA

007153BA     68 18D95900          push 59D918
007153BF     C3                   retn   //飞向光明之巅! 返回0059D918

――――――――――――――――――――――――

0059D918     55                   push ebp//在这儿用LordPE纠正ImageSize后完全DUMP这个进程
0059D919     8BEC                 mov ebp,esp
0059D91B     83C4 F0              add esp,-10
0059D91E     53                   push ebx
0059D91F     B8 68D55900          mov eax,59D568
0059D924     E8 1394E6FF          call 00406D3C
0059D929     8B1D A83F5A00        mov ebx,dword ptr ds:[5A3FA8]
0059D92F     8B0B                 mov ecx,dword ptr ds:[ebx]
0059D931     B2 01                mov dl,1
0059D933     A1 90945400          mov eax,dword ptr ds:[549490]
0059D938     E8 8FB8EDFF          call 004791CC

――――――――――――――――――――――――

运行ImportREC,选择这个进程。把OEP改为0019D918,点IT AutoSearch,点“Get Import”,用“追踪层次1”全部修复,FixDump,正常运行!  Delphi 编写。

――――――――――――――――――――――――
四、ExeStealth V2.72主程序ExeStealth2.exe脱壳

虽然ExeStealth2.exe用PEID看是EXEStealth 2.72-2.73 -> WebToolMaster,但是正如 飞速 兄所言:ExeStealth2.exe是ASProtect加壳的,或者说是ASProtect的Hanspeter Imp修改版。

用IsDebug 1.4插件去掉Ollydbg的调试器标志。设置Ollydbg忽略除了“内存访问异常”之外的所有异常选项。

00418060     EB 00                jmp short ExeSteal.00418062//进入OD后停在这!
00418062     EB 2F                jmp short ExeSteal.00418093

用ASProtect的脱壳方法。F9运行,程序中断在异常处,Shift+F9通过20次异常,在RET处下断!

00418766     CD 68                int 68                    //第1次异常
004187F2     0000                 add byte ptr ds:[eax],al  //第2次异常
00A744C8     3100                 xor dword ptr ds:[eax],eax//第3次异常
00A73DD5     3100                 xor dword ptr ds:[eax],eax//第4次异常
00A73E1D     3100                 xor dword ptr ds:[eax],eax//第5次异常
00A741F2     3100                 xor dword ptr ds:[eax],eax//第6次异常
00A7212E     CD 01                int 1                     //第7次异常
00A72A9A     3100                 xor dword ptr ds:[eax],eax//第8次异常
00A72B71     3100                 xor dword ptr ds:[eax],eax//第9次异常
00A7309F     3100                 xor dword ptr ds:[eax],eax//第10次异常
00A731B3     3100                 xor dword ptr ds:[eax],eax//第11次异常
00A736BE     3100                 xor dword ptr ds:[eax],eax//第12次异常
00A738B6     3100                 xor dword ptr ds:[eax],eax//第13次异常
00A74603     3100                 xor dword ptr ds:[eax],eax//第14次异常
00A74677     3100                 xor dword ptr ds:[eax],eax//第15次异常
00A749CB     3100                 xor dword ptr ds:[eax],eax//第16次异常
00A74C0D     3100                 xor dword ptr ds:[eax],eax//第17次异常
00A74D3F     3100                 xor dword ptr ds:[eax],eax//第18次异常
        弹出30天试用的警告,确定后返回
00A74F48     3100                 xor dword ptr ds:[eax],eax//第19次异常

00A73D03     3100                 xor dword ptr ds:[eax],eax//第20次异常  停!
00A73D03     3100                 xor dword ptr ds:[eax],eax
00A73D05     64:8F05 00000000     pop dword ptr fs:[0]
00A73D0C     58                   pop eax
00A73D0D     833D BC7EA700 00     cmp dword ptr ds:[A77EBC],0
00A73D14     74 14                je short 00A73D2A
00A73D16     6A 0C                push 0C
00A73D18     B9 BC7EA700          mov ecx,0A77EBC
00A73D1D     8D45 F8              lea eax,dword ptr ss:[ebp-8]
00A73D20     BA 04000000          mov edx,4
00A73D25     E8 E6D2FFFF          call 00A71010
00A73D2A     FF75 FC              push dword ptr ss:[ebp-4]
00A73D2D     FF75 F8              push dword ptr ss:[ebp-8]
00A73D30     8B45 F4              mov eax,dword ptr ss:[ebp-C]
00A73D33     8338 00              cmp dword ptr ds:[eax],0
00A73D36     74 02                je short 00A73D3A
00A73D38     FF30                 push dword ptr ds:[eax]
00A73D3A     FF75 F0              push dword ptr ss:[ebp-10]
00A73D3D     FF75 EC              push dword ptr ss:[ebp-14]
00A73D40     C3                   retn//此处下断!Shift+F9断下,返回 00A841F0

00A841F0     68 7891283F          push 3F289178
00A841F5     8AF3                 mov dh,bl
00A841F7     5A                   pop edx
00A841F8     E8 05000000          call 00A84202

00A84202     66:8BF9              mov di,cx
00A84205     5B                   pop ebx
00A84206     68 5447F463          push 63F44754
00A8420B     66:BA C084           mov dx,84C0
00A8420F     5A                   pop edx
00A84210     81C3 48150000        add ebx,1548
00A84216     56                   push esi
00A84217     66:B9 31AB           mov cx,0AB31
00A8421B     5F                   pop edi
00A8421C     BE 28050000          mov esi,528
00A84221     66:8BCA              mov cx,dx
00A84224     FF33                 push dword ptr ds:[ebx]
00A84226     0FB7CB               movzx ecx,bx
00A84229     58                   pop eax
00A8422A     BA B4FFED44          mov edx,44EDFFB4
00A8422F     81C0 63DA2D7C        add eax,7C2DDA63
00A84235     66:81E7 D924         and di,24D9
00A8423A     81C0 6056A263        add eax,63A25660
00A84240     66:81E1 AA66         and cx,66AA
00A84245     81C0 1937B010        add eax,10B03719
00A8424B     8BCA                 mov ecx,edx
00A8424D     50                   push eax
00A8424E     80CE 49              or dh,49
00A84251     8F03                 pop dword ptr ds:[ebx]
00A84253     81EB 8B78BA3A        sub ebx,3ABA788B
00A84259     66:81D9 1468         sbb cx,6814
00A8425E     81C3 8778BA3A        add ebx,3ABA7887
00A84264     80F2 B9              xor dl,0B9
00A84267     81EE 01000000        sub esi,1
00A8426D     0F85 1A000000        jnz 00A8428D
00A84273     0F82 03000000        jb 00A8427C
00A84279     66:8BCB              mov cx,bx
00A8427C     E9 28000000          jmp 00A842A9//此处下断,F9断下,跳出循环

00A8428D     BA 74800474          mov edx,74048074
00A84292     E9 8DFFFFFF          jmp 00A84224//循环,发现在00A8427C处可跳过

00A842A9     5B                   pop ebx
00A842AA     58                   pop eax
00A842AB     05 06FAF05B          add eax,5BF0FA06
00A842B0     5C                   pop esp
00A842B1     EB 3F                jmp short 00A842F2

00A842F2     03C3                 add eax,ebx
                                  //EAX=00003607 + 00400000=00403607 这就是OEP值   
00A842F4     BB 00000000          mov ebx,0
00A842F9     0BDB                 or ebx,ebx
00A842FB     75 02                jnz short 00A842FF
00A842FD     50                   push eax
00A842FE     C3                   retn   //飞向光明之巅! 返回 00403607

――――――――――――――――――――――――

00403607     6A 00                push 0//在这儿用OllyDump插件直接DUMP
00403609     E8 E2040000          call 00403AF0
0040360E     A3 02184000          mov dword ptr ds:[401802],eax
00403613     6A 00                push 0
00403615     68 2B364000          push 40362B
0040361A     6A 00                push 0
0040361C     6A 64                push 64
0040361E     50                   push eax
0040361F     E8 08050000          call 00403B2C

―――――――――――――――――――――――

重新运行,运行ImportREC,选择这个进程。把OEP改为000010CC,点IT AutoSearch,点“Get Import”,用“追踪层次1”和“ASProtect 1.3 calculated imports”插件全部修复无效函数。 FixDump,正常运行!82.4K->88.1K

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 47147
活跃值: (20380)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
转帖请保持原文的完整性,不要去头截尾!
完整原文可参考论坛精华6.

附原文章开始一段:


标 题:ExeStealth 常用脱壳方法 + ExeStealth V2.72主程序脱壳
发信人:fly
时 间:2003年12月02日 04:45
详细信息:


ExeStealth 常用脱壳方法 + ExeStealth V2.72主程序脱壳

2005-10-30 17:55
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不好意思,我原来需要脱这个壳的时候随便搜索到的
觉得可以用就转到这里来了,
原帖子地址为,http://www.ttt.net.cn/mall/liststory1.php?id=266
老大可以看看是不是我保持了原帖子的完整性,
哈哈,

不知道这里已经有了
请老大看完我的解释了,删除吧,哈哈
2005-11-23 08:52
0
游客
登录 | 注册 方可回帖
返回
//