一个反常识: 在 Chrome 浏览器里如何拿到用户最真实的 CPU 和其他硬件信息(不走 UA

2024 年 7 月 10 日
 RiverRay

前端老鸟都知道一个常识

谷歌浏览器里面是拿不到真实 CPU 和硬件信息的

(:UA 那个很容易伪造好吧

今天再给你一个反常识:

其实,Chromium 内置了一个系统级插件。

这个插件允许 *.google.com 网站获取宿主机 CPU 信息

去 Chromium 源码里找找,发现插件 ID 是:nkeimhogjdpnpccoofpliimaahmaaome 。

而且,这个插件还能对外通信

so ,骚操作来了

我们可以随便打开一个 Google 的网站在 console 里面输入:

chrome.runtime.sendMessage('nkeimhogjdpnpccoofpliimaahmaaome',
{method: 'cpu.getInfo'},
response => console.table(response));

CPU 、进程还有负载 一五一十的就有了

看源代码,这个内置插件里面还暴露了不少其他方法,可以自己探索玩玩

说人话:

如果你做的是浏览器扩展,完全可以获取到宿主机的 CPU 还有其他硬件信息的

哈哈哈哈哈

32613 次点击
所在节点    Chrome
147 条回复
daidr
2024 年 7 月 10 日
@hez2010 runtime 暴露出去主要是可以给 what's new 或者扩展商店之类的页面用,比如检测扩展安装状态、在 what's new 里帮你改浏览器主题。
LingXingYue
2024 年 7 月 10 日
google.com 可以 google.com.hk 却不行
这是历史遗留代码?还是谷歌一直在偷偷用呢
kylix
2024 年 7 月 10 日
确实可以,google.com 首页 复现成功
Garphy
2024 年 7 月 10 日
有时候可能有点用···
zaizaizai2333
2024 年 7 月 10 日
Marius Karnauskas
@karnauskas

To report CPU/GPU load during Hangouts call - and probably adjust stream quality on the go.

Luca Casonato 🏳️‍🌈
@lcasdev

That’s not the point. The idea is good. The Google only implementation is not.

最后两句中文金句
drymonfidelia
2024 年 7 月 10 日
@satoru HN 上的源链接是昨天发的,OP 是今天的帖,明显是 OP 翻译别人的
SunOfHomeBoy
2024 年 7 月 10 日
chrome.runtime.sendMessage('nkeimhogjdpnpccoofpliimaahmaaome',
{method: 'cpu.getInfo'},
response => console.table(response));

亲测可行!
Akiya
2024 年 7 月 10 日
实测 Edge 在 Mac 上可以复现
piapia
2024 年 7 月 10 日
@0o0O0o0O0o zz 你咋啥都知道. tql
CloveAndCurrant
2024 年 7 月 10 日
opera 也可以复现成功
lixen9
2024 年 7 月 10 日
测试了下,获取的 cpu 信息不对,macos
lixen9
2024 年 7 月 10 日
@lixen9 搞错了.. 查询的是对的
pikko
2024 年 7 月 10 日
@nziu #63 extension 有额外权限能理解(暂且不说有没有控制硬件权限许可),而楼主说的这个,是不装插件,打开谷歌官网就能跳出来的 runtime 对象,妥妥的后门了。
google exlusive 后门
caqiko
2024 年 7 月 10 日
作为一个 Chrome Extension 开发者,我来解释一下:

1. Chromium 为浏览器扩展提供了很多 API ,其中包括 chrome.system.cpu 。这个 API 允许扩展访问 CPU 信息。
2. internal extensions:Google Chrome 自带了一些内部扩展( internal extensions ),如 Google Hangouts 和 PDF 预览功能等。这些扩展可以利用 Chrome 的各种 API 来实现其功能。
3. manifest.json:扩展的 manifest.json 文件是扩展的配置文件,其中定义了扩展的各种权限和行为。Google Hangouts 扩展在 manifest 中声明了相关的权限,以及在哪些页面(*.google.com )可以运行。这解释了为什么只有在*.google.com 页面可以获取。
4. background script:扩展的 background 脚本(如 trunk.js )是在后台运行的,可以持续监听和响应来自页面的消息。
5. message passing:扩展可以使用 chrome.runtime.sendMessage 和 chrome.runtime.onMessage 来实现消息传递。页面脚本 content-script 可以发送消息到 background script ,然后 background script 可以处理这些消息并返回响应。

综上所述,并不是只有 Google 有这个权限,所有的扩展都可以拿到这个功能。

9ki
2024 年 7 月 10 日
@caqiko 题都没读对就来教别人..
sloknyyz
2024 年 7 月 10 日
你说错了一点,没有进程信息,那是处理器核心负载信息。
mizuhokaga
2024 年 7 月 10 日
win11 edge 在 https://www.google.com/
复现成功, 不过我用 Firefox
pikko
2024 年 7 月 10 日
@caqiko #94 题主探讨的是访问谷歌网页就暴露一个 runtime 对象了,都不到安装插件那一步。且只有谷歌有。
也就是谷歌就能看你 cpu 来做数据收集,别的网站不行。
bytewalk
2024 年 7 月 10 日
我已经在尝试着转向 firefox 了
asdjgfr
2024 年 7 月 10 日
厉害了,真能复现,看 chromium 源码应该是 11 年前加的,9 年前改成 google 白名单,在 62 版本就有了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1056113

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX