V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
mthli
V2EX  ›  问与答

Chrome 远程调试是否安全?

  •  
  •   mthli · 2016-06-15 10:37:05 +08:00 · 3810 次点击
    这是一个创建于 3101 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Chrome 远程调试允许你使用 PC Chrome 对 Android Chrome 的网页进行调试,文档如下:

    https://developer.chrome.com/devtools/docs/remote-debugging

    以下是我们喜闻乐见的调试界面:


    远程调试的原理是一套名为 Chrome Debugging Protocol 的协议,只要遵守了这个协议,理论上任何实现都应该可以操纵 Chrome 中的网页。文档如下:

    https://developer.chrome.com/devtools/docs/debugger-protocol


    当你在 Android 上允许 USB 调试以后,打开 Android Chrome ;通过 USB 连接电脑,在 PC Chrome 中输入 chrome://inspect 进入远程调试界面,接着就可以选择你想要调试的网页了。


    如果你电脑上有 adb ,执行如下命令,可以直接在 Android Chrome 中打开百度:

    adb forward tcp:9222 localabstract:chrome_devtools_remote
    curl -v http://127.0.0.1:9222/json/new?http://baidu.com
    

    Android Chrome 在 Android 本地建立了一个 socket ,通过 adb 命令将这个名为 chrome_devtools_remote 的 socket 映射到 PC 对应的 port 上,接着就可以在 PC 中远程调试了。


    那么问题来了,能不能实现一个遵守远程调试协议的 Android App ,访问 chrome_devtools_remote 这个 socket ,去操纵 Android Chrome 中的网页呢?

    如果可以,那么就可以间接地在 Android Chrome 上实现网页插件。或者, App 在后台静默地进行 JS 注入,这样你的密码等信息可能就会被别人知道。

    所以,如果这种方法是有效的,那 Chrome 远程调试是不是很不安全呢?

    9 条回复    2021-07-31 15:17:39 +08:00
    also24
        1
    also24  
       2016-06-15 10:47:00 +08:00
    Google 费尽心机设置了一定要点击 N 次才能进入的开发者选项页面,
    在开启 adb 调试之前又再次提示你如果不懂这是什么功能就别瞎玩儿,
    在没见过的电脑试图连接 adb 的时候又再次提醒你这是个陌生的电脑默认阻止了。

    然后用户们都被各种手机管家诱导着打开了 adb 调试。


    谷歌:怪我 adb 不安全喽?
    also24
        2
    also24  
       2016-06-15 10:50:16 +08:00
    额,抱歉我好像看错了,这个如果在 Android 上进行利用的话,好像可以不经过 adb 就直接使用的样子?
    我要去试试。
    mthli
        3
    mthli  
    OP
       2016-06-15 10:52:40 +08:00
    @also24 主要是端口映射的问题,解决这个问题,你就可以按照协议创建一个 WebSocket ,然后发请求就可以。
    also24
        4
    also24  
       2016-06-15 10:53:29 +08:00
    @mthli 对,我发现了,正在尝试,抱歉之前鲁莽了
    mthli
        5
    mthli  
    OP
       2016-06-15 11:07:09 +08:00
    PC 上的 Chrome 可能也不安全, PC 上的 Chrome 需要添加启动参数才能进入调试模式。

    但如果我偷偷替换掉 Chrome 启动图标,变成带参数的图标呢?也不是不可以。
    mthli
        6
    mthli  
    OP
       2016-06-15 11:51:16 +08:00 via Android   ❤️ 1
    sodaless
        7
    sodaless  
       2016-06-15 13:40:03 +08:00
    在 Android 上创建一个名字以_devtools_remote 结尾的 LocalServerSocket , adbd 会主动 bind 这个 socket ,在 PC 上 adb forward 一下后面就可以建立连接想干啥干啥了, Stetho 就是这个思路
    chen6459
        8
    chen6459  
       2018-09-04 16:12:52 +08:00
    @mthli root 过的手机有权限连接吗?没看懂这代码需要的权限是怎么样的
    qgb
        9
    qgb  
       2021-07-31 15:17:39 +08:00
    @sodaless https://github.com/facebook/stetho

    我 adb forward tcp:9222 localabstract:chrome_devtools_remote 后,为什么 curl -vvvik http://127.0.0.1:9222/json/version
    * Trying 127.0.0.1...
    * TCP_NODELAY set
    * Connected to 127.0.0.1 (127.0.0.1) port 9222 (#0)
    > GET /json/version HTTP/1.1
    > Host: 127.0.0.1:9222
    > User-Agent: curl/7.55.1
    > Accept: */*
    >
    * Recv failure: Connection was reset
    * Closing connection 0
    curl: (56) Recv failure: Connection was reset

    用 chrome://inspect 还是可以看到手机浏览器被调试页面的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5407 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 01:45 · PVG 09:45 · LAX 17:45 · JFK 20:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.