首页
社区
课程
招聘
[原创]虚拟机通用检测代码
发表于: 2006-6-12 17:01 12196

[原创]虚拟机通用检测代码

2006-6-12 17:01
12196

代码如下,请大家检测下 我个人测试可以100%检测出虚拟机
当然,代码里面没有考虑线程转换,实际使用的时候需要考虑进去
编译好的程序可以从
http://www.huibian.com/anti-vm.rar
下载获取
另外也请大家测试的时候把对话框得到的数值 说一下
我p2CPU下结果为20h pm740下为2Bh


[注意]APP应用上架合规检测服务,协助应用顺利上架!

收藏
免费 7
支持
分享
最新回复 (19)
雪    币: 214
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
  rdtsc
  mov  edi,eax    ;将第一次的结果保存起来
  rdtsc
  sub  eax,edi    ;向减得到“间隔周期数”

其余代码有点多余
2006-6-12 17:22
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
3
这样检测VM,除了可能误报,别的好处不大阿。人家把rdtsc的结果给你改了你不就判断不出来了么。万一谁的机器跑的慢,你把人家当成了虚拟机那咋办。
2006-6-12 19:22
0
雪    币: 408
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
不会跑的太慢的
我还没看到过真实机器会大于50h的
当然我也说啦
需要考虑线程转换

所以我感觉误报因该不会 至于说别人修改rdtsc的结果
那就要看你如何利用拉
2006-6-12 19:56
0
雪    币: 338
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
最初由 girl 发布
rdtsc
mov edi,eax ;将第一次的结果保存起来
rdtsc
sub eax,edi ;向减得到“间隔周期数”

........


2006-6-12 20:47
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
肯定不可靠的,会误判太多。
速度特慢的,会判断为VM.很多CPU的主频都可以调节的。
速度特快的,本来有VM会判断没有VM.你想一想,未来CPU速度日新月异,双核CPU等你能保证那个值是临界值?
2006-6-12 20:56
0
雪    币: 408
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
但至少现在速度慢的好像也没有eax大于200h的
双核CPU只会eax小吧
我顶多去掉eax<10h这个
在虚拟机里eax的稳定值一般都是几百单位
即使以后个人机器速度很快,vm里面这个值应该也不会很低吧
你可以找cpu好的服务器看看
个人认为现在这个的检测产生误判的可能性几乎为0
2006-6-12 21:06
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
你这个方法不行,最根本一点没有告诉你,既然在VM下,那么rdtsc这个指令也不是真的执行,而是通过VM执行,那么这个返回值可靠吗?你自己想。
2006-6-12 21:17
0
雪    币: 408
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
不可靠,但你可以测试就知道啦
VM里也有个稳定值
另外VM里通常会出现很不规则的东西
真实机器就很稳定
这也就是我为啥说考虑线程的原因
你找稳定值就可以拉
所以说 这个方法目前是可靠的
2006-6-12 21:28
0
雪    币: 408
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
如果是在程序中间随机检测
稍微修改下代码 防止线程中断 找个稳定值
就基本做到100%检测出vpc和VM
2006-6-12 21:31
0
雪    币: 99
活跃值: (2588)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
PD820上值是69。误报为VM
2006-6-13 08:20
0
雪    币: 259
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
12
p4 2.66G 64bit

windows 2003 en 64bit

误报VM
2006-6-13 08:33
0
雪    币: 175
活跃值: (2621)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
检测这么复杂。
2006-6-13 20:03
0
雪    币: 408
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
郁闷啦
双核PD820竟然出现69
楼上的rufus 可以说下你的 p4 2.66G 64bit 下的的值是?
2006-6-13 22:40
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
楼主好像有点孤芳自赏?听不进别人的意见。“基本做到100%”?既然100%,怎么还是基本?那应该是完全做到了!
别学用RDTSC来检测VM,就是正常运行都可能出问题,为何?
看代码:
rdtsc
mov edi,eax
rdtsc
sub eax,edi
如果在执行到mov edi,eax后,CPU进行时间片切换(可能是进程切换也可能是线程
切换),那么再执行rdtsc后的差值都会表较大。
2006-6-14 12:57
0
雪    币: 259
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
16
最初由 icyfox 发布
郁闷啦
双核PD820竟然出现69
楼上的rufus 可以说下你的 p4 2.66G 64bit 下的的值是?


好像也是69
2006-6-14 13:05
0
雪    币: 408
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
17
gkend  你好,谢谢批评!
我前面也说过 需要考虑线程切换,判断的方法也很简单
基本上两三次eax的值比较就可以得到cpu时间片没切换的值

我说的基本上100% 是因为我确实没见过很好的CPU,

我在自己用的时候eax的值是设置在小于200h属于真实机器
因为找人测试 没有发现大于50h和小于10h的,所以发贴的时候临时改变了下判断条件,也许你认为RDTSC来检测VM 不可以,我在发贴前
也找过判断VM的方法,没有通用的,所以 才自己感觉这个可以后 发
了出来
也是希望大家可以讨论,指出不足

另外VM里 eax的取值相比真实机器里 取值会比较杂乱

以让说的不对的 还请大家继续讨论
另外如果有网友有条件测试比较好的多CPU机器
麻烦帮忙测试下 看看eax的值
2006-6-14 22:42
0
雪    币: 259
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
18
最初由 icyfox 发布
郁闷啦
双核PD820竟然出现69
楼上的rufus 可以说下你的 p4 2.66G 64bit 下的的值是?


我今天又试了一下,竟然又不误报了.不明白
64 00 00 00
2006-6-15 11:46
0
雪    币: 408
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
19
rufus
因为我调整了 eax的值
2006-6-15 19:48
0
雪    币: 4
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
20
学习
2020-3-5 21:22
0
游客
登录 | 注册 方可回帖
返回
//