js检测是否是虚拟机或者是自动化工具
【代码】js检测是否是虚拟机或者是自动化工具。
·
//检测
detectVM: function () {
var userAgent = navigator.userAgent;
var hardwareConcurrency = navigator.hardwareConcurrency || 1;
var maxTouchPoints = navigator.maxTouchPoints || 0;
// 增加更多的虚拟机标识符
if (userAgent.includes('VirtualBox') || userAgent.includes('VMware')) {
return true; // 用户代理字符串中包含虚拟机的信息
};
// 更准确地检测硬件并发性和最大触摸点数
if (hardwareConcurrency < 4 && maxTouchPoints < 5) {
return true; // 硬件指纹信息表明可能是虚拟机环境
};
var canvas = document.createElement('canvas');
var gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
// 如果WebGL上下文存在,则进一步检查渲染器信息
if (gl && gl instanceof WebGLRenderingContext) {
var debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
// 如果调试信息存在,则进一步检查渲染器字符串
if (debugInfo) {
var renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);
if (renderer.indexOf('llvmpipe') > -1 || renderer.indexOf('Mesa') > -1) {
return true; // 可能在虚拟机中运行
};
};
};
// 可能是自动化工具
if (/puppeteer|selenium/i.test(navigator.userAgent)) {
return true;
};
// 检查窗口特性
if (window._phantom || window.__nightmare || window.navigator.webdriver) {
return true;
};
// 使用更准确的方法检测iOS和Android模拟器
if (navigator.platform.includes('Mac') && userAgent.includes('iPhone') ||
navigator.platform.includes('Android') && userAgent.includes('Linux')) {
return /(simulator|x86_64)/.test(userAgent); // 如果User Agent中包含"simulator"或"x86_64"则表示为模拟器
};
return false; // 以上检测都未能确定在虚拟机中运行
},
更多推荐




所有评论(0)