首页
社区
课程
招聘
[原创]小试 anti vmware
发表于: 2010-4-1 23:50 44828

[原创]小试 anti vmware

2010-4-1 23:50
44828
小试 anti vmware
     今天偶然看到一款绿色版的硬盘专业工具,突然发现可以利用其中的一项功能来实现anti vmware。
  今日事今日毕,那就在今晚12:00之前把这个想法实现吧,let's go!
     我的想法就是检测硬盘的modelnumber,具体什么是modelnumber自己网上搜吧,反正不是硬盘序列号。难点就是在多种操作系统下都要能起到anti vmware的效果。程序在xp、2k、2003下都可以检测到vmware的运行。
    直接贴代码了,如果看不懂也没关系,我也是逆了人家的代码写出来的。Delphi也可以当汇编语言开发工具用,难道不是吗?
    unit Unit1;
        interface       
        uses
          Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
          Dialogs, StdCtrls, Buttons;
        type
          TForm1 = class(TForm)
                BitBtn1: TBitBtn;
                procedure BitBtn1Click(Sender: TObject);
                procedure FormClose(Sender: TObject; var Action: TCloseAction);
          private
                { Private declarations }
          public
                { Public declarations }
          end;
       
        var
          Form1: TForm1;
          hDeviceHandle:Thandle;
       
        implementation
       
        {$R *.dfm}
       
        procedure TForm1.BitBtn1Click(Sender: TObject);
        var
                 InBuffer: array[0..$8f] of byte;
                 cb:Cardinal;
                 tmp:Pchar;
        begin
                   hDeviceHandle:=CreateFile('\\.\PHYSICALDRIVE0',$C0000000,$3,nil,OPEN_EXISTING,$8000000,0);
                   ZeroMemory(@InBuffer,sizeof(InBuffer));
                  asm
                          pushad
                          lea ebx,InBuffer
                          xor ecx,ecx
                          mov al,$2c
                          MOV [ebx],al
                          MOV EAX,$200c0000
                          MOV [ebx+4], eax
                          mov al,$01
                          MOV [ebx+8],al
                          mov al,$40
                          MOV [ebx+$c],al
                          MOV EAX,$0001a5E0
                          MOV [ebx+$10], eax
                          mov al,$30
                          MOV [ebx+$18],al
                          mov al,$12
                          MOV [ebx+$1c],al
                          mov al,$40
                          MOV [ebx+$20],al
                          add ecx,ebx
                          add ecx,$50
                          MOV [ebx+$14], ecx
                          popad
                  end;
       
       
                  if DeviceIoControl(hDeviceHandle,$4D014,@InBuffer,$50,@InBuffer,$50,cb,nil) then
                           begin
                                   asm
                                         pushad
                                         lea ebx,InBuffer
                                         add ebx,$58
                                         mov tmp,ebx
                                         popad
                                   end;  //asm
       
                                 if ((pos('vmware',LowerCase(tmp))>0) or (pos('virtual',LowerCase(tmp))>0)) then
                                                showmessage('检测到 VMware Workstation!!!')
                                         else
                                                   showmessage('请在VMware中测试!');
       
                           end;
        end;
       
        procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
        begin
                  closehandle(hDeviceHandle);
        end;
         
        end.
       
        代码很短,但是效果不错。截图几张,留作纪念!

            

                  

                  

       
                                           天易love
                                                          2010-04-01

[课程]FART 脱壳王!加量不加价!FART作者讲授!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (38)
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
2
真麻烦,人家抹一下你就查不到了,还是red pill好用,一行代码搞定
2010-4-1 23:53
0
雪    币: 2015
活跃值: (902)
能力值: ( LV12,RANK:1000 )
在线值:
发帖
回帖
粉丝
3
那是你发明的吗?楼上的前辈。
2010-4-2 00:22
0
雪    币: 233
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4


胖子  你人我知道是不错的 也很直爽  但是每次表达方式似乎都"过头"

低调点不行吗???多交点朋友不行吗??总有一天你会明白我说的话的..
2010-4-2 10:16
0
雪    币: 2190
活跃值: (981)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
不怕前辈笑话
red pill是什么真的不知道
能否科普一下啊
2010-4-2 11:18
0
雪    币: 2523
活跃值: (520)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
好文还是要顶顶的~~~
2010-4-2 12:53
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
red pill vs 4核cpu
2010-4-2 15:20
0
雪    币: 130
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
red pill是啥我也不知道.. 大牛解释下?
2010-4-4 11:47
0
雪    币: 53
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
他说的是这个吗?
http://www.invisiblethings.org/papers/redpill.html
2010-4-4 12:00
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
10
检测不怕方法多,多多益善,搂主的方法也很有用
这里有个看得清楚点的redpill,
typedef struct _IDTR
{
        unsigned        Limit                :16;
        unsigned        BaseLo                :16;
        unsigned        BaseHi                :16;

} IDTR;

bool IsInVmware()
{
        bool        bRet = false;
        IDTR        idt_reg = {0};
        __asm
        {
                SIDT        idt_reg
        }

        if (idt_reg.BaseHi > 0xd000)
        {
                bRet = true ;
        }

        return bRet;
}
2010-4-4 13:27
0
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
11
感谢分享,不过貌似楼上那个是过时的方法了,如果我没有记错,开着vt方式,关闭binary translation基本上很多方法都要失效。

一楼的方法,我不知道是不是楼主原创,但是我在某游戏中看到过这种检测手段。不过那个比较全面而已,不仅仅是检测这一种虚拟机。     

毕竟主流虚拟机有4种,至少这四种还都是可以跑win的。 所以还是挺麻烦的。我觉得貌似现在都学聪明了,开始检测WinDbg了。
2010-4-4 18:15
0
雪    币: 7309
活跃值: (3778)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
12
换虚拟机吧,别用vmware workstation了
2010-4-4 18:56
0
雪    币: 2015
活跃值: (902)
能力值: ( LV12,RANK:1000 )
在线值:
发帖
回帖
粉丝
13
本来是想用WINHEX看看虚拟机分区表的,后来发现硬盘MODEL含有VMWARE关键字,正好用来检测虚拟机。只是2000下WINHEX不管用,就逆了一个更强大的硬盘专业工具。别的虚拟机大概换个关键字吧,没试过。
2010-4-4 22:24
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
这样的话,应该还有其他硬件信息可以用来一起检测是否虚拟机吧……
2010-4-5 14:00
0
雪    币: 55
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
大侠。真的那么强悍。
2010-4-5 14:03
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qml
16
大牛啊
2010-4-8 16:35
0
雪    币: 334
活跃值: (78)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
17
BOOL
DetectVMware(int *Version)
{
    int magic, ver;

    magic = 0;
    ver = 0;

        __try
        {
                __asm
                {
                        push ebx
                        mov  ecx, 0xa
                        mov  edx, 0x5658
                        mov  eax, 0x564d5868
                        in   eax, dx
                        mov  [ver],   eax
                        mov  [magic], ebx
                        pop  ebx
                }
        }
        __except(GetExceptionCode() == EXCEPTION_PRIV_INSTRUCTION ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
        {
                return FALSE;
        }
       

    if(magic == 0x564d5868)
    {
        *Version = ver;
        return TRUE;
    }

    return FALSE;
}

int _tmain(int argc, _TCHAR* argv[])
{
        int v;
        if (DetectVMware(&v)) {
                printf("VMWARE: %d\n", v);
        } else
                printf("NOT VMWARE\n");
       
        return 0;
}
2010-4-8 17:05
0
雪    币: 75
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
换 VirtualBox  自己改下代码
2010-4-9 02:40
0
雪    币: 242
活跃值: (14)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
19
对抗类而已,无贵*,sidt检测也只是哄下半虚拟化软件。
2010-4-9 22:13
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
mark 一下!这个很不错!支持楼主了!
这个是硬盘,网卡好像也可以吧?
2010-4-11 19:42
0
雪    币: 231
活跃值: (4820)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
21
支持楼主了!
2010-4-21 02:02
0
雪    币: 225
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
ESX可以直接挂载存储的,裸盘映射,VTD可以直接挂载
2010-5-16 09:55
0
雪    币: 109
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
楼主挺厉害的说
2010-5-16 10:50
0
雪    币: 104
活跃值: (68)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
天易MM好强,学习了~~~
2010-8-2 21:20
0
雪    币: 2015
活跃值: (902)
能力值: ( LV12,RANK:1000 )
在线值:
发帖
回帖
粉丝
25
头像不是我,那是我的偶像,楼上的明白不?太雷人了!
2010-8-2 21:42
0
游客
登录 | 注册 方可回帖
返回
//