一.过程概述:
1. 当HOST端连接Android机时。Android机向HOST端发送AUTH TOKEN(1)类型的AUTH报文消息[41 55 54 48 01]
请求认证,其中包含源自Android机 /dev/urandom 的20字节的随机token。
2. HOST端用自己的私钥对该随机token进行签名(SHA1+RSA),
回送ADB_AUTH_SIGNATURE(2)类型的AUTH报文消息[41 55 54 48 02]到Android机。
3. Android机检查签名,如果正确,响应以CONNECT报文,否则向HOST端发送新的AUTH TOKEN(1)类型
报文消息[41 55 54 48 01],其中数据部分提供新的随机token。
4. HOST端可以尝试另一组公私钥对。如果HOST端已经尝试完所有公私钥对,
则向Android机回送AUTH RSAPUBLICKEY(3)类型报文消息[41 55 54 48 03],包含一个HOST端公钥。
5.Android机端的adbd将HOST端的公钥发往framework层,后者弹出信息框,询问是否允许(或永久允
许)HOST端使用USB调试接口,该信息框中一般会显示HOST端公钥的指纹(MD5),而不是HOST端公钥本身。
二. BUS Hound工具截取的鉴权过程数据记录:
1. Android端向HOST端发送AUTH:
DEX数据 数据描述
41 55 54 48 01 00 00 00 AUTH....[type = 0x01]
00 00 00 00 14 00 00 00 ........ [arg1=0 ;data_length=0x14]
1f 09 00 00 be aa ab b7 ........ [checksum:0x0000091f ;magic=0xb7abaabe]
57 37 19 9a 95 70 e5 e6 W7...p.. [后跟长度为20的TOKEN数据]
1a c9 41 30 2d 2b 6e 75 ..A0-+nu
71 6e b1 ef qn..
2. HOST端向Android端回送SIGNATURE的AUTH:
DEX数据 数据描述
41 55 54 48 02 00 00 00 AUTH.... [type = 2]
00 00 00 00 00 01 00 00 ........ [arg1=0 ;data_length=0x0100]
43 85 00 00 be aa ab b7 C....... [checksum:0x00008543 ;magic=0xb7abaabe]
48 53 03 de e5 1b 76 89 HS....v. [后跟长度为256的SIGNATURE数据]
58 87 70 3f af 78 76 38 X.p?.xv8
f9 bd 37 0d 21 b3 bf e0 ..7.!...
bb 3b cc 06 3c b6 6f 68 .;..<.oh
93 0d 51 ff 58 42 6c ea ..Q.XBl.
92 cf ed 52 05 94 78 00 ...R..x.
fe d6 56 d0 b6 5f fa 50 ..V.._.P
55 04 14 44 23 fb ec cb U..D#...
be 27 3b 6a aa f0 10 cd .';j....
00 95 51 a9 6d a1 0b a0 ..Q.m...
b6 f3 57 41 8f d3 00 d4 ..WA....
f2 04 bd 96 e9 1d 03 bd ........
72 e2 d1 f8 6b bc 1b 38 r...k..8
83 16 4d c0 b4 5f df 86 ..M.._..
b0 62 a9 70 b7 3e c2 4d .b.p.>.M
b3 8c a6 b6 0f c9 ba f6 ........
17 45 92 6a 01 84 80 da .E.j....
61 a5 da 4f cf ef 15 99 a..O....
8a ed 31 76 d1 46 c1 43 ..1v.F.C
89 16 76 e8 43 6e 67 c9 ..v.Cng.
20 ba 9d 97 82 9f d9 4b ......K
e8 c3 a1 9d c5 03 b5 05 ........
73 20 81 8d ca 92 73 e9 s ....s.
0a 4d a7 f8 34 87 b0 d4 .M..4...
53 f5 eb c6 2b 35 fd f0 S...+5..
84 8f 5f f0 8d c6 c9 31 .._....1
2b 6c db c0 df 5e a9 20 +l...^.
c3 69 e1 fc d1 e6 37 e4 .i....7.
e2 66 39 4b 50 21 4b 59 .f9KP!KY
f4 ef 40 5f de 61 17 f0 ..@_.a..
b8 72 72 5a 3d 99 8e 92 .rrZ=...
8f 42 23 39 78 d1 7d 5c .B#9x..\
3.Android端向HOST端发送新的AUTH数据:
DEX数据 数据描述
41 55 54 48 01 00 00 00 AUTH....[ type = 1]
00 00 00 00 14 00 00 00 ........
a7 07 00 00 be aa ab b7 ........
a2 0a ea c0 32 0b 1a 30 ....2..0
7e e4 0b 0d 3f 30 bb 56 ....?0.V
19 35 f8 8a .5..
4.HOST端向Android端回送RSAPUBLICKEY的AUTH数据:
DEX数据 数据描述
41 55 54 48 03 00 00 00 AUTH....[ type = 3]
00 00 00 00 cd 02 00 00 ........
88 ef 00 00 be aa ab b7 ........
51 41 41 41 41 4e 74 4a QAAAANtJ
6c 6f 32 74 64 62 33 42 lo2tdb3B
4e 44 47 6c 58 67 50 58 NDGlXgPX
53 71 6e 4f 76 6f 59 61 SqnOvoYa
76 79 64 46 76 6f 74 52 vydFvotR
32 69 46 62 61 64 39 4b 2iFbad9K
46 55 4c 47 58 46 6e 31 FULGXFn1
68 53 45 50 45 65 51 4b hSEPEeQK
54 67 51 6e 37 74 2f 6b TgQn7t/k
37 49 47 54 70 46 32 6d 7IGTpF2m
59 62 77 32 43 77 70 42 Ybw2CwpB
6c 36 67 6e 45 36 52 42 l6gnE6RB
37 79 59 70 70 58 4a 6a 7yYppXJj
58 37 74 35 4b 32 44 6e X7t5K2Dn
36 2f 6f 32 2b 62 33 4b 6/o2+b3K
32 5a 70 71 50 78 76 63 2ZpqPxvc
70 68 61 77 32 41 44 32 phaw2AD2
62 45 6d 38 50 30 36 36 bEm8P066
5a 4d 4d 72 74 39 52 34 ZMMrt9R4
57 6f 4c 47 62 58 50 49 WoLGbXPI
61 77 33 43 7a 37 6d 6e aw3Cz7mn
79 38 45 4f 6d 38 68 55 y8EOm8hU
69 6c 66 56 6e 7a 49 42 ilfVnzIB
77 32 4b 4d 30 47 54 76 w2KM0GTv
70 69 72 4f 51 48 7a 37 pirOQHz7
38 6c 4f 55 71 30 72 61 8lOUq0ra
57 6f 66 2f 35 46 58 33 Wof/5FX3
32 34 5a 78 65 41 63 35 24ZxeAc5
61 55 79 53 62 65 46 41 aUySbeFA
59 53 74 46 4e 6c 53 61 YStFNlSa
73 68 4c 4e 6a 44 45 69 shLNjDEi
62 38 66 70 31 6d 49 79 b8fp1mIy
62 61 54 62 61 6a 4e 56 baTbajNV
64 66 6a 6e 61 48 31 66 dfjnaH1f
43 73 35 76 64 65 58 39 Cs5vdeX9
4c 7a 74 44 68 62 48 37 LztDhbH7
36 39 47 59 75 32 73 34 69GYu2s4
57 31 68 6b 34 5a 49 35 W1hk4ZI5
2b 7a 51 76 36 7a 37 72 +zQv6z7r
4d 4c 63 63 61 41 6a 44 MLccaAjD
30 44 76 55 67 42 4e 4f 0DvUgBNO
31 49 42 30 78 70 63 57 1IB0xpcW
77 4e 67 64 6c 5a 59 69 wNgdlZYi
48 38 74 46 31 4a 69 32 H8tF1Ji2
73 71 69 37 67 64 31 55 sqi7gd1U
4b 77 50 57 2f 47 53 43 KwPW/GSC
63 65 55 79 4f 6b 57 58 ceUyOkWX
75 6b 7a 5a 47 63 59 42 ukzZGcYB
42 7a 50 6a 77 56 64 36 BzPjwVd6
61 55 53 32 6a 63 57 56 aUS2jcWV
70 4c 49 63 35 56 4c 37 pLIc5VL7
64 41 36 64 75 55 57 61 dA6duUWa
76 38 6d 2f 6a 4e 6b 2b v8m/jNk+
4c 2b 50 36 48 6a 45 57 L+P6HjEW
35 79 56 42 31 73 72 53 5yVB1srS
6e 44 7a 65 76 2f 33 6c nDzev/3l
57 32 6e 55 7a 65 4e 47 W2nUzeNG
71 56 39 70 76 41 41 36 qV9pvAA6
33 7a 54 6e 6b 6e 68 51 3zTnknhQ
79 6f 6f 33 43 30 32 53 yoo3C02S
7a 69 47 64 31 46 7a 2f ziGd1Fz/
35 54 47 30 38 2f 6d 36 5TG08/m6
71 42 54 4e 4a 30 70 42 qBTNJ0pB
4e 46 63 4a 59 4d 35 56 NFcJYM5V
三. 鉴权部分原理概述:
Android机端保存密钥的路径:
key_paths =
"/adb_keys",
"/data/misc/adb/adb_keys"
HOST端SIGNATURE过程:
[以 HOST端本地keylist中的私钥key值 和 Android端发来的TOKEN值为输入,
进行RSA_sign计算,即以HOST端的私钥对TOKEN进行签名],并将签名后的数值返回Android端;
Android端接收到上述签名数据后,调用RSA_verify计算认证过程是否成功;
如果不成功,Android再次发送带新TOKEN的AUTH信息给HOST;
HOST端如果没有已经可用的私钥,则调用send_auth_publickey,返回公钥给Android端;
综上所述:如果usb host芯片厂商无法提供私钥签名算法RSA_sign(),是否可以回复默认数值后,
再返回模拟的公钥数据给Android端?