Chrome扩展程序更改WebGL

4
我正在开发一个Chrome扩展程序,可以根据https://panopticlick.eff.org/results?aat=1&dnt=111#fingerprintTable中的“WebGL指纹哈希”更改我的指纹。我开始使用以下链接中提供的代码https://intoli.com/blog/making-chrome-headless-undetectable/,将其复制到我的concept.js文件中,该文件如下所示:
const getParameter = WebGLRenderingContext.getParameter;
WebGLRenderingContext.prototype.getParameter = function(parameter) {
  // UNMASKED_VENDOR_WEBGL
  if (parameter === 37445) {
    return 'Intel Open Source Technology Center';
  }
  // UNMASKED_RENDERER_WEBGL
  if (parameter === 37446) {
    return 'Mesa DRI Intel(R) Ivybridge Mobile ';
  }

  return getParameter(parameter);
};

我的清单json非常简单,设置为在文档开始运行,它也确实可以运行。然而,使用上述扩展,我的WebGL哈希值没有任何差别。我知道扩展中的代码实际上是在运行,因为我已经用一堆小的javascript弹出窗口进行了测试。

我完全不知道怎么办,已经花了几个小时来解决这个问题,但毫无进展,非常感谢所有的帮助。

编辑:为了完整起见,以下是我的manifest.json文件。

{
  "manifest_version": 2,
  "name": "JavaScript Injection",
  "version": "1.0.0",

  "content_scripts": [
    {
      "matches": ["*://*/*"],
      "js": ["injected-javascript.js"],
      "run_at": "document_start"
    }
  ]
}
1个回答

1

答案是 - 隔离代码
你可以使用这段代码,但它并不完美。我仍在寻找更好的解决方案,因为这个片段取决于页面加载时间。如果你按下 Shift + Ctrl + C,它会很好地工作,但简单的 Ctrl + C 不行,因为页面加载比间隔开始快。

const getParameter = WebGLRenderingContext.getParameter;
const a = setInterval(() => {
  if (!document.body) {
    return
  }
  clearInterval(a);
  var script_tag = document.createElement('script');
  script_tag.type = 'text/javascript';
  script_tag.text = 'WebGLRenderingContext.prototype.getParameter = function(parameter) {' +
    'if (parameter === 37445) { return "Intel Open Source Technology Center"; };' + 
    'if (parameter === 37446) { return "Mesa DRI Intel(R) Ivybridge Mobile "; }; return getParameter(parameter);' +
  '}';
  document.body.appendChild(script_tag);
}, 1);

阅读更多关于这个问题在这个stackoverflow问题中


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接