吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 39514|回复: 65
收起左侧

[原创] 过VMP的vmware的检测

  [复制链接]
ximo 发表于 2010-10-30 21:15
回答下这个帖子的问题:http://www.52pojie.net/thread-68349-1-1.html

继续郁闷,继续无聊,继续fuck!
VMP有个检测虚拟机的选项,这里只说过vmware检测的方法。
如加个检测虚拟机的选项,在虚拟机运行会出现下面的提示:
1.jpg

下面就来说下过这个检测的方法:
1.在VM_Retn处下好断,如下:
//VM_Retn
Address Thread   Command                                   ; Registers and comments
01051374 Main     shr cl,6                                  ; ECX=01051301 
01051377 Main     push esi
01051378 Main     dec di                                    ; EDI=0006F69F
0105137B Main     clc
0105137C Main     mov esp,ebp
0105137E Main     rcl cx,7                                  ; ECX=01058084
01051382 Main     shr cl,5                                  ; ECX=01058004
01051385 Main     test bx,25E5
0105138A Main     pop ecx                                   ; ECX=00000000
0105138B Main     sbb bx,0B0CF                              ; EBX=016378C0
01051390 Main     movzx bp,al                               ; EBP=000600A5
01051394 Main     bswap ecx
01051396 Main     pop ecx                                   ; ECX=0006FF8C
01051397 Main     pushfd
01051398 Main     sal ecx,cl                                ; ECX=6FF8C000
0105139A Main     or edx,ecx                                ; EDX=6FF8C000
0105139C Main     jmp NOTEPAD_.010534CE
010534CE Main     mov ecx,dword ptr ss:[esp+4]              ; ECX=010328FD
010534D2 Main     test esi,66FCC45D
010534D8 Main     btc bx,si                                 ; EBX=016358C0
010534DC Main     shr di,cl                                 ; EDI=00060000
010534DF Main     das                                       ; EAX=00000045
010534E0 Main     push dword ptr ss:[esp+8]
010534E4 Main     popfd
010534E5 Main     setns al                                  ; EAX=00000000
010534E8 Main     call NOTEPAD_.010532F5
010532F5 Main     push edx
010532F6 Main     mov edi,dword ptr ss:[esp+14]             ; EDI=0006FF74
010532FA Main     pop ebp                                   ; EBP=6FF8C000
010532FB Main     mov ebp,dword ptr ss:[esp+14]             ; EBP=0006FF98
010532FF Main     pop esi                                   ; ESI=010534ED
01053300 Main     pushad
01053301 Main     bswap ax
01053304 Main     mov eax,dword ptr ss:[esp+34]             ; EAX=564D5868
01053308 Main     seta bh                                   ; EBX=016300C0
0105330B Main     jmp NOTEPAD_.01051BD5
01051BD5 Main     pop ecx                                   ; ECX=0006FF74
01051BD6 Main     pop ebx                                   ; EBX=010534ED
01051BD7 Main     mov esi,dword ptr ss:[esp+30]             ; ESI=0006FF8C
01051BDB Main     pop edx                                   ; EDX=0006FF98
01051BDC Main     movsx dx,dl
01051BE0 Main     setnb dh                                  ; EDX=00060098
01051BE3 Main     push A12C39EA
01051BE8 Main     mov ebx,dword ptr ss:[esp+34]             ; EBX=00000000
01051BEC Main     jmp NOTEPAD_.010536B2
010536B2 Main     mov edx,dword ptr ss:[esp+38]             ; EDX=00005658
010536B6 Main     mov dword ptr ss:[esp],esi
010536B9 Main     mov ecx,dword ptr ss:[esp+3C]             ; ECX=0000000A
010536BD Main     push 5E6B9B41
010536C2 Main     pushfd
010536C3 Main     pushfd
010536C4 Main     mov byte ptr ss:[esp+C],ch
010536C8 Main     push dword ptr ss:[esp+4C]
    Breakpoint at NOTEPAD_.010536CC
010536CC Main     retn 50     //这里下好断
    Run trace closed

2.断下后,F7后,看代码,一直到出口处的指令为
0102F393    ED                   in eax,dx
0102F394    9C                   pushfd
0102F395    57                   push edi
0102F396    C74424 04 FEFCF284   mov dword ptr ss:[esp+4],84F2FCFE
0102F39E    60                   pushad
0102F39F    C74424 20 72265BE7   mov dword ptr ss:[esp+20],E75B2672


3.F7步过0102F393    ED                   in eax,dx后,把edx,ebx寄存器的值清0


4.F9运行,发现可以正常运行了。

很简单,方法也是很老的东西了。原理就是:
in eax,dx这条指令在R3下会产生异常,而VMP在SEH里重新设置了新的EIP,初始化了新的VMContext,而在虚拟机里,这个异常不会触发。
简单的代码如下(摘自shellwolf在反调试文章的代码):
bool IsInsideVMWare_()
{
bool r;
_asm
   {
     push    edx
     push    ecx
     push    ebx
     mov     eax, 'VMXh'
     mov     ebx, 0 // any value but MAGIC VALUE
     mov     ecx, 10 // get VMWare version
     mov     edx, 'VX' // port number
     in      eax, dx // read port
                   // on return EAX returns the VERSION
     cmp     ebx, 'VMXh' // is it a reply from VMWare?
     setz    [r] // set return value
     pop     ebx
     pop     ecx
     pop     edx
   }
return r;
}
bool FV_VMWare_VMX()
{
__try
   {
    return IsInsideVMWare_();
   }
__except(1) // 1 = EXCEPTION_EXECUTE_HANDLER
   {
    return false;
   }
}

补充下:如果不懂分析VM的handler,不懂哪条是VM_Retn的话,那就CTRL+F,搜in eax,dx指令下断吧!

免费评分

参与人数 3威望 +1 热心值 +3 收起 理由
wgz001 + 1 + 1 我来晚了
ucantseeme + 1 vmp往往不止一个in操作,还有其他的指令检测 ...
missviola + 1 ximo军师威武

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

无涯 发表于 2010-10-30 21:23
好东西,学习了。
woyaodaili 发表于 2010-10-30 21:47
woyaodaili 发表于 2010-10-30 22:15
本帖最后由 ximo 于 2010-10-30 22:19 编辑

找不到类似下面的这段代码

0102F393    ED                   in eax,dx

0102F394    9C                   pushfd

0102F395    57                   push edi
 楼主| ximo 发表于 2010-10-30 22:19
回复 4# woyaodaili


    放样本上来看看。
woyaodaili 发表于 2010-10-30 22:28
回复  woyaodaili


    放样本上来看看。
ximo 发表于 2010-10-30 22:19



   软件: http://www.vdisk.cn/down/index/5239839A2922

下断点

1.JPG
F7跟进

006E095E    E8 EFC50200     call 羊羊1030.0070CF52
006E0963    2002            and byte ptr ds:[edx],al
 楼主| ximo 发表于 2010-10-30 23:27
005D0CAA    ED                   in eax,dx
005D0CAB    68 533DC379          push 79C33D53
005D0CB0    E8 D3A31300          call 羊羊1030.0070B088
005D0CB5    D365 04              shl dword ptr ss:[ebp+4],cl
005D0CB8    76 46                jbe short 羊羊1030.005D0D00
woyaodaili 发表于 2010-10-30 23:54
为什么我找不到,我OD载入软件后CTRL+F,搜in eax,dx指令下断!
然后F7就转到

006E095E    E8 EFC50200     call 羊羊1030.0070CF52
006E0963    2002            and byte ptr ds:[edx],al
006E0965    A9 C092705A     test eax,0x5A7092C0
006E096A    56              push esi
006E096B    44              inc esp
006E096C    46              inc esi
006E096D    EE              out dx,al
006E096E    F4              hlt
006E096F    9C              pushfd

一直F7下去的话也去不到你那的地方
你能说说你的步骤吗?谢谢罗!
Hmily 发表于 2010-10-31 02:22
学习下,可以做个loader了,楼上那位兄台贴了那么长垃圾代码,我先给你清理了,占太多地方,VMP这样的东西,要贴你EIP走过的地方,其他垃圾那么多,谁知道是什么东西啊.
zsl01 发表于 2010-10-31 14:11
支持一下XIMO大大的作品。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-18 01:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表