网络数据包监视程序开发(十三)---QQ密码加密方式

来源:互联网 发布:什么毛巾舒服知乎 编辑:程序博客网 时间:2024/05/16 06:29

  前段时间已经把QQ登录的过程弄清楚了,并且也能正确地获得QQ登录时所需要的登录令牌。获得登录令牌后,紧接着便是客户端向服务器发送登录包。而我们关心的QQ密码也在这个登录包里,当然,那一定是加密了的。

  我用的QQ版本是2006版,版本号的代码为:0e 2d。捕获的登录数据包长度为460字节。这个包的结构如下:

0x02              包头
0x0e    0x2d           QQ版本号
0x00    0x22           请求登录的指令号
0x63    0xe2           报文序号
0x27    0x04    0x0d    0xf6     QQ号
..................共16字节:       登录数据数据密钥
...................           加密过的内容
0x03              包尾

除去包头1个字节,QQ版本号2个字节,指令号2字节,报文序号2字节,QQ号4字节,密钥16字节,包尾1字节:

460-1-2-2-2-4-16-1=432,所以加密的内容长度为:432字节。

  用登录数据包里的密钥对密文进行解密,可以还原出416个字节的内容,我们关心的与QQ密码有关的数据就保存在解密后的前16人字节里。那这16个字节代表什么?是怎么来的呢?没什么研究,查了一些资料,这个比较可靠:这16个字节是先把密码做两次MD5-16运算得到一个HASH,然后再把这个结果作为密钥用TEA加密一个任意的字串,可以是空串,得到这16个字节。服务器其实只是看看能不能在服务器端解密,并不关心解密后的内容。

  看来这16个字节就是关键了。当然要完全破解出一个QQ密码似乎不是太有可能,毕竟MD5是不可逆的。不过能不能用TEA解密出那个用密码做了两次MD5-16而得到的HASH值呢?呵呵。。。这个就是最近的任务了:知道了明文,知道了密文,怎样得到TEA加密算法的密钥??