如何在macOS下伪造chrome.runtime.getPlatformInfo()返回ChromeOS信息?
伪造Chrome扩展的chrome.runtime.getPlatformInfo()返回值
以下两种方案可以优雅地篡改该函数的返回结果,无需批量替换扩展源码:
方法一:利用Chrome DevTools本地覆盖重写函数
这种方法适合临时调试,直接在扩展的运行上下文里修改函数行为:
- 打开目标扩展的后台调试页:进入
chrome://extensions/,开启开发者模式,找到对应扩展,点击「背景页」或「服务工作者」打开DevTools。 - 启用本地覆盖:切换到DevTools的
Sources面板,点击左侧Overrides标签,勾选「Enable local overrides」,选择本地一个空文件夹作为覆盖文件存储目录。 - 保存扩展脚本到本地覆盖:在
Sources面板的Page目录下找到扩展的核心脚本文件,右键选择「Save for overrides」,DevTools会将脚本复制到你指定的本地文件夹。 - 重写getPlatformInfo函数:打开本地保存的脚本文件,在代码最顶部插入以下代码:
// 劫持getPlatformInfo,强制返回ChromeOS标识 const originalGetPlatformInfo = chrome.runtime.getPlatformInfo; chrome.runtime.getPlatformInfo = (callback) => { originalGetPlatformInfo((info) => { info.os = "cros"; callback(info); }); };
- 生效:回到
chrome://extensions/页面,点击扩展的刷新按钮,DevTools会自动加载修改后的本地脚本,扩展调用该函数时会得到os: "cros"的结果。
方法二:通过用户脚本全局注入重写
这种方法无需修改扩展源码,适合长期模拟环境:
- 安装Tampermonkey或Violentmonkey用户脚本管理器。
- 创建新脚本,填入以下代码(替换
<你的扩展ID>为目标扩展的实际ID,可在chrome://extensions/查看):
// ==UserScript== // @name Fake ChromeOS Platform Info // @match chrome-extension://<你的扩展ID>/* // @match *://*/* // @run-at document-start // @grant none // ==/UserScript== if (chrome?.runtime) { const original = chrome.runtime.getPlatformInfo; chrome.runtime.getPlatformInfo = function(callback) { original.call(this, (info) => { info.os = "cros"; callback(info); }); }; }
- 保存脚本后,刷新扩展的页面(包括后台、弹出页等),函数返回值会被篡改。
注意事项
- 方法一的修改仅在DevTools开启覆盖时有效,关闭或清除覆盖后会恢复默认行为。
- 方法二需要确保
@match规则覆盖了扩展的所有运行页面,若扩展使用服务工作者,可能需要额外配置脚本的运行时机。 - 两种方案都需要开启Chrome的开发者模式。
内容的提问来源于stack exchange,提问作者A. Owl
相关产品推荐
相关产品推荐

