V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Get Google Chrome
Vimium · 在 Chrome 里使用 vim 快捷键
RiverRay
V2EX  ›  Chrome

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

  RiverRay · 247 天前 · 26003 次点击
  •   查看本主题需要登录
    这是一个创建于 247 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前端老鸟都知道一个常识

    谷歌浏览器里面是拿不到真实 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 还有其他硬件信息的

    哈哈哈哈哈

    147 条回复    2024-07-22 09:21:14 +08:00
    1  2  
    itakeman
        1
    itakeman  
       247 天前 via Android
    会不会泄露用户数据呢?
    RiverRay
        2
    RiverRay  
    OP
       247 天前
    只能说插件权限不要乱给,谷歌扩展能干的事情蛮多的
    luzemin
        3
    luzemin  
       247 天前
    骚操作
    cslive
        4
    cslive  
       247 天前
    真的是骚操作,有没有办法屏蔽这个东西
    MrSheng
        5
    MrSheng  
       247 天前


    的确可以,有点厉害。
    vueli
        6
    vueli  
       247 天前
    学到了,好骚
    0o0O0o0O0o
        7
    0o0O0o0O0o  
       247 天前 via iPhone   ❤️ 3
    PhosphorLin
        8
    PhosphorLin  
       247 天前   ❤️ 14
    “不作恶”
    shuax
        9
    shuax  
       247 天前   ❤️ 56
    only *.google.com can do
    ersic
        10
    ersic  
       247 天前   ❤️ 1
    新的恶龙
    geelaw
        11
    geelaw  
       247 天前   ❤️ 3
    这件事情的幽默之处在于 MS Edge 也给 google.com 高权限。来源是 https://x.com/lcasdev/status/1810753964020773316 但我没有验证
    drymonfidelia
        12
    drymonfidelia  
       247 天前 via iPhone   ❤️ 1
    所以说浏览器插件能不装尽量不装,小公司、个人开发者的必须亲自审核代码后禁用更新不然大概率被卖掉
    nealHuang
        13
    nealHuang  
       247 天前
    m2pro 执行报错

    Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.
    EspoirBao
        14
    EspoirBao  
       247 天前
    @nealHuang 好像是带尾缀的不行,只从浏览器端判断 google.com 结尾的
    AlexMeng
        15
    AlexMeng  
       247 天前
    试了一下,chrome 和 edge 都可以
    Ritter
        16
    Ritter  
       247 天前
    666
    Felldeadbird
        17
    Felldeadbird  
       247 天前
    6 ,真的可以。骚啊。
    0x90200
        18
    0x90200  
       247 天前
    骚的一批
    elboble
        19
    elboble  
       247 天前
    国内用户安全了:-:
    Ghostsss
        20
    Ghostsss  
       247 天前   ❤️ 2
    只有*.google.com 才可以,.hk 就不行了。看来这几个知名公司,没一个好的。
    w568w
        21
    w568w  
       247 天前
    Only Google Can Do!

    这是给 Firefox 送子弹啊
    qinjiang
        22
    qinjiang  
       247 天前
    试了下可以复现,谷歌好样的!
    aqqwiyth
        23
    aqqwiyth  
       247 天前   ❤️ 2
    这个插件的申明.
    https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/resources/hangout_services/manifest_v2.json;l=1;drc=b0b102b6582fe1fca4a5eb6b156f198113674ec7

    源码的解析
    https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/resources/hangout_services/thunk.js

    ...
    if (method === 'cpu.getInfo') {
    chrome.system.cpu.getInfo(doSendResponse);
    return true;
    }
    ...

    chrome 本质上是 C++写的 很早以前还支持 C++的扩展安装 , 有条件可以看看 chromimu 的源码.
    Greendays
        24
    Greendays  
       247 天前
    chrome os 好像就是可以获取到性能信息的,也是在浏览器上显示。不知道有没有关系。
    wst
        25
    wst  
       247 天前
    Arc 浏览器也可以,这是放到内核里了吗...
    Cooky
        26
    Cooky  
       247 天前   ❤️ 1
    看来确实得切换到 ungoogled-chromium
    proxytoworld
        27
    proxytoworld  
       247 天前
    看代码 2013 年就写了
    clifftts
        28
    clifftts  
       247 天前
    收集客户端硬件信息,为了干啥
    body007
        29
    body007  
       247 天前   ❤️ 1
    我测了下,只能在访问*.google.com 网址时在控制台能成功,其他域名不行。
    registerrr
        30
    registerrr  
       247 天前
    TypeError: Cannot read properties of undefined (reading 'sendMessage')

    Google 首页,Gmail 都没成功
    lifei6671
        31
    lifei6671  
       247 天前
    @geelaw 证实了,edge 浏览器也可以用这种方式后去 CPU 信息。😂
    cheneydog
        32
    cheneydog  
       247 天前
    试了 chrome 和 edge 可以,360 极速不行。
    HFX3389
        33
    HFX3389  
       247 天前
    @drymonfidelia #12 但这是 Chrome 自带的,你装不装插件它都在
    71oG4t5Zq6Bgx4tE
        34
    71oG4t5Zq6Bgx4tE  
       247 天前
    没复现出来。。。
    HFX3389
        35
    HFX3389  
       247 天前
    @registerrr #30 你的 Google 首页是不是带后缀的?这个只接受.com 后缀的,不能带其他的
    HK560
        36
    HK560  
       247 天前
    edge 也是生效的
    opengps
        38
    opengps  
       247 天前
    插件远比网页的级别高,毕竟直接用了本地环境运行,可调用资源甚至接近浏览器的级别,算是一种客户端应用
    gongquanlin
        39
    gongquanlin  
       247 天前
    google.com 可以,google.com.hk 不可以,哈哈哈
    dufu1991
        40
    dufu1991  
       247 天前
    @daba 记得 ncr ,不然会跳转到非 google.com
    D33109
        41
    D33109  
       247 天前
    观察下来在 2013 年貌似就有这个插件了?
    drymonfidelia
        42
    drymonfidelia  
       247 天前
    @lifei6671
    @geelaw edge 不奇怪,毕竟 edge 是完全不管隐私保护的浏览器 /t/1000852
    但是我用最新版 Brave 也复现了,这可是以隐私保护为最大卖点的浏览器
    71oG4t5Zq6Bgx4tE
        43
    71oG4t5Zq6Bgx4tE  
       247 天前
    dode
        44
    dode  
       247 天前
    差,谷歌给自己信息收集开后门
    Jessec
        45
    Jessec  
       247 天前
    哈哈,但我用 firefox
    unique0lai
        46
    unique0lai  
       247 天前
    @clifftts 大型广告公司恨不得搜集你的所有衣食住行数据,然后拿去给你做用户画像,最后拿去卖广告或是做金融服务。。。
    zhangdp
        47
    zhangdp  
       247 天前
    只能在 google.com 网页下获取,又有何用
    geelaw
        48
    geelaw  
       247 天前 via iPhone
    @drymonfidelia #42 和 Edge 保护不保护隐私没啥关系,觉得幽默是因为通常会假设 MS 会把各种 Google 专有的东西删除或者换成 MS 专有的。

    @zhangdp #47 对 Google 有用。
    RiverRay
        49
    RiverRay  
    OP
       247 天前   ❤️ 1
    @zhangdp 任何浏览器插件,只要申明 google.com 的的权限,都可以获取~(:这个操作你是无感的
    chenliangngng
        50
    chenliangngng  
       247 天前
    @zhangdp 当你安装插件,大概率是挂梯子走谷歌官方的插件中心,这个时候安装完插件已经拿到你所有数据了。这些硬件数据拿一次就可以了
    cnt2ex
        51
    cnt2ex  
       247 天前
    试了一下 ungoogled chromium 无法获取,chrome/brave 可以。
    siteshen
        52
    siteshen  
       247 天前
    又一个支持逃离 Google 的论据:

    google.com -> duckduckgo.com
    Google Chrome -> Mozilla Firefox
    atuocn
        53
    atuocn  
       247 天前   ❤️ 1
    edge 也有🤣,edge://extensions-internals/ 可以发现更多
    zaizaizai2333
        54
    zaizaizai2333  
       247 天前   ❤️ 3
    @proxytoworld 果然证明,开源并不等于有人看。

    这有啥,我们的 iOS 的 App 不需要任何权限,就能知道手机机型和手机颜色呢。

    你 Chrome 再牛逼能知道我的电脑的颜色吗?
    Reficul
        55
    Reficul  
       247 天前
    @aqqwiyth #23

    emmm, Google Hangouts 都被关掉了,这个插件还遗留着呢...
    ysc3839
        56
    ysc3839  
       247 天前 via Android
    @geelaw 属于是 100% backdoor-for-backdoor compatible 了
    satoru
        57
    satoru  
       247 天前
    https://news.ycombinator.com/item?id=40918052
    报告,有人翻译了你的发现发到 Hacker News 上去了
    showgood163
        58
    showgood163  
       247 天前   ❤️ 1
    ungoogled chromium 没有成功,提示

    VM252:1 Uncaught TypeError: Cannot read properties of undefined (reading 'sendMessage')
    at <anonymous>:1:16
    showgood163
        59
    showgood163  
       247 天前
    检查 chrome://extensions-internals/ 没有发现名称为 nkeimhogjdpnpccoofpliimaahmaaome 的插件
    dante9
        60
    dante9  
       247 天前
    zhangdp
        61
    zhangdp  
       247 天前
    @RiverRay 申明 google.com 权限不需要打开 google.com 网站就能执行?另外插件自己本身就可以调用"system.cpu"API 可以获取 cpu 等信息了。
    blubzz
        62
    blubzz  
       247 天前
    那么类如 360 自家的浏览器的,访问特定的网站是不是也可以获取了?
    nziu
        63
    nziu  
       247 天前   ❤️ 1
    这不是一个公开的 api ?,也别说什么开源并不等于有人看,这代码截图都贴上了不也没人看。
    https://developer.chrome.com/docs/extensions/reference/api/system/cpu?hl=zh-cn
    zeR0f1re
        64
    zeR0f1re  
       247 天前   ❤️ 2
    @nziu 这个是插件的权限,问题是我没安装 google 的插件,它凭什么没通知就获取我的权限
    SkywalkerJi
        65
    SkywalkerJi  
       247 天前
    in Microsoft Edge this capability is also available exclusively to *.google.com domains

    厉害了微软
    lc4t
        66
    lc4t  
       247 天前
    Arc 也是可以的
    webbillion
        67
    webbillion  
       247 天前   ❤️ 1
    63 楼是谷歌不作恶的坚决维护者?
    hez2010
        68
    hez2010  
       247 天前
    @SkywalkerJi edge 用的也是 chromium 内核,如果 ms 压根都不知道这个 api 的存在的话,自然也保留着 chromium 默认的行为。
    9ki
        69
    9ki  
       247 天前
    之前发帖子说 google 屏蔽疑似主动屏蔽某些搜索结果还被爱自由人士喷了呢 /1055707 某些人被洗脑的太严重了..
    Biggoldfish
        70
    Biggoldfish  
       247 天前
    你都装了 Chrome 了 Google 要收集你硬件信息搞用户画像的话直接用 Chrome 读取上传不就完了,搞个插件只对 google.com 生效然后等着用户访问网页再去读取上传?
    codehz
        71
    codehz  
       247 天前
    @Biggoldfish 这里的问题是给 google meets 提供了竞争优势,其他基于网页的在线会议软件都没法通过这个来获取 cpu 信息来调试错误
    SkywalkerJi
        72
    SkywalkerJi  
       247 天前   ❤️ 3
    @hez2010 #68 证明了大家搬项目时并不会把代码都看一边,也不会全局替换上家的名字
    cat9life
        73
    cat9life  
       247 天前
    同样,chrome 和 edge 都复现成功
    skadi
        74
    skadi  
       247 天前
    在 g 的首页复现成功.
    kkocdko
        75
    kkocdko  
       247 天前
    using ungoogled-chromium

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

    VM62:1 Uncaught TypeError: Cannot read properties of undefined (reading 'sendMessage')
    at <anonymous>:1:16
    rdZZZ
        76
    rdZZZ  
       247 天前
    https://developer.chrome.com/docs/extensions/reference/api/system/cpu#type-CpuInfo

    这 API 不是早就有了,不光 cpu ,显示器、内存、存储都能查,也就是说任何 chrome 扩展都有能力拿到,只是 google 恰好把它给暴露出去了
    IDKAFK
        77
    IDKAFK  
       247 天前
    @satoru HN 上的来源不是那条推文吗?昨晚发布的
    boywang004
        78
    boywang004  
       247 天前
    Version 126.0.6478.127 (Official Build) (arm64)

    复现成功,可以可以。

    ```
    value
    :
    archName
    :
    "arm64"
    features
    :
    []
    modelName
    :
    "Apple M2 Max"
    numOfProcessors
    :
    12
    processors
    :
    (12) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
    temperatures
    :
    []
    [[Prototype]]
    :
    Object
    ```
    daidr
        79
    daidr  
       247 天前   ❤️ 1
    如果是扩展,本身 chrome 就提供了 cpu.getInfo 方法让你拿到完整的 CPU 信息

    如果是网页,只有 google 自己的白名单域名会注入 chrome.runtime ,其他网页你怎么搞都不可能拿到这玩意
    Johnathan
        80
    Johnathan  
       247 天前
    @kkocdko 我也是这个报错!没有成功
    daidr
        81
    daidr  
       247 天前   ❤️ 1
    @hez2010 runtime 暴露出去主要是可以给 what's new 或者扩展商店之类的页面用,比如检测扩展安装状态、在 what's new 里帮你改浏览器主题。
    LingXingYue
        82
    LingXingYue  
       247 天前
    google.com 可以 google.com.hk 却不行
    这是历史遗留代码?还是谷歌一直在偷偷用呢
    kylix
        83
    kylix  
       247 天前
    确实可以,google.com 首页 复现成功
    Garphy
        84
    Garphy  
       247 天前
    有时候可能有点用···
    zaizaizai2333
        85
    zaizaizai2333  
       247 天前
    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
        86
    drymonfidelia  
       247 天前 via iPhone   ❤️ 1
    @satoru HN 上的源链接是昨天发的,OP 是今天的帖,明显是 OP 翻译别人的
    SunOfHomeBoy
        87
    SunOfHomeBoy  
       247 天前
    chrome.runtime.sendMessage('nkeimhogjdpnpccoofpliimaahmaaome',
    {method: 'cpu.getInfo'},
    response => console.table(response));

    亲测可行!
    Akiya
        88
    Akiya  
       247 天前
    实测 Edge 在 Mac 上可以复现
    piapia
        89
    piapia  
       247 天前
    @0o0O0o0O0o zz 你咋啥都知道. tql
    CloveAndCurrant
        90
    CloveAndCurrant  
       247 天前
    opera 也可以复现成功
    lixen9
        91
    lixen9  
       247 天前
    测试了下,获取的 cpu 信息不对,macos
    lixen9
        92
    lixen9  
       247 天前
    @lixen9 搞错了.. 查询的是对的
    pikko
        93
    pikko  
       247 天前
    @nziu #63 extension 有额外权限能理解(暂且不说有没有控制硬件权限许可),而楼主说的这个,是不装插件,打开谷歌官网就能跳出来的 runtime 对象,妥妥的后门了。
    google exlusive 后门
    caqiko
        94
    caqiko  
       247 天前   ❤️ 8
    作为一个 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
        95
    9ki  
       247 天前   ❤️ 1
    @caqiko 题都没读对就来教别人..
    sloknyyz
        96
    sloknyyz  
       247 天前
    你说错了一点,没有进程信息,那是处理器核心负载信息。
    mizuhokaga
        97
    mizuhokaga  
       247 天前
    win11 edge 在 https://www.google.com/
    复现成功, 不过我用 Firefox
    pikko
        98
    pikko  
       247 天前   ❤️ 1
    @caqiko #94 题主探讨的是访问谷歌网页就暴露一个 runtime 对象了,都不到安装插件那一步。且只有谷歌有。
    也就是谷歌就能看你 cpu 来做数据收集,别的网站不行。
    poorcai
        99
    poorcai  
       247 天前 via Android
    我已经在尝试着转向 firefox 了
    asdjgfr
        100
    asdjgfr  
       247 天前
    厉害了,真能复现,看 chromium 源码应该是 11 年前加的,9 年前改成 google 白名单,在 62 版本就有了
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5526 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 09:03 · PVG 17:03 · LAX 02:03 · JFK 05:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.