更改浏览器中的导航器以假装已安装该插件(使用 javascript)

Mar*_*ySK 2 javascript navigator google-chrome-extension

我正在尝试做 Chrome 扩展,这会假装安装了一些插件。我试图编辑 navigator.plugins,但这些属性是只读的。我可以添加新项 navigator.plugins[x],但我不知道如何在 navigator.plugins 中创建新的(Plugin、PluginArray 或 MimeType)对象。

甚至有可能吗?

end*_*eit 7

这是一种非常适合欺骗 PluginArray 的方法(注意Object.setPrototypeOf):

(function generatePluginArray() {
  const pluginData = [
    { name: "Chrome PDF Plugin", filename: "internal-pdf-viewer", description: "Portable Document Format" },
    { name: "Chrome PDF Viewer", filename: "mhjfbmdgcfjbbpaeojofohoefgiehjai", description: "" },
    { name: "Native Client", filename: "internal-nacl-plugin", description: "" },
  ]
  const pluginArray = []
  pluginData.forEach(p => {
    function FakePlugin () { return p }
    const plugin = new FakePlugin()
    Object.setPrototypeOf(plugin, Plugin.prototype);
    pluginArray.push(plugin)
  })
  Object.setPrototypeOf(pluginArray, PluginArray.prototype);
  return pluginArray
})()
Run Code Online (Sandbox Code Playgroud)

控制台输出:

在此处输入图片说明

我还没有添加 MimeType 属性,但这应该可以以类似的方式完成。

如果您对此有所了解,请随时提交 PR(我为 puppeteer 开发了一个插件,该插件实现了各种检测规避技术):https : //github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer -extra-plugin-stealth

编辑:我有一些空闲时间并添加了代码来完全模拟navigator.pluginsnavigator.mimeTypes 这里. 它甚至模拟了函数方法、实例类型和 .toString 属性,使它们看起来是原生的并且类似于普通的谷歌浏览器。