Chrome 远程调试是否安全?

2016-06-15 10:37:05 +08:00
 mthli

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 远程调试是不是很不安全呢?

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

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


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

但如果我偷偷替换掉 Chrome 启动图标,变成带参数的图标呢?也不是不可以。
mthli
2016-06-15 11:51:16 +08:00
sodaless
2016-06-15 13:40:03 +08:00
在 Android 上创建一个名字以_devtools_remote 结尾的 LocalServerSocket , adbd 会主动 bind 这个 socket ,在 PC 上 adb forward 一下后面就可以建立连接想干啥干啥了, Stetho 就是这个思路
chen6459
2018-09-04 16:12:52 +08:00
@mthli root 过的手机有权限连接吗?没看懂这代码需要的权限是怎么样的
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 还是可以看到手机浏览器被调试页面的

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

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

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

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

© 2021 V2EX