2 Вопрос: Как дать поддельную информацию о GPU на сайт

вопрос создан в Thu, May 2, 2019 12:00 AM

Мне нужно создать веб-браузер, используя CefSharp.Wpf с возможностью предоставлять поддельные данные на сайт, например, ядра процессора, плагины браузера, название платформы и т. д. Есть сайт, который может получить всю эту информацию: https://www.deviceinfo.me/

Мой вопрос: как скрыть информацию о GPU с этого сайта? Использование функций JavaScript или CefSharp

Я попытался переопределить метод WebGLRenderingContext.getParameter, который предоставляет информацию о графическом редакторе и поставщике графического процессора:


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

    
0
2 ответа                              2                         

Если вы по-прежнему хотите, чтобы Canvas2D и WebGL все еще работали, вы не сможете скрыть их, поскольку они могут отсканировать отпечатки пальцев путем рендеринга.

Вы можете отключить их с помощью

HTMLCanvasElement.prototype.getContext = function() {
  return null;
};

Хотя тот факт, что они не существуют, также является точкой данных.

В противном случае ваша оболочка, похоже, имеет некоторые проблемы.

Сначала вам действительно нужно установить функцию перед созданием контекста.

Во-вторых, ваша последняя строка должна быть

   oldParam.call(this, parameter);

Также вы не показывали debugInfo, но вместо этого вы можете использовать WebGLRenderingContext или просто жестко закодировать числа

Что касается http://www.deviceinfo.me , вам нужно убедиться, что ваш патч работает во всех фреймы и рабочие перед любым другим JavaScript.

р>

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]));
  }
}
    
    
1
2019-05-03 00: 33: 02Z
  1. Это помогло, спасибо!
    2019-05-05 19: 47: 27Z

Существует WebGLRenderingContext и WebGL2RenderingContext

    
1
2019-05-02 18: 01: 17Z
  1. Я пытался их использовать, но я не знаю, как заставить их выдавать поддельную информацию о графическом процессоре
    2019-05-02 18: 10: 41Z
  2. То, как вы его реализовали, работает нормально, если вы либо: затеняете метод getParameter метода WebGL2RenderingContext , либо запросите контекст "webgl" 1.
    2019-05-02 18: 54: 21Z
источник размещен Вот