首页
社区
课程
招聘
用户态程序,怎样检测是否运行在像vmware这样的软件虚拟出来的操作系统下?
发表于: 2009-2-21 21:41 8680

用户态程序,怎样检测是否运行在像vmware这样的软件虚拟出来的操作系统下?

2009-2-21 21:41
8680
想问下这里的高手和朋友们,由于不会写驱动,如果在用户态模式下的话,用程序怎么才能检测出是否运行在像vmware这样的软件所虚拟出来的操作系统下?

希望能得到这里朋友的帮助,得到一个比较通用的方法,如果只是针对某一个虚拟机产品而言的话,好像意义不大。先谢谢了。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (17)
雪    币: 141
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
vmware下的系统有几个独有的函数 可以检测一下
是用来运行vmware的扩展的的

以前看过忘了 自己找找吧 好像在论坛精华里……

好像都是针对单个产品的 至于通用

不存在吧?

在驱动模式下你有思路?

顺便提个点子 检测虚拟硬件的名字 尤其是声卡网卡的……
2009-2-21 22:45
0
雪    币: 207
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
用硬件信息检测是可以的,不过这个似乎每个VM都不一样的吧。
2009-2-21 23:21
0
雪    币: 141
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
就那么几个虚拟机 都装一下也没事 呵呵
2009-2-22 15:29
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
用最傻瓜最笨的办法,检测有没有vmware那几个进程、服务、注册表、路径、文件名。
虽然可靠度不是最高,一般情况下绝对满足了。 要是其他虚拟机也用类似方法。
2009-2-22 15:36
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我以前的方法:假设硬盘大小小于30G或者分区数小于3,那么认为它是虚拟机
2009-2-22 19:57
0
雪    币: 207
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
还有更好的办法吗?现在看来,好像只有枚举进程信息,去比对了,有通用一点的,楼下的朋友请继续。
2009-2-23 01:18
0
雪    币: 231
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qdk
8
0041427E    .  B8 68584D56       MOV EAX,564D5868   ;magic number (VMXh)
00414283    .  BB 00000000       MOV EBX,0          ;command parameter
00414288    .  B9 0A000000       MOV ECX,0A         ;command number
0041428D    .  BA 58560000       MOV EDX,5658       ;VMWare I/O port
00414292    .  ED                IN EAX,DX          ;communicate with backdoor                                   ;  I/O command
00414293    .  81FB 68584D56     CMP EBX,564D5868
2009-2-23 04:14
0
雪    币: 141
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
不好吧 如果是个老电脑怎么办? 在WINPE系统 (无盘)好像会误报吧
2009-2-26 12:54
0
雪    币: 141
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
你牛 虚拟机用户态能看到vmware进程

不可能的 虚拟机里看不到 vmware那几个进程、服务、注册表、路径、文件名。

类似于你的电脑里能看到我的电脑 有什么进程、服务、注册表、路径、文件名。
2009-2-26 13:07
0
雪    币: 1270
活跃值: (109)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
11
由于虚拟机的特殊性,因此我觉得 它必定会Hook一些系统常用的函数,比如:CreatFile、WriteFile等等系统级和文件处理有关的函数,你的程序可以查找这些函数与正常函数对比一下,即可大概判断到虚拟机,甚至病毒。
如我在VPC下得到的函数和正常系统中的函数对比:
VPC win2000
77F891B0 ntdll.ZwWriteFile               - E9 F3C7D989         JMP     01D259A8
77F891B5                                   8D5424 04           LEA     EDX, SS:[ESP+4]
77F891B9                                   CD 2E               INT     2E

正常XP中:
7C92E9F3 ZwWriteFile          B8 12010000           MOV EAX,112
7C92E9F8                      BA 0003FE7F           MOV EDX,7FFE0300
7C92E9FD                      FF12                  CALL DWORD PTR DS:[EDX]
7C92E9FF                      C2 2400               RETN 24

由于我这里没有更多的系统来验证,所以不知道是否真正可行。
2009-2-27 09:15
0
雪    币: 141
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
[QUOTE=;]...[/QUOTE]
11楼的朋友,杀毒软件也会honkapi
怎么样区分是虚拟机还是杀毒软件呢?
2009-2-27 09:31
0
雪    币: 1270
活跃值: (109)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
13
杀毒软件不会Hook与这几个创建、读写文件有关的API吧?我没有装杀毒软件,不是很清楚,不过各个虚拟机Hook的方式虽然可能不同,但是和病毒、杀软的Hook应该有明显区别,只是无法一一验证,权当猜测吧。
这个帖子中有些检测虚拟机的方法:
http://bbs.pediy.com/showthread.php?t=70470
希望有些帮助。
ps:
刚刚装好VMware下的2000系统,发现这几个关键函数没有被Hook,还要仔细分析一下该虚拟机的运作机制。
2009-2-27 09:35
0
雪    币: 53
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
虚拟机也不会HOOK CreatFile、WriteFile这些位置这么高的函数吧。。。
2009-2-27 12:30
0
雪    币: 1270
活跃值: (109)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
15
的确,我想错了,应该是在读写文件之前就把所模拟系统需要的文件参数已经转换好了,而不是在内核函数上Hook。继续研究虚拟机。
2009-2-27 13:29
0
雪    币: 331
活跃值: (57)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
16
8楼,高手。VMware通杀
2009-2-27 14:14
0
雪    币: 141
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
被引入歧途了
2009-2-27 19:33
0
雪    币: 2290
活跃值: (20)
能力值: ( LV9,RANK:150 )
在线值:
发帖
回帖
粉丝
18
另外还可以检查LDT、GDT、IDT如果这些系统的表所在内存位置过高的话,也能断定是不是在VM中。

这个方法的好处在于不管是哪种VM,基本上是通吃的,呵呵

比如Red pill和Scoopy Suite都是这个原理。
2009-3-12 15:39
0
游客
登录 | 注册 方可回帖
返回
//