Jian丶ylt 发表于 2015-11-14 22:04

手脱Upack 2.x - 3.x

声明:

       1.只为纪录自己成长历程,高手勿喷
       2.您的热心是新手持续发帖的动力

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:
0040103B    67:40         inc eax                           ; kernel32.BaseThreadInitThunk
0040103D    0000            add byte ptr ds:,al

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

0043E49B    F3:AB         rep stos dword ptr es:
0043E49D    AD            lods dword ptr ds:
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:

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

0043E60E   /E3 1B         jecxz short 跑跑排行.0043E62B         ; //ESP落脚点
0043E610   |8A07            mov al,byte ptr ds:
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:
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:
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:   

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 00000000mov eax,dword ptr fs:
0040A433    50            push eax
0040A434    64:8925 0000000>mov dword ptr fs:,esp
0040A43B    83EC 68         sub esp,0x68

7.运行,查壳

    运行OK,查壳:Microsoft Visual C++ v6.0






noah88 发表于 2015-11-14 22:32

感谢分享,学习了

flyinwind 发表于 2015-11-14 22:47

学习,谢谢楼主分享!

木木头上 发表于 2015-11-14 23:00

脱得不错
欢迎分析讨论交流,吾爱破解论坛有你更精彩.

zhangzhaoshuai 发表于 2016-12-15 22:50

表示什么也不懂啊
页: [1]
查看完整版本: 手脱Upack 2.x - 3.x