如何将假GPU信息提供给网站

时间:2019-05-02 14:59:55

标签: javascript webgl cefsharp

我需要使用CefSharp.Wpf创建Web浏览器,并能够向网站提供虚假数据,例如CPU内核,浏览器插件,平台名称等。 有网站可以检索所有这些信息:https://www.deviceinfo.me/

我的问题是:如何从此站点隐藏GPU信息?使用javascript或CefSharp功能

我尝试重新定义WebGLRenderingContext.getParameter方法,该方法提供有关GPU渲染器和供应商的信息:


var canvas = document.createElement('canvas');

var gl;

try {
  gl = canvas.getContext("webgl2") || canvas.getContext("webgl") || canvas.getContext("experimental-webgl2") || canvas.getContext("experimental-webgl");
} catch (e) {
}

var oldParam = WebGLRenderingContext.prototype.getParameter;


WebGLRenderingContext.prototype.getParameter = function(parameter){

    console.log("we have guests");

    if(parameter == debugInfo.UNMASKED_RENDERER_WEBGL){
         return "GTX 1080";
    }

    if(parameter == gl.getExtension("WEBGL_debug_renderer_info").UNMASKED_RENDERER_WEBGL){
        return "GTX 1080";
    }

    if(parameter == debugInfo.UNMASKED_RENDERER_WEBGL){
        return "NVidia";
    }

    if(parameter == gl.VERSION){
        return "GTX 1080";
    }
    return oldParam(parameter);
};

我希望完全重新定义此方法并返回一些虚假信息,但是当我再次调用gl.getParameter(param)时,它仍然为我提供了旧的gpu信息

2 个答案:

答案 0 :(得分:1)

class Pointer extends React.Component { componentDidUpdate(prevProps) { this.positionElement(prevProps.coords.XCoord, prevProps.coords.YCoord); } positionElement = (x, y) => { const mouse = { x, y }; follower.style.top = mouse.y + "px"; return (follower.style.left = mouse.x + "px"); }; render() { const follower = this.refs.follower; return ( <Follower id="follower"> <Circle id="circle" /> </Follower> ); } } WebGLRenderingContext

答案 1 :(得分:1)

如果您仍然希望Canvas2D和WebGL仍然可以工作,那么您将无法隐藏,因为它们可以通过实际渲染来进行指纹识别。

您可以通过以下方式禁用它们

   oldParam.call(this, parameter);

尽管它们不存在也是一个数据点。

否则,您的包装器似乎出现了一些问题。

首先,您确实应该在创建上下文之前先设置功能

第二行应该是

debugInfo

您也没有显示WebGLRenderingContext,但是可以改用WebGLRenderingContext.prototype.getParameter = function(origFn) { const paramMap = {}; paramMap[0x9245] = "Foo"; // UNMASKED_VENDOR_WEBGL paramMap[0x9246] = "Bar"; // UNMASKED_RENDERER_WEBGL paramMap[0x1F00] = "Nobody"; // VENDOR paramMap[0x1F01] = "Jim"; // RENDERER paramMap[0x1F02] = "Version 1.0"; // VERSION return function(parameter) { return paramMap[parameter] || origFn.call(this, parameter); }; }(WebGLRenderingContext.prototype.getParameter); // --- test const gl = document.createElement('canvas').getContext('webgl'); const ext = gl.getExtension('WEBGL_debug_renderer_info'); show(gl, gl, [ 'VENDOR', 'RENDERER', 'VERSION', ]); if (ext) { show(gl, ext, [ 'UNMASKED_VENDOR_WEBGL', 'UNMASKED_RENDERER_WEBGL', ]); } function show(gl, base, params) { for (const param of params) { console.log(param, ':', gl.getParameter(base[param])); } } ,也可以只硬编码数字

对于http://www.deviceinfo.me,您需要确保补丁在所有其他iframe和worker中运行,然后才能运行其他JavaScript。

MultiWorkerStrategy