adb的工作原理:
在我们启动PC上的adb.exe进程时,adb会在本地生成一对adbkey私钥和adbkey_pub公钥;
根据弹框提示,可以看出是一对RSA算法的密钥。其中公钥是用来发送给手机的。
当执行adb shell命令时,adb.exe会将当前PC的公钥发送给Android设备;这时,如果android设备上已经保存了这台PC的公钥,则匹配出对应的公钥进行认证。建立adb连接;如果Android上没有保存这台PC的的公钥,则会弹出提示框。让你确认是否允许这台机子进行adb连接。当你点击了允许授权之后,Android就会保存了这台PC的addkey.pub。(这种情况和ssh协议连接client,和server的原理是一样的)
当然有的手机厂商会内置一些adbkey.pub,提供给开发者使用.
密钥在PC和android上分别存储在哪里?
PC:当执行adb.exe文件时,会在当前用户的生成.android目录,其中adbkey和adbkey.pub就在这个目录下(这种思想和linux使用ssh协议的git的如出一辙)。
Android设备上:PC的公钥保存在一个文件中/data/misc/adb/adb_keys
在知道了这个原理之后,你可以在不希望自己的Android设备授权任何PC设备进行adb连接时,清除/data/misc/adb/adb_keys/文件.
也可以在没有屏幕的情况下,让已经认证过的的PC将你PC上的adbkey.pub中公钥导入android设备/data/misc/adb/adb_keys文件中。或者将已经认证过的PC机上的adbkey与adbkey.pub拷贝到本机上覆盖本android设备的adbkey和adbkey.pub。然后重启adb.exe。即可执行adb命令。
欢迎讨论。