アンチVMプログラムテスト

41263 ワード

これは、仮想マシンtoolsのプロセスが含まれているかどうかを検出することによって、仮想マシンであるかどうかを判断する最も簡単な反仮想マシンテストです.
まず関数を書いて、プロセスが含まれているかどうかを判断します.
 1 // 
 2 BOOL IsContainsProcess(CString strProName)
 3 {
 4     PROCESSENTRY32  pe32;   // 
 5     pe32.dwSize = sizeof(pe32);   // 
 6     
 7     HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);  // 
 8     
 9     if (hProcessSnap==INVALID_HANDLE_VALUE)
10     {
11         //MessageBox(" "," ",MB_OK);
12         exit(1);
13     }
14     
15     // 
16     BOOL bMore = ::Process32First(hProcessSnap,&pe32);
17     while(bMore)
18     {
19         if (strProName==pe32.szExeFile)
20         {
21             return TRUE;  // , TRUE
22             bMore=FALSE;   // 
23         }
24         else
25         {
26             bMore=::Process32Next(hProcessSnap,&pe32);
27         }
28     }
29     // 
30     CloseHandle(hProcessSnap);
31     return FALSE;     
32 }

そして,プログラム初期化の際に,いくつかのプロセスが含まれているか否かを判断することができる.
 
 1  1 if ( 
 2  2         (IsContainsProcess("VBoxTray.exe")) ||
 3  3         (IsContainsProcess("VBoxService.exe")) ||
 4  4         (IsContainsProcess("VMwareUser.exe"))|| 
 5  5         (IsContainsProcess("VMwareTray.exe")) ||
 6  6         (IsContainsProcess("VMUpgradeHelper.exe"))||
 7  7         (IsContainsProcess("vmtoolsd.exe"))||
 8  8         (IsContainsProcess("vmacthlp.exe"))
 9  9         )
10 10     {
11 11         AfxMessageBox(" ");
12 12         exit(0);
13 13     }

次に、このプログラムを逆デバッグします.
プログラムのダウンロードアドレス:http://files.cnblogs.com/tk091/AntiVirtualTest.zip
まずODで読み込み、文字列を検索します.
「仮想マシンでプログラムを実行しないでください」を見つけ、「フォロー」をクリックして逆アセンブリ領域に着きます.
1 00401496   > \6A 00         push    0
2 00401498   .  6A 00         push    0
3 0040149A   .  68 A0804100   push    004180A0                         ;   
4 0040149F   .  E8 8FF80000   call    00410D33

ジャンプのソースを見つけます
 1 004013C9   . /0F85 C7000000 jnz     00401496
 2 004013CF   . |51            push    ecx
 3 004013D0   . |8BCC          mov     ecx, esp
 4 004013D2   . |896424 14     mov     dword ptr [esp+14], esp
 5 004013D6   . |68 10814100   push    00418110                         ;  vboxservice.exe
 6 004013DB   . |E8 48E30000   call    0040F728
 7 004013E0   . |8BCE          mov     ecx, esi
 8 004013E2   . |E8 29FEFFFF   call    00401210
 9 004013E7   . |85C0          test    eax, eax
10 004013E9   . |0F85 A7000000 jnz     00401496
11 004013EF   . |51            push    ecx
12 004013F0   . |8BCC          mov     ecx, esp
13 004013F2   . |896424 14     mov     dword ptr [esp+14], esp
14 004013F6   . |68 00814100   push    00418100                         ;  vmwareuser.exe
15 004013FB   . |E8 28E30000   call    0040F728
16 00401400   . |8BCE          mov     ecx, esi
17 00401402   . |E8 09FEFFFF   call    00401210
18 00401407   . |85C0          test    eax, eax
19 00401409   . |0F85 87000000 jnz     00401496
20 0040140F   . |51            push    ecx
21 00401410   . |8BCC          mov     ecx, esp
22 00401412   . |896424 14     mov     dword ptr [esp+14], esp
23 00401416   . |68 F0804100   push    004180F0                         ;  vmwaretray.exe
24 0040141B   . |E8 08E30000   call    0040F728
25 00401420   . |8BCE          mov     ecx, esi
26 00401422   . |E8 E9FDFFFF   call    00401210
27 00401427   . |85C0          test    eax, eax
28 00401429   . |75 6B         jnz     short 00401496
29 0040142B   . |51            push    ecx
30 0040142C   . |8BCC          mov     ecx, esp
31 0040142E   . |896424 14     mov     dword ptr [esp+14], esp
32 00401432   . |68 DC804100   push    004180DC                         ;  vmupgradehelper.exe
33 00401437   . |E8 ECE20000   call    0040F728
34 0040143C   . |8BCE          mov     ecx, esi
35 0040143E   . |E8 CDFDFFFF   call    00401210
36 00401443   . |85C0          test    eax, eax
37 00401445   . |75 4F         jnz     short 00401496
38 00401447   . |51            push    ecx
39 00401448   . |8BCC          mov     ecx, esp
40 0040144A   . |896424 14     mov     dword ptr [esp+14], esp
41 0040144E   . |68 CC804100   push    004180CC                         ;  vmtoolsd.exe
42 00401453   . |E8 D0E20000   call    0040F728
43 00401458   . |8BCE          mov     ecx, esi
44 0040145A   . |E8 B1FDFFFF   call    00401210
45 0040145F   . |85C0          test    eax, eax
46 00401461   . |75 33         jnz     short 00401496
47 00401463   . |51            push    ecx
48 00401464   . |8BCC          mov     ecx, esp
49 00401466   . |896424 14     mov     dword ptr [esp+14], esp
50 0040146A   . |68 BC804100   push    004180BC                         ;  vmacthlp.exe
51 0040146F   . |E8 B4E20000   call    0040F728
52 00401474   . |8BCE          mov     ecx, esi
53 00401476   . |E8 95FDFFFF   call    00401210
54 0040147B   . |85C0          test    eax, eax
55 0040147D   . |75 17         jnz     short 00401496
56 0040147F   . |8B4C24 14     mov     ecx, dword ptr [esp+14]
57 00401483   . |5F            pop     edi
58 00401484   . |5E            pop     esi
59 00401485   . |B8 01000000   mov     eax, 1
60 0040148A   . |64:890D 00000>mov     dword ptr fs:[0], ecx
61 00401491   . |5B            pop     ebx
62 00401492   . |83C4 14       add     esp, 14
63 00401495   . |C3            retn
64 00401496   > \6A 00         push    0

判断のジャンプが多いことがわかります
しかもtest eax,eaxに基づいて
ジャンプしたいくつかをxor eaxに変更し、eax後にファイルを保存すればいいです.
 1 004013AF   .  51            push    ecx
 2 004013B0   .  8BCC          mov     ecx, esp
 3 004013B2   .  896424 14     mov     dword ptr [esp+14], esp
 4 004013B6   .  68 20814100   push    00418120                         ;  vboxtray.exe
 5 004013BB   .  E8 68E30000   call    0040F728                         ;   
 6 004013C0   .  8BCE          mov     ecx, esi
 7 004013C2   .  E8 49FEFFFF   call    00401210
 8 004013C7      33C0          xor     eax, eax
 9 004013C9      0F85 C7000000 jnz     00401496
10 004013CF   .  51            push    ecx
11 004013D0   .  8BCC          mov     ecx, esp
12 004013D2   .  896424 14     mov     dword ptr [esp+14], esp
13 004013D6   .  68 10814100   push    00418110                         ;  vboxservice.exe
14 004013DB   .  E8 48E30000   call    0040F728
15 004013E0   .  8BCE          mov     ecx, esi
16 004013E2   .  E8 29FEFFFF   call    00401210
17 004013E7      33C0          xor     eax, eax
18 004013E9      0F85 A7000000 jnz     00401496
19 004013EF   .  51            push    ecx
20 004013F0   .  8BCC          mov     ecx, esp
21 004013F2   .  896424 14     mov     dword ptr [esp+14], esp
22 004013F6   .  68 00814100   push    00418100                         ;  vmwareuser.exe
23 004013FB   .  E8 28E30000   call    0040F728
24 00401400   .  8BCE          mov     ecx, esi
25 00401402   .  E8 09FEFFFF   call    00401210
26 00401407      33C0          xor     eax, eax
27 00401409      0F85 87000000 jnz     00401496
28 0040140F   .  51            push    ecx
29 00401410   .  8BCC          mov     ecx, esp
30 00401412   .  896424 14     mov     dword ptr [esp+14], esp
31 00401416   .  68 F0804100   push    004180F0                         ;  vmwaretray.exe
32 0040141B   .  E8 08E30000   call    0040F728
33 00401420   .  8BCE          mov     ecx, esi
34 00401422   .  E8 E9FDFFFF   call    00401210
35 00401427      33C0          xor     eax, eax
36 00401429      75 6B         jnz     short 00401496
37 0040142B   .  51            push    ecx
38 0040142C   .  8BCC          mov     ecx, esp
39 0040142E   .  896424 14     mov     dword ptr [esp+14], esp
40 00401432   .  68 DC804100   push    004180DC                         ;  vmupgradehelper.exe
41 00401437   .  E8 ECE20000   call    0040F728
42 0040143C   .  8BCE          mov     ecx, esi
43 0040143E   .  E8 CDFDFFFF   call    00401210
44 00401443      33C0          xor     eax, eax
45 00401445      75 4F         jnz     short 00401496
46 00401447   .  51            push    ecx
47 00401448   .  8BCC          mov     ecx, esp
48 0040144A   .  896424 14     mov     dword ptr [esp+14], esp
49 0040144E   .  68 CC804100   push    004180CC                         ;  vmtoolsd.exe
50 00401453   .  E8 D0E20000   call    0040F728
51 00401458   .  8BCE          mov     ecx, esi
52 0040145A   .  E8 B1FDFFFF   call    00401210
53 0040145F      33C0          xor     eax, eax
54 00401461      75 33         jnz     short 00401496
55 00401463   .  51            push    ecx
56 00401464   .  8BCC          mov     ecx, esp
57 00401466   .  896424 14     mov     dword ptr [esp+14], esp
58 0040146A   .  68 BC804100   push    004180BC                         ;  vmacthlp.exe
59 0040146F   .  E8 B4E20000   call    0040F728
60 00401474   .  8BCE          mov     ecx, esi
61 00401476   .  E8 95FDFFFF   call    00401210
62 0040147B      33C0          xor     eax, eax
63 0040147D      75 17         jnz     short 00401496
64 0040147F   .  8B4C24 14     mov     ecx, dword ptr [esp+14]
65 00401483   .  5F            pop     edi
66 00401484   .  5E            pop     esi
67 00401485   .  B8 01000000   mov     eax, 1
68 0040148A   .  64:890D 00000>mov     dword ptr fs:[0], ecx
69 00401491   .  5B            pop     ebx
70 00401492   .  83C4 14       add     esp, 14
71 00401495   .  C3            retn

アンチanti後のプログラムダウンロード:http://files.cnblogs.com/tk091/anti-anti.zip