手脱Upack 2.x - 3.x

1.PEID查壳

Upack 2.x - 3.x Heuristic Mode -> Dwing

2.载入OD,一上来就是一个大跳转,先F8跟一会

00401030 >- E9 56D40300     jmp 跑跑排行.0043E48B                 ; //程序入口点
00401035    42              inc edx                           ; 跑跑排行.<ModuleEntryPoint>
00401036    79 44           jns short 跑跑排行.0040107C
00401038    77 69           ja short 跑跑排行.004010A3
0040103A    6E              outs dx,byte ptr es:[edi]
0040103B    67:40           inc eax                           ; kernel32.BaseThreadInitThunk
0040103D    0000            add byte ptr ds:[eax],al

 

 

3.来到这里,我们看到一个push,可以使用ESP定律,下硬件访问断点,然后shift+F9运行一下

0043E49B    F3:AB           rep stos dword ptr es:[edi]
0043E49D    AD              lods dword ptr ds:[esi]
0043E49E    50              push eax                          
0043E49F    97              xchg eax,edi                      ; //ESP定律
0043E4A0    51              push ecx
0043E4A1    58              pop eax                           
0043E4A2    8D5485 5C       lea edx,dword ptr ss:[ebp+eax*4+0>

 

 

4.ESP落脚点,这里就是落脚点了,别忘了清除硬件断点,然后继续F8,记住基本原则,向上跳转的下一行F4

0043E60E   /E3 1B           jecxz short 跑跑排行.0043E62B         ; //ESP落脚点
0043E610   |8A07            mov al,byte ptr ds:[edi]
0043E612   |47              inc edi                           
0043E613   |04 18           add al,0x18
0043E615   |3C 02           cmp al,0x2
0043E617  ^|73 F7           jnb short 跑跑排行.0043E610           ; //向上跳转的下一行F4
0043E619   |8B07            mov eax,dword ptr ds:[edi]
0043E61B   |3C 01           cmp al,0x1

 

 

5.经常脱壳的朋友应该发现了,这里应该就是指向OEP的关键跳转了(因为第二列中间有个横杠),但是你会发现F8跳不过去,跳转没有实现,因为跳转的上一行”or eax,eax”这句话不解释了,需要一定的汇编基础,http://www.52pojie.cn/thread-420306-1-1.html可以在这个界面对照着查一下,也许你会懂,不懂我也没办法,然后我们需要做的是在这个跳转这行右键—断点—条件—输入”eax==0”—F9—F8,这样我们就实现了他的跳转

0043E631    46              inc esi                           
0043E632    AD              lods dword ptr ds:[esi]
0043E633    09C0            or eax,eax                        
0043E635 >- 0F84 E3BDFCFF   je 跑跑排行.0040A41E                  ; //指向OEP的跳转
0043E63B    56              push esi                          
0043E63C    97              xchg eax,edi                      
0043E63D    FF53 FC         call dword ptr ds:[ebx-0x4] 

 

6.来到OEP,可以脱壳了

0040A41E    55              push ebp                          ; //来到OEP
0040A41F    8BEC            mov ebp,esp
0040A421    6A FF           push -0x1
0040A423    68 C8CB4000     push 跑跑排行.0040CBC8
0040A428    68 A4A54000     push 跑跑排行.0040A5A4
0040A42D    64:A1 00000000  mov eax,dword ptr fs:[0]
0040A433    50              push eax
0040A434    64:8925 0000000>mov dword ptr fs:[0],esp
0040A43B    83EC 68         sub esp,0x68

 

 

7.运行,查壳

运行OK,查壳:Microsoft Visual C++ v6.0
posted @ 2015-11-14 22:09  许忠慧  阅读(604)  评论(0编辑  收藏  举报