【问题标题】:Change navigator in browser to pretend, that plugin is installed (with javascript)更改浏览器中的导航器以假装已安装该插件(使用 javascript)
【发布时间】:2016-01-30 08:45:31
【问题描述】:

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

有可能吗?

【问题讨论】:

  • 以与Changing navigator.userAgent using Chrome Extension 类似的方式进行操作怎么样?
  • 我没有问题更改 useragent,因为它是简单的值,但我不确定如何在 navigator.plugins 中创建像 - Plugin、PluginArray 或 MimeType 这样的对象
  • 啊,像var plugin = Object.create(Object.getPrototypeOf(navigator.plugins[0]))一样重用现有对象的原型
  • @wOxxOm 如果我把这个 - link 写到控制台,它会创建类型 Object,它对我没有帮助,因为我需要类型 Plugin link

标签: javascript google-chrome-extension navigator


【解决方案1】:

这是一种非常适用于欺骗 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
})()

控制台输出:

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

请随时提交 PR,以防您充实此内容(我为 puppeteer 开发了一个插件,它实现了各种检测规避技术): https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth

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

【讨论】:

  • 检测无头模式非常容易。假的导航器对象是没用的。
【解决方案2】:

尝试破解它但失败了。显然Plugin 类型不能手动实例化。它按照规范是只读的,Chrome 会相应地实现它 (source code)。可以看到构造函数没有暴露给DOM,所以我们不能使用new Plugin或者其他方法来实例化它。

另一方面,您可以通过<script> 元素尝试injecting the code into webpage,例如,这将用您自己的实现替换整个内置Plugin 类,并使用该假类填充navigator.pluginsPluginArray 同上。

【讨论】:

    猜你喜欢
    • 2019-07-29
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多