QQ登录底层原理分析(转)
***************
下面正式开始。
其实简单说,QQ登录分为四步:
一,客户端向服务器发送请求登录令牌;二,服务器返回登录令牌;三,客户端登录;四,服务器返回结果。
下面一一分析。
******************
一,客户端请求登录。此步骤是最简单的一步。客户端向服务器发送一个登录请求包,内容如下:
*********
头部
0x00
尾部
*********
其中头部为固定格式,如下:
*********
0x02
客户端版本
命令
序列号
QQ号码
*********
命令为请求登录或登录等。序列号是一个随机数,客户端每次加一,用以确定回应包与请求包是否一一对应。
******************
二,如果服务器确认可以在此登录,则返回一个登录包,如下:
*********
头部
回复码
登录令牌长度
登录令牌
尾部
*********
其中回复码表示是否可以在该服务器登录,登录令牌长度为一固定值。登录令牌由服务器生成,未知含意。
******************
三,客户端登录。最重要的一步,登录包如下:
*********
头部
初始密钥
用户密码加密一个空串得到的16字节
固定内容,未知
登录状态(在线、隐身)
固定内容,未知
登录令牌长度
登录令牌
登录模式
未知
未知
固定内容,未知
补足0到规定长度
尾部
*********
其中初始密钥是一个16字节的随机数,用于本身加密。下文详解。
******************
四,服务器返回包。如果一切正确,服务器将返回一个登录包。
*********
头部
回复码
会话密钥
QQ号
用户IP
用户端口
服务器IP
服务器端口
登录时间
未知一堆
CLINET KEY
上次登录IP
上次登录时间
未知
尾部
*********
同样,这个返回包也是用密码密钥加密的。
在第三步中,用户密码将被两次MD5加密,然后作为密钥。再用它来加密一个空字符串,使用的是TEA算法。加密结果放在包里。而整个包除初始密钥外均是用初始密钥加密的。
服务器收到登录包后,用初始密码解开登录包。然后用服务器上的密码来解开密码密钥加密的空字符串。如果成功,则说明密码正确。登录成功。