新手练习:yoda's Protector V1.3手动脱壳
 

标题:新手练习:yoda's Protector V1.3手动脱壳
链接:http://www.unpack.cn/viewthread.php?tid=17140
贴者:heizihui
时间:2007-9-6 20:40

尝试脱过这系列工具的人应该有个印象.
如果用Fly的脚本脱或超级巡警脱壳,脱了yoda's Protector 1.3 -> Ashkbiz Danehkar后,能正常运行的话,PEID查壳显示:AHTeam EP Protector V0.3-V0.41 -> FEUERRADER,接着用超级巡警脱,脱下来确认正常运行再PEID查壳,显示UPX$HiT 0.0.1 ->dj-siba,然后OD分离一下,DUPM下来的程序,再用PEID查壳是:UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo,这时用PEID自带的UPX脱壳插件再脱,修复一下,最后才是无壳的程序:Microsoft Visual Basic 5.0 / 6.0.
也就是说你要让它裸奔,非得脱3到4次衣服不可,有够麻烦的.
这算是个多层壳不?

不知道大家是怎么对付它的,我第一次接触这系列软件时是这么脱下来的.在我一步一步的脱下来后,反复的针对每一层壳的脱壳练习中,发现可以不用脚本和不用脱壳机来脱,直接让它一次脱完!爽歪歪!(我在新手区单独发贴问过上面这些壳的脱法,在这谢谢热心的坛友们.后来用工具解决了,可感觉不太爽,就反复的OD单步跟,新手不好当呀.当然,经过反复的练习,那伪装壳AHTeam EP Protector V0.3-V0.41,UPX 0.89.6 - 1.02 / 1.05 - 1.24和UPX$HiT 0.0.1 ->dj-siba都可以让它裸衣了,不然就写不出这篇有长有臭的DD)

说真的,当我发现我能用OD完整脱掉它时,真的很开心,虽然这壳不难,但对于我这种新手来说,是个好的练习壳.写这文的目的:除了分享个中快乐之外就是交流了,'外衣''内衣'等说法仅个人看法,如有不对的地方忘多多指正!

好了
下面就开始这个比较'省力'的破解之旅了,拿Q宠猪猪伴侣来练习吧.

首先:
OD设置:
①调试设置:忽略所有异常!
②插件HideOD,选上自动隐藏和去掉OllyDbg调试标示

其次把程序载入OD:

两次Alt+M

第一次Alt+M

这里F2下断,然后F9运行

Memory map, 条目 14
地址=0045B000
大小=00002000 (8192.)
属主=Q宠猪猪?00400000
区段=.rsrc
包含=数据,资源
类型=Imag 01001002
访问=R
初始访问=RWE

第二次Alt+M

这里F2下断,然后F9运行

Memory map, 条目 13
地址=0043E000
大小=0001D000 (118784.)
属主=Q宠猪猪?00400000
区段=ZCode
包含=代码
类型=Imag 01001008
访问=RW  CopyOnWr
初始访问=RWE

停在这里,这里没什么好说的,F8

0045A058    B8 20C24500     mov     eax, 0045C220
0045A05D    FFE0            jmp     eax
0045A05F    76 61           jbe     short 0045A0C2
0045A061    61              popad
0045A062    61              popad
0045A063    E1 55           loopde  short 0045A0BA

N个F8后到了这里

0045C200    B8 57A04500     mov     eax, 0045A057
0045C205    B9 10000000     mov     ecx, 10
0045C20A    803408 61       xor     byte ptr [eax+ecx], 61   `这里小跳
0045C20E  ^ E2 FA           loopd   short 0045C20A           `
0045C210    B8 58A04500     mov     eax, 0045A058             `F4,F8

几次F8后到了这里(具体的忘了,几次而已)

0045A059    BC 41A04500     mov     esp, 0045A041
0045A05E    B9 17000000     mov     ecx, 17
0045A063    80340C DB       xor     byte ptr [esp+ecx], 0DB  `这里小跳
0045A067  ^ E2 FA           loopd   short 0045A063           `
0045A069    94              xchg    eax, esp
0045A06A    90              nop
0045A06B    90              nop
0045A06C    90              nop
0045A06D    FFE0            jmp     eax           `F4,不管它直接F8

到了这里

0045A044    45              inc     ebp
0045A045    00B9 71010000   add     byte ptr [ecx+171], bh
0045A04B    803408 08       xor     byte ptr [eax+ecx], 8           `这里小跳
0045A04F  ^ E2 FA           loopd   short 0045A04B                  `
0045A051  ^ FFE0            jmp     eax       ; Q宠猪猪?00459ED0    `和上面一样F4后不管它直接F8

到了这里,嘻嘻!都很熟悉了吧! 请自由发挥吧!(我依然选择单步跟)

00459ED0    60              pushad
00459ED1    BE 00E04300     mov     esi, 0043E000
00459ED6    8DBE 0030FCFF   lea     edi, dword ptr [esi+FFFC3000]
00459EDC    57              push    edi
00459EDD    83CD FF         or      ebp, FFFFFFFF
00459EE0    EB 10           jmp     short 00459EF2
00459EE2    90              nop
00459EE3    90              nop
00459EE4    90              nop
00459EE5    90              nop
00459EE6    90              nop
00459EE7    90              nop
00459EE8    8A06            mov     al, byte ptr [esi]

00459EE8    8A06            mov     al, byte ptr [esi]
00459EEA    46              inc     esi
00459EEB    8807            mov     byte ptr [edi], al
00459EED    47              inc     edi
00459EEE    01DB            add     ebx, ebx
00459EF0    75 07           jnz     short 00459EF9
00459EF2    8B1E            mov     ebx, dword ptr [esi]
00459EF4    83EE FC         sub     esi, -4
00459EF7    11DB            adc     ebx, ebx
00459EF9  ^ 72 ED           jb      short 00459EE8      `跳转
00459EFB    B8 01000000     mov     eax, 1              `F4

几次F8后到了这里

00459F61    01DB            add     ebx, ebx
00459F63    75 07           jnz     short 00459F6C
00459F65    8B1E            mov     ebx, dword ptr [esi]
00459F67    83EE FC         sub     esi, -4
00459F6A    11DB            adc     ebx, ebx
00459F6C    11C9            adc     ecx, ecx
00459F6E    01DB            add     ebx, ebx
00459F70  ^ 73 EF           jnb     short 00459F61          `一跳
00459F72    75 09           jnz     short 00459F7D          `两跳
00459F74    8B1E            mov     ebx, dword ptr [esi]    `F4

几次F8后到了这里

00459FAD  ^\77 F1           ja      short 00459FA0
00459FAF    01CF            add     edi, ecx
00459FB1  ^ E9 38FFFFFF     jmp     00459EEE              `跳转
00459FB6    5E              pop     esi                   `F4

接着到了这里

00459FBE    8A07            mov     al, byte ptr [edi]
00459FC0    47              inc     edi
00459FC1    2C E8           sub     al, 0E8
00459FC3    3C 01           cmp     al, 1
00459FC5  ^ 77 F7           ja      short 00459FBE          `跳转
00459FC7    803F 05         cmp     byte ptr [edi], 5
00459FCA  ^ 75 F2           jnz     short 00459FBE          `跳转
00459FCC    8B07            mov     eax, dword ptr [edi]    `F4

继续往下走

00459FC3    3C 01           cmp     al, 1
00459FC5  ^ 77 F7           ja      short 00459FBE
00459FC7    803F 05         cmp     byte ptr [edi], 5
00459FCA  ^ 75 F2           jnz     short 00459FBE
00459FCC    8B07            mov     eax, dword ptr [edi]
00459FCE    8A5F 04         mov     bl, byte ptr [edi+4]
00459FD1    66:C1E8 08      shr     ax, 8
00459FD5    C1C0 10         rol     eax, 10
00459FD8    86C4            xchg    ah, al
00459FDA    29F8            sub     eax, edi
00459FDC    80EB E8         sub     bl, 0E8
00459FDF    01F0            add     eax, esi
00459FE1    8907            mov     dword ptr [edi], eax
00459FE3    83C7 05         add     edi, 5
00459FE6    89D8            mov     eax, ebx
00459FE8  ^ E2 D9           loopd   short 00459FC3               `跳转
00459FEA    8DBE 00700500   lea     edi, dword ptr [esi+57000]   `F4

继续走

0045A02A      09C0            or      eax, eax
0045A02C      74 07           je      short 0045A035
0045A02E      8903            mov     dword ptr [ebx], eax
0045A030      83C3 04         add     ebx, 4
0045A033    ^ EB D8           jmp     short 0045A00D
0045A035      FF96 E0B00500   call    dword ptr [esi+5B0E0]
0045A03B    61              popad                    `F4,F8跟
0045A03C  - E9 2772FAFF     jmp     00401268         `直接到OEP哦
0045A041    B0 D0           mov     al, 0D0
0045A043    9E              sahf
0045A044    45              inc     ebp

一次F8后到了这里

00401268    68 F0144000     push    004014F0              ; ASCII "VB5!6&vb6chs.dll"   
0040126D    E8 F0FFFFFF     call    00401262              ; jmp 到 MSVBVM60.ThunRTMain   `F7
00401272    0000            add     byte ptr [eax], al

F7后到了这里

00401262  - FF25 B8104000   jmp     dword ptr [4010B8]               ; MSVBVM60.ThunRTMain
00401268    68 F0144000     push    004014F0                         ; ASCII "VB5!6&vb6chs.dll"
0040126D    E8 F0FFFFFF     call    00401262                         ; jmp 到 MSVBVM60.ThunRTMain

直接F8到了出口

6600357C >  55              push    ebp    `DUMP
6600357D    8BEC            mov     ebp, esp
6600357F    6A FF           push    -1

最后LOADPE修复一下,入口点改为:1268,保存.重建PE.(重建可以省掉地,不重建时381K,重建后366K)

PEID查一下脱下来的程序,显示:Microsoft Visual Basic 5.0 / 6.0

上一篇   下一篇