純手工秒殺VM,SE等虛擬機Handle

/**************************************php

/* 做者:半斤八兩測試

/* 博客:http://cnblogs.com/bjblcrackedspa

/* 日期:2014-12-08 19:01code

/**************************************blog

 

 

 

只是感興趣,沒有其餘目的。失誤之處敬請諸位大俠賜教!ip

 

最近在研究虛擬機還原,偶然發現這個快速尋找Handle的方法.如今就把這個方法分享給你們 :)  get

破解或者逆向的時候常常遇到程序加了虛擬機保護.每當遇到虛擬機時,新人多半就是直接放棄,有經驗的就是頭疼着搞,邊搞邊頭疼 :(博客

 

VMProtectHandle很是好找從殼的EP處起只要人肉一會就能找到Handle. 虛擬機

Vmprotect不管編譯選擇是設成怎樣通常都不會超過200條指令就能找到Handle. 編譯

咱們先來看看如何快速尋找Vmprotect Handle.

 

首先就是OD加載Vmprotect.exe, 本例直接拿 Vmprotect 2.13.5 主程序作測試.

加載完後,咱們打開 View 菜單 選擇 Run trace.

打開Run trace 菜單後對着菜單 右鍵 另存 log 到文件.

而後咱們就直接按 Shift + F11 跟蹤運行(前題是要清除全部斷點.) 

運行3秒後輕按一下f7. 

而後咱們再到 Run trace 界面右鍵 關閉log 文件.

而後咱們直接打開 log 文件查找 「*」 星號就能直接找到Handle. 是否是很方便?

 

 1 011B2F82 Main mov edx,dword ptr ds:[eax*4+11B3234] ; EDX=A0236748 

 

其中 11B3234 就是Handle的地址了.咱們再到數據窗口 地址形式顯示 看看Handle

 

 1 011B3234  402366DE
 2 011B3238  C0236876
 3 011B323C  A0236ABB
 4 011B3240  4023679B
 5 011B3244  A0236779
 6 011B3248  00236907
 7 011B324C  E0236AEC
 8 011B3250  C02367C8
 9 011B3254  00236987
10 011B3258  80236813
11 011B325C  C02368D7
12 011B3260  80236640
13 011B3264  00236A7B
14 011B3268  C0236A1C
15 011B326C  4023679B
16 011B3270  00236907
17 011B3274  00236727
18 011B3278  C0236605
19 011B327C  C0236A1C
20 011B3280  6023694B
21 011B3284  E0236A57
22 011B3288  202365C1
23 011B328C  A02367FF
24 011B3290  C02367A6
25 011B3294  202367AE
26 011B3298  4023681A
27 011B329C  C023660D
28 011B32A0  00236907
29 011B32A4  402368EC
30 011B32A8  00236907
31 011B32AC  A0236ABB
32 011B32B0  E02365E2
33 011B32B4  C023660D
34 011B32B8  002365F5
35 011B32BC  0023695B
36 011B32C0  00236A3B
37 011B32C4  A0236607
38 011B32C8  6023694B
39 011B32CC  40236769
40 011B32D0  00236727
41 011B32D4  20236962
42 011B32D8  602369C2
43 011B32DC  00236921
44 011B32E0  C023687E
45 011B32E4  C023660D
46 011B32E8  00236892
47 011B32EC  402366DE
48 011B32F0  C0236605

 

 

 

咱們直接到 011B2F82  這裏看看他是如何解密Handle?

 

 1 011B2F6D    28C3                      sub bl,al
 2 011B2F6F    66:0FBAE5 0B              bt bp,0B
 3 011B2F74    0FB6C0                    movzx eax,al
 4 011B2F77    60                        pushad
 5 011B2F78    0F97C6                    seta dh
 6 011B2F7B    66:F7D2                   not dx
 7 011B2F7E    0FBAE4 19                 bt esp,19
 8 011B2F82    8B1485 34321B01           mov edx,dword ptr ds:[eax*4+11B3234]
 9 011B2F89    F5                        cmc
10 011B2F8A C1CA 1D ror edx,1D    // 這裏是解密Handle 11 011B2F8D    57                        push edi
12 011B2F8E    FF7424 04                 push dword ptr ss:[esp+4]
13 011B2F92    E9 79180000               jmp VMProtec.011B4810

 

 

咱們拿402366EC這條Handle地址來解密試一下.

 

ROR 402366EC, 0x1d == 011B3762

 

 1 011B3762    C0D1 02                   rcl cl,2
 2 011B3765    8B55 00                   mov edx,dword ptr ss:[ebp]
 3 011B3768    0F99C5                    setns ch
 4 011B376B    28C5                      sub ch,al
 5 011B376D    80E1 3E                   and cl,3E
 6 011B3770    F6DD                      neg ch
 7 011B3772    83C5 04                   add ebp,4
 8 011B3775    F6D1                      not cl
 9 011B3777    F6D1                      not cl
10 011B3779    29C0                      sub eax,eax
11 011B377B    F7C4 9E651C71             test esp,711C659E
12 011B3781    66:0FBEC9                 movsx cx,cl
13 011B3785    89C1                      mov ecx,eax
14 011B3787    F8                        clc
15 011B3788    C1E0 07                   shl eax,7
16 011B378B    56                        push esi
17 011B378C    9C                        pushfd
18 011B378D    F8                        clc
19 011B378E    C1E9 19                   shr ecx,19
20 011B3791    E8 59110000               call VMProtec.011B48EF
21 
22 011B48EF    F9                        stc
23 011B48F0    9C                        pushfd
24 011B48F1    F9                        stc
25 011B48F2    09C8                      or eax,ecx
26 011B48F4    9C                        pushfd
27 011B48F5    9C                        pushfd
28 011B48F6    3202                      xor al,byte ptr ds:[edx]
29 011B48F8    68 8EE25741               push 4157E28E
30 011B48FD    42                        inc edx
31 011B48FE    E8 80FCFFFF               call VMProtec.011B4583
32 
33 011B4583    FF4D 00                   dec dword ptr ss:[ebp]
34 011B4586  ^ E9 6AF3FFFF               jmp VMProtec.011B38F5
35 
36 011B38F5   /E9 03140000               jmp VMProtec.011B4CFD
37 
38 011B4CFD    60                        pushad
39 011B4CFE    8D6424 40                 lea esp,dword ptr ss:[esp+40]
40 011B4D02  ^ 0F85 73EAFFFF             jnz VMProtec.011B377B    // 計算Hash
 

 

經過分析不難看出這個Handle是計算Hash.

VmprotectHandle不多並且每一個Handle都很是短,如今Handle地址已經拿到了

剩下的就是花時間分析每一個Handle.剩下的,該破解破解該分析分析...

 

 

SafengineHandle也很是好找EP處起

通常只要人肉幾個小時就能找到Handle.(對於新人而言)我就直接拿Safengine主程序來作演示

主程序好像是用的 Safengine NetLicensor v2.3.3.0加的殼.用什麼加殼不重要重要的是咱們的方法能找到Handle. 

 

首先重複上面Vmprotect的步驟再搜索 「*」 時會發現,有很是多 相似 [reg*4] 的指令

那麼咱們這招就失靈了無論他怎麼變咱們總會想到對應的辦法的

程序每次解碼完成後,都會跑到虛擬指令裏跑過去就會更改ip. 那麼咱們就從改變ip的指令着手

改變ip的常規手法就是 jcc / ret / call / 等等.

爲了節省篇幅我就不一個個試了經分析發現 ret 咱們仍是能夠利用的

 

咱們打開剛纔的跟蹤Log. 直接搜索 ret . 會發現有不少 ret 

帶有參數的咱們就不要看了直接看沒帶參數的找到一個:

 

 1 0061E5CA Main retn ; ESP=0012FE90 

 

找到後打開OD,到這個地址下個斷點F9運行斷下來Shift+F9 跟蹤運行斷下來後,就能夠關閉 Log. 打開Log 看看最後幾行.

 

 1 0061EBE7 Main     jmp Shielden.0061D030
 2 0061D030 Main     add ebx,EEEF5392                          ; FL=S, EBX=EEEF554A
 3 0061D036 Main     jmp Shielden.0061E94A
 4 0061E94A Main     call Shielden.0061E7E9                    ; ESP=0012FE64
 5 0061E7E9 Main     jmp short Shielden.0061E779
 6 0061E779 Main     mov edx,dword ptr ss:[esp+3]              ; EDX=00000000
 7 0061E77D Main     not edx                                   ; EDX=FFFFFFFF
 8 0061E77F Main     call Shielden.0061E57F                    ; ESP=0012FE60
 9 0061E57F Main mov ebx,dword ptr ds:[ebx+11727F72] ; EBX=9A8B2F4F  // 這裏是Handle藏匿之處
10 0061E585 Main     mov dx,0BF2D                              ; EDX=FFFFBF2D
11 0061E589 Main     sub esp,5                                 ; FL=A, ESP=0012FE5B
12 0061E58C Main     jmp short Shielden.0061E546
13 0061E546 Main     jg short Shielden.0061E55C
14 0061E55C Main     mov dx,word ptr ss:[esp+2]                ; EDX=FFFF00DC
15 0061E561 Main     lea esp,dword ptr ss:[esp+1]              ; ESP=0012FE5C
16 0061E565 Main     jmp Shielden.0061D050
17 0061D050 Main add ebx,65D77E6D ; FL=CA, EBX=0062ADBC  // 這裏是解密Handle
18 0061D056 Main     jmp Shielden.0061E6F1
19 0061E6F1 Main     mov edx,dword ptr ss:[esp]                ; EDX=0000DC00
20 0061E6F4 Main     jmp Shielden.0061E5A8
21 0061E5A8 Main     stc
22 0061E5A9 Main     jpe short Shielden.0061E58E
23 0061E5AB Main     mov dx,bp                                 ; EDX=0000FE90
24 0061E5AE Main     jmp short Shielden.0061E591
25 0061E591 Main     mov esp,ebp                               ; ESP=0012FE90
26 0061E593 Main     jmp short Shielden.0061E5EF
27 0061E5EF Main     mov edx,E01F9EB1                          ; EDX=E01F9EB1
28 0061E5F4 Main     setl dl                                   ; EDX=E01F9E00
29 0061E5F7 Main     sbb edx,edx                               ; FL=CPAS, EDX=FFFFFFFF
30 0061E5F9 Main     jnz short Shielden.0061E5C6
31 0061E5C6 Main     btr edx,ebx                               ; EDX=EFFFFFFF
32 0061E5C9 Main push ebx ; ESP=0012FE8C  // Handle入棧
33 Breakpoint at Shielden.0061E5CA
34 0061E5CA Main retn  // 進入虛擬機
35 Run trace closed

 

 

咱們在 0061E57F 處下斷點看看信息窗口顯示的,就是Handle所在處了.

信息窗口顯示以下:

 

ds:[0061D34C]=9A8ABFBA

ebx=EEEF53DA

 

0061D34C 處顯示的就是Handle 所在地了

 

 1 0061D350  9A7F1BFB
 2 0061D354  9A9C3F3E
 3 0061D358  9A8A675E
 4 0061D35C  9A8B1C48
 5 0061D360  9A7F4D05
 6 0061D364  9A8ADA8E
 7 0061D368  9A8A675E
 8 0061D36C  9A809549
 9 0061D370  9A80BAE7
10 0061D374  9A8AD6E5
11 0061D378  9A8B8FED
12 0061D37C  9A8AF541
13 0061D380  9A7FC71E
14 0061D384  9A7E6DF7
15 0061D388  9A7FA40A
16 0061D38C  9A8B3B12
17 0061D390  9A81475C
18 0061D394  9A7FDA30
19 0061D398  9A80C8CA
20 0061D39C  9A8AFB11
21 0061D3A0  9A7F4382
22 0061D3A4  9A802723
23 0061D3A8  9A7F65C9
24 0061D3AC  9A8B99FD
25 0061D3B0  9A8A67D4
26 0061D3B4  9A8A781C
27 0061D3B8  9A8AB00B
28 0061D3BC  9A7FF5C5
29 0061D3C0  9A8B1556
30 0061D3C4  9A9BD5CA
31 0061D3C8  9A803DB8
32 0061D3CC  9A9BE60C
33 0061D3D0  9A7ECA17
34 0061D3D4  9A8BBB40
35 0061D3D8  9A8ABFBA
36 0061D3DC  9A9BB066
37 0061D3E0  9A8B79E5
38 0061D3E4  9A8AE696
39 0061D3E8  9A8A675E
40 0061D3EC  9A804A3E
41 0061D3F0  9A8B6905
42 0061D3F4  9A805E32
43 0061D3F8  9A7FE7F7
44 0061D3FC  9A9C1F77

 

 

找到了Handle 剩下的就是」人肉」了 :)

 

PDF及Trace Log:

<看雪學院> 

相關文章
相關標籤/搜索