|
很多人问我会不会破解QQ密码,我的回答很明确:不会。因为腾讯的服务器已经相当完善,并没有留下多少漏洞让我们发现。而且,能发现这种漏洞的的人一般都在美国国家安全局,不会有兴趣去破解QQ密码。可是最近发生的事情让我迟疑了,于是我查资料,抓包分析了QQ的登录过程,整个认证过程滴水不漏。下面是我做的一张登陆过程图,以及几个比较重要的数据包。希望有志之士能在我基础上继续完成我的工作。- e3 D/ g. X/ O4 o2 K7 j
/ G3 x: H1 |; B* @/ z2 `整个登录过程大部分数据包均使用UDP协议,端口分别用到了8000、80和443。
( i$ _2 N3 w# E$ `$ `
$ m4 D3 g2 V5 }& y2 h2011010521460421
1 {8 n9 Y7 x: R# ~- o9 a3 P! k e n. S
1. 0×0091 Touch包
]4 x: L, l3 F: z$ t5 ]! G1 K" q. e+ ?9 G9 X* v
Touch包是QQ客户端登录时向服务器发送的第一个数据包,作用是测试远程服务器的链路状态,通过多次抓包发现,对于不同的QQ,认证的服务器是不一样的。会员与非会员之间有差别,不同地区之间也有差别。在对QQ客户端的回应数据包中,如果所连接的服务器不对该QQ号码提供服务,则会返回另外一个服务器地址,让客户端重新连接认证。
2 K) h2 E* e) `0 Q& u3 n, E7 H- e s$ `. W% B. H$ B( v+ z
0×0091发送包:% ]7 H) @& y- l3 z# `! N
0 b$ G! S* M2 u' E02 1E 07 00 91 5B B8 04 EE D4 E9 02 00 0000 01
% \$ _) [5 F( j. K- d7 x01 01 00 00 64 2F 6A 84 FA 78 CC 16 51 86 A7 B8
6 T$ o8 o" Z3 z/ r* C1C 55 E8 29 6B C8 50 95 FB 5A CE E8 6C 89 0A C9( R5 ~7 C$ u6 k9 w6 {, l
83 D0 68 51 DB 6E D1 93 C1 32 11 9B 84 13 EF 7D
" k3 N! ]0 E% _' D4B 55 8C 08 6C F3 F0 5F 11 16 26 E4 00 68 0D 98( _# t# D$ B1 t2 n/ H9 A2 u( L
02 BC 06 B9 4E E2 032 s; s" v& o4 N& ?% W
) \6 t+ O' }' p0 G" e9 B+ U02 //包头
6 w! D2 c3 l. x% H) I: D, w1E 07 //版本号
/ }6 k& |+ i' `: i( i' b, U: m00 91 //命令& n5 m- f; b/ Q% m0 T* f7 E
5B B8 //包序号
# m8 ]6 _% V; N# e" |6 e04 EE D4 E9 //QQ号码***2 {! K4 @" C4 r* F+ D8 ]
02 00 00 00 01 01 01 00 00 64 2F //固定,QQ版本号不同则不同/ z: w2 _% a9 [
6A 84 FA 78 CC 16 51 86 A7 B8 1C 55 E8 29 6B C8 //0x91密钥
( \, C0 |3 j! u Z00 01 //固定两字节! z, r. w- u" ~4 D( G2 G: t2 @, ?
00 00 08 04 01 E0 //0091Data01(在后面的命令里面要用到的)8 H) A$ K* A) \$ _& E l
00 00 03 20 00 00 00 01 00 00 0B BF //0091Data02(在后面的命令里面要用到的)
5 D1 G7 O6 I' B: r8 j! @00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 //首次发送为15字节05 B% [$ g: X0 }1 {- `* A
03 //包尾( C, W! l" s3 L2 j: L, Q- w" a
) h: ^% J* e1 F5 [) _* x
0×0091接收包:
4 `) G |6 z/ L0 f
; y( }* k4 P3 z" P$ n5 ?2 H# r$ Q% J02 1E 07 00 91 5B B8 04 EE D4 E9 00 00 00C0 EB/ I! u0 m2 R' c% O6 Y
D0 BF C5 F9 E1 F2 C9 51 9D 3B 26 07 B5 AD 46 49
0 j3 W: E5 P0 T8 s1 y' c# I. \49 C4 49 D7 69 36 9E 11 8E 24 2E A1 B3 AB 90 CE
( P- w3 d; N9 y! uCA 38 C9 99 94 8E 0A 41 03 EB AC E7 C6 BA 34 FD
4 L9 l: r+ z" P l/ y64 9E E7 4B 3D 24 6F 44 0A 77 80 69 96 91 0C 00) [0 t3 d% Z0 a O0 f4 J! T8 M
87 6B 51 25 E5 15 9F E3 54 6E B8 C6 1D 5F DE 406 E5 ?) h3 y5 ]* Q& z4 W9 n) M
54 BB D8 0C 36 8D 03% E7 @ U2 a- r& d4 P1 L
6 y# j& K1 }1 @( F: s# I3 w02 //包头
3 @5 }- {/ |; [( g. q1E 07 //版本号
7 _' `2 l1 Q' N8 ~00 91 //命令
Y: `& _7 k0 a* s& g2 t5B B8 //包序号
% l! D( K# r% i; J# j' L9 n9 b( a- P04 EE D4 E9 //QQ号码***
0 f9 S5 Z, @; {3 S% d- Y00 00 00 //固定全为02 g7 H0 `9 j \
00 //接触成功+ }8 Q- O3 F" w0 l& j
4D 16 07 CC //登录时间:2010-12-25 23:03:40
, J+ b$ O% B. ?% H/ Y" ~, J7D 47 C8 04 //登录IP地址:125.71.200.4! O( G b) {5 ~2 d3 N0 B
00 00 00 00 00 00 00 00 //固定8字节0
3 w9 ^7 T6 q9 R5 i m00 38 //0091_Token长度:56字节6 j/ m0 D* o( z' I: a. T
6E F0 FB 35 5F 8E 65 0F 77 E7 A7 D0 AE 69 8C 4D) `/ |. M2 F' E9 l5 y( l
EF 43 41 89 BB 79 9C B9 B5 0C 4C 86 5E 8D A0 CB7 r7 o# o; Y3 [
84 D7 66 69 CF 63 E9 0D 80 48 F4 E6 C1 30 A7 88
) g, M0 D9 d; G7E B0 68 0A E6 8C FC D4
6 m7 Y6 A+ {' M6 ~00 //接触成功
3 T7 K9 `3 U$ j. T; |03 //包尾
) }6 U& P% p' W! R. a0 ^. g- f- W0 @
8 Z# E6 f2 v9 f0x00BA获取验证码7 ^; ?) ^- l2 b% Q4 ?
5 q, D7 v- j+ q1 W& o如果客户端向服务器发送的数据中,被服务器检测到异常,比如异地登陆,正在别的IP上保持登录,被多次举报等等,服务器会要求客户端输入验证码。
" V2 D8 l7 I% B! o/ ~% T7 N
! @9 N1 o7 ^+ K: m" H" ^! m/ F0x00BA发送包 y8 V5 }3 Q5 O8 f
& b$ P7 a/ p; y: Q* t
0x00BA接收包
4 W9 e6 K7 o5 j1 `9 |- _+ E5 R3 E+ Y6 t: r
3 0x00DD密码验证
6 [+ l# Q5 _$ T& u/ s; H4 ^7 a; {. g& O
该数据包的作用是将本地QQ的密码发送给服务器端进行验证。7 l8 X, D8 V7 f* o( r; H0 \
x0 j$ o4 d2 J* [# I9 U8 I4 0x00E5数据校验# d4 n/ v/ c9 Z/ d& h
1 i6 _, W7 n! {' d4 j7 i( W
该数据包主要用于校验前几个数据包的Token数据,如果通过验证,服务器端会返回本次登录的时间和IP地址等信息。! }: `5 V: O( _2 ~9 x) y/ e1 ~
7 i3 ]6 N; c& m0 A* O v
0x00E5发送包
& E6 P1 n/ P( J3 l# x3 t+ t# ?8 `8 v7 \2 D$ } d5 g1 G: c, c
6 0×0030获取会话密钥7 \& c: a9 l/ K0 g* b
" [) R: g! { I该数据包是QQ登录流程的最后一个数据包,主要用于向QQ客户端返回会话密钥(Session Key),该会话密钥由服务器端生成,目前不知道其生成算法。但是估计和QQ号码,登录IP,登录时间以及QQ密码有关。& N1 A% p6 P# r; k) V: V, N
! X; \1 J8 G4 m* G7 G: z r6 o0×0030发送包
* f. O& v% o/ u. u8 B* P8 q# u8 G9 H0 f/ ^% [# s; P+ c' H
如上面所说,整个过程滴水不漏,看起来每一步都没有参与修改的可能。从开始发送第一个数据包测试认证服务器链路状态,到服务器返回会话密钥,都完美无缺。当然,这是基于我对UDP协议协议了解的基础上发表的看法,但是我对UDP协议的底层实现的了解还远远不够。: s" I4 g: {- H
# S8 e6 J! O8 L6 b1 b4 _8 C- A没有完美的代码,没有完美的加密算法。其实只要我们深入研究这个登录过程,就一定能找到破解方式。破解方法也许能找到,但不是在我这里,遗憾的是,也不是今天。. ~6 @! ]4 ]; b8 C+ B9 o
$ }- m7 H; o8 b" @3 ^3 T% D ^
|
|