Bootstrap

Android adb 调试,不在手机上点击信任 “允许usb调试” 即可连接的方式(手机需root)

前言

不知道大家有没有被这玩意儿困扰过,第一次插上手机进行 adb 调试的时候,总会弹出 “允许usb调试” 的弹窗。

在这里插入图片描述

这手机明明就在我的手上,为什么还要弹出这个信任框呢,这不是多此一举吗?

一个场景:我现在有一台 Android 电视,通过网络 adb 进行连接,但是同一局域网内有不止我自己一台电脑,这时候如果没有这个权限校验,那任何该网络下的设备都可以连接到这个电视,那就保不准会干些什么坏事了。

如何直接信任

本文介绍的方式,有一个非常重要的前置条件,就是手机得有 Root 权限

本文测试电脑 win 10,测试手机 一加7pro OnePlus GM1910 (Android 10)

具体方式:将当前设备上的 adbkey.pub 中的内容放入手机的 adb_keys 文件中(注意:adb_keys 文件的权限&&所属用户/组)。

adbkey.pub 文件路径

linux/mac: ~/.android/adbkey.pub
windows: %USERPROFILE%/.android/adbkey.pub

adbkey.pub(windows) 文件内容示例:

QAAAAG8Hqu5xyByP5u7KnIhZ9J/pS9mMf049HNSvtvPunLDsSlUfSSlymdwA0tSQ9QeOHPW7E+m2cmDbpbHNpzsdpvMY+aBuOIYoiSqFizXPlHC8lms0qeU8rTGgjv4FaKMnzvK5MRuhLjOswDJlB+eEhWVHQTCVTlrxwzRY2rgRYJ/+rcU9NPYnUWiSl6eIZmE2RLPvRxGXPM8pmcY6UxJ/cQ/OHH8OQrKxlSRuq48dFUNKiGcHMW/CJXGbSpTufb+iHZZattArB31uCBvvucYSe5w/cQKqoqsbkGouo1rieTKmeySZzrOQTS71gz0vYyfe9cDTRMyq+GpDfZW/ZecPmh7dvVbNRN39FgKEGgusYfjyuQptUEAImS819RJ8lTF6oWt/2+UkS1BcyqVjvwqF+bhQKZoyE0WZggT4om5vfXlxh1K05iC+64bCKWaE+/NNys0Kv3McJ25qXO32w8GymSSM6SvI8YGOAZwKcQo0F/XzKfDaalksKt500VgrpvDtt4Ot40pus67fXCwxG2tos4bFROru4/Yp9iyb6Gw6E93sG17yqueunzxO7rVyIojrvh9pqCqglHhOtS8i7tEoUiM7NvF/HcWpLxPlWIYPp1GEu3NbY11I3wVrbe077ZyjCf4elmSOKa0E31MO1Gt+nZs2tERP16lO20LQrYomNg8bmz9kHgEAAQA= 用户名@主机名

adb_keys 文件路径

/data/misc/adb/adb_keys

adb_keys 文件内容同 adbkey.pub注意:如果手机信任了不止一台设备,每一行就是信任的设备的 adbkey.pub 中的内容,示例如下:

QAAAAG8Hqu5xyByP5u7KnIhZ9J/pS9mMf049HNSvtvPunLDsSlUfSSlymdwA0tSQ9QeOHPW7E+m2cmDbpbHNpzsdpvMY+aBuOIYoiSqFizXPlHC8lms0qeU8rTGgjv4FaKMnzvK5MRuhLjOswDJlB+eEhWVHQTCVTlrxwzRY2rgRYJ/+rcU9NPYnUWiSl6eIZmE2RLPvRxGXPM8pmcY6UxJ/cQ/OHH8OQrKxlSRuq48dFUNKiGcHMW/CJXGbSpTufb+iHZZattArB31uCBvvucYSe5w/cQKqoqsbkGouo1rieTKmeySZzrOQTS71gz0vYyfe9cDTRMyq+GpDfZW/ZecPmh7dvVbNRN39FgKEGgusYfjyuQptUEAImS819RJ8lTF6oWt/2+UkS1BcyqVjvwqF+bhQKZoyE0WZggT4om5vfXlxh1K05iC+64bCKWaE+/NNys0Kv3McJ25qXO32w8GymSSM6SvI8YGOAZwKcQo0F/XzKfDaalksKt500VgrpvDtt4Ot40pus67fXCwxG2tos4bFROru4/Yp9iyb6Gw6E93sG17yqueunzxO7rVyIojrvh9pqCqglHhOtS8i7tEoUiM7NvF/HcWpLxPlWIYPp1GEu3NbY11I3wVrbe077ZyjCf4elmSOKa0E31MO1Gt+nZs2tERP16lO20LQrYomNg8bmz9kHgEAAQA= 用户名@主机名
QAAAAAtY+nhdjLi3p5OUfrXZVLvJT34oV2mkjzR6OSKadbg2lAFaqOt337+z1eZbXibB9kzGcne5SkDOc/pEi7wLs+z0IOn+pzP1JuxzpFMvbmw0TvqonatLlviQyPQNWe5JAxg3iD6++n0c3mSF7MVBBWecEGcP+iYm8pubpsMwCHnJPor9K/3M2GFV4mOU7rTrJqWyA41Wlr0F2tclt7j2FBG8gRrXHSxes9RdW0tahgDbxw/hTmYxnGwkM2Y4FWw2gR/UNJRxE+rCWB8MkAGpJZcj9vLMHSfZxllswZukzuyKt51ITk+CiKTP/tzd2dJtfno1GHN4seHrft38JnBB2+y2NDPYAS8n0JNFDyPML7g8d7vTmDUlex7Cv3mBBHJu6sSbsnBJ5ABY0K79fQjpK87d9WwIx/u+XSOvyJR3RTTKeC8lJApKspADUuFtUP1cpNLpe6mwWl/74ZmMxmsFone8BVt5IdlcrJyZ8qyHE0e1ROtHfDExQQWwOVT830HjCo15s3b56eeFpUEJt5OBNfO522PFm2pH21aabAT50+XU+gdiDgfhFgpMphyQUdiEtnbztc4K4x0nTkZ8DP6a/7rI0kNMGvDL0/BHIi0gXyNPgJXBYsOIrQPMviQri+EIbRD8yslaiizjJJ4nGYjEk/AROFqiis2f2DL1KIciqdVqNgRmGAEAAQA= 用户名1@主机名1

adb_keys 文件权限

-rw-r-----  1 system shell  716 2025-01-16 10:26 adb_keys

# 当权限或用户不对时需更改
chmod 0640 adb_keys
chown 1000:2000 adb_keys

实际解决的问题

测试使用的 Root 手机比较少,需要做资源调配。

直接人工将手机传来传去,效率太低了,通过部署一台手机调度服务器来动态地做手机的分发(网络 adb 连接)。

在这里插入图片描述

用户将自己的 adbkey.pub 传到服务器,服务器将其写入手机的 adb_keys 文件,当用户不再使用手机时,清理 adb_keys 文件。

这里简单提一下如何进行 adb 网络调试。

  1. 手机和电脑在同一网段,并确保手机已开启“开发者选项”并启动“USB调试”。
  2. 通过 USB 数据线将手机连接至电脑,电脑上执行 adb tcpip 5555(前置步骤,用于打开网络adb调试)。
  3. 任何在该网段下的电脑都可以通过 adb connect <设备IP地址>:5555 进行 adb 网络连接。

usb 调试的信任机制的原理

简单了解一下 usb 调试的信任机制的原理,包括密钥生成与交换、授权管理以及加密通信等环节。

1. 密钥生成与交换

当一台新的计算机尝试通过 adb 连接到 Android 设备时,会经历以下过程:

  • 公私钥对生成:首次连接时,电脑上的 adb 工具会自动生成一对公私钥(位于~/.android/adbkey为私钥,~/.android/adbkey.pub为对应的公钥)。
  • 发送公钥请求:计算机将自身的公钥发送给 Android 设备以请求建立信任关系。
  • 用户确认信任:设备上会弹出一个对话框,询问用户是否信任这台试图连接的计算机。如果用户选择信任,则继续下一步;否则,连接被拒绝。
  • 存储公钥:一旦用户确认信任,设备会将该计算机的公钥存储在其内部的/data/misc/adb/adb_keys文件中。此文件包含了所有已授权计算机的公钥列表。

2. 授权管理

  • 查看已授权设备:虽然普通用户无法直接访问/data/misc/adb/adb_keys文件(除非拥有 Root 权限),但可以通过开发者选项中的“撤销USB调试授权”功能来清除所有授权记录,从而强制下次连接时重新进行信任确认。
  • 手动添加或删除信任:前提时设备具有 Root 权限,可以手动编辑adb_keys文件来添加新的公钥或移除不再信任的计算机。

3. 加密通信

一旦建立了信任关系,所有后续的 adb 通信都将使用之前生成的密钥对进行加密,以确保数据传输的安全性。具体实现如下:

  • 握手协议:在每次连接开始时,设备和计算机之间会执行一次握手协议,验证双方的身份。这个过程中使用了非对称加密技术,确保只有持有正确私钥的一方才能解密另一方发送的信息。
  • 数据加密:除了身份验证外,实际的数据传输也会被加密处理。这意味着即使在网络监听的情况下,攻击者也无法轻易读取或篡改通过 adb 传输的数据内容。
  • 完整性检查:为了进一步提高安全性,系统还会对传输的数据进行完整性检查,防止中间人攻击或其他形式的数据篡改行为。

4. 安全注意事项

尽管 adb 设计了一套较为完善的安全机制,但在使用过程中仍需注意以下几点:

  • 谨慎授予信任:只对可信赖的计算机授予USB调试权限,避免因误信不可靠来源而导致的安全风险。
  • 定期审查授权状态:尤其是对于共享设备或多用户环境,应定期检查并清理不必要的授权记录。
  • 保持软件更新:确保使用的 adb 工具版本是最新的,以便及时获得最新的安全补丁和改进措施。

通过上述介绍,我们可以看出 adbusb 调试信任机制不仅考虑到了便捷性,同时也兼顾了安全性,为用户提供了一个相对安全的开发和测试环境。

总结

本篇介绍了在对 Android 设备进行 adb 调试时,如何默认连接,不弹出“允许usb调试”的信任框。需要手机有 Root 权限,更改手机的 /data/misc/adb/adb_keys 文件可达到目的。

简单阐述了 usb 调试的信任机制的原理,其实就是使用非对称加密密钥来保证数据传输的可靠,通过手动的点击信任来确保设备可靠。

;