Chrome扩展以更改WebGL



我正在为Chrome开发一个扩展,该扩展将根据https://panopticlick.eff.org/results?aat=1&dnt=111#指纹表

我开始使用以下链接中提供的代码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);
};

我的manifestjson非常简单,并且设置为在document_start上运行,它确实这样做了。然而,使用上述扩展,我的WebGL哈希没有区别。我知道扩展中的代码实际上是运行的,因为我已经用一堆小的javascript警报对它进行了测试。

我完全不知所措,已经为这个问题工作了几个小时,但都无济于事,所有的帮助都非常感谢j

编辑:为了完整起见,下面是我的宣言.json

{
"manifest_version": 2,
"name": "JavaScript Injection",
"version": "1.0.0",
"content_scripts": [
{
"matches": ["*://*/*"],
"js": ["injected-javascript.js"],
"run_at": "document_start"
}
]
}

答案是-隔离代码
您可以使用此代码,但它并不完美。我仍在寻找更好的解决方案,因为这个片段取决于页面加载时间。如果按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问题中阅读更多关于这个问题的信息

最新更新