QQ登录底层原理分析(转)

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