为pidgin的qq plugin调试新的qq加密解密算法时,突然发现login登录时提示“您的QQ版本过低,为了保护您的帐号安全,请到http://im.qq.com升级到最新版的QQ。”
修改了错误的加密解密算法,重新登录,仍然出现“您的QQ版本过低”。
换一个QQ号,重新登录,仍然出现“您的QQ版本过低”。
换用官方QQ 2006正式版,重新登录,仍然出现“您的QQ版本过低”。
换用官方QQ 2208,重新登录,出现数个图片验证框,一一验证后,登录正常。反复登录和退出2008,直到不再出现图片验证。换用Pidgin的qq plugin,可以正常登录。
第一次出现“您的QQ版本过低”时,过几个小时,换用没问题的客户端,也可以正常登录。
这类提示较多出现在eva/pidgin等第三方QQ客户端中,TX QQ在某个时间断也出现过类似问题。网上曾经提到的解决办法有:
1、到TX官方网页,修改用户密码。
2、使用新版本的官方QQ登录。
今天,我使用了第二种方法,即换用官方QQ2008登录。
登录时,QQ2008弹出对话框,类似“你的机器可能有木马,通讯不正常,需使用2007、2008以后版本登录方能”解决等类似的话,接下来出现 大堆的验证码窗口,验证窗口的数量大致与前面用错误的加密算法时错误登录的次数相当 ,认证输入了每一个验证窗口后,可以正常登录了。
下一步,退出QQ2008,继续使用加密算法已修正的pidgin qq登录,一切正常,再无“您的QQ版本太低,无法登录”的提示。
反思:
1、QQ的加密算法是建立在TEA基础上的,TEA算法的最小单位是64 Bits,也就是8 Bytes。显然不可能每个明文长度正好是8 Bytes的倍数,因此QQ必须先对明文进行 Padding的预处理。
2、就QQ服务器方来说,在按照TEA算法进行解密的过程中是无法判断这个数据包是否正确的,如果到此为止,不进行正确与否的判定,那么服务器方将 错误的解密数据包进行解析等后续处理时,将会有极大风险,可能遭到Floor攻击、内存错误攻击等,有可能造成服务器崩溃的灾难性后果。
3、鉴于以上2点,QQ协议专门要求在每个数据包后Padding一定长度的字节0x00,服务器按TEA算法解密后,可以简单地通过判断这些字节0x00,来判定数据包是否正常。
4、当服务器方发现数据包解密不正常,即判定:
× 客户端可能有木马,QQ通讯数据包被篡改
× 客户端可能被局域网内的其它计算机劫持,QQ通讯数据包被篡改
× 可能有其它黑客软件试图攻击服务器
× 网络通信上其它未知的故障
总之,QQ服务器为了保护自己,立刻记录了客户端IP地址和错误次数。
5、后面出现的“版本低”错误的提示是什么意思?
从字面上理解,一般会认为是我现在使用的QQ版本太低,QQ服务器已封闭该协议,客户端必须升级。从今天的一系列恢复过程看,个人推测,当服务器认 为受到了客户端攻击时,需要客户端进行更多的安全性认证,如验证码弹出窗口,可以低版本的官方QQ(2006及其以前版本)均不支持这些安全性,所以要求 客户端进行升级。
待使用新客户端每进行一个安全验证,原来在服务器上积累的负分就被抵消,直到这个分数为0,又可以使用其它的甚至是QQ2005版本了。这个猜想,也可以解释为什么修改密码后,“版本低”的提示会消失,因为修改密码需要进行更加严格的安全认证。
综上所述,“版本低”错误并不是指协议版本被封闭,完整的意思是:“您现在使用的QQ版本太低,无法进行足够的安全验证,以恢复你原来的安全性积分”。
当然,本人并不是TX的软件开发人员,以上叙述中凡涉及QQ服务器的部分,均属推测,请读者自行决定是否采纳。
[本文转自]http://ccpaging.blog.ubuntu.org.cn/2008/08/02/qq_low_version/
转发至微博
转发至微博
评论