
有了上面的结论,我们还可以继续做一些其他实验,我试着用一个账号的msg2.0.db文件中的matrix.dat去替代另一个账号的msg2.0.db文件(直接用UE更改十六进制内容),然后将这个被替代的msg2.0.db放到第一个账号目录下, 再尝试登录,登录成功,并且可以查看聊天记录的最后时间,但查不到聊天内容,因为密钥不对,自然就无法解密。
如果单纯将一个Msg2.0.db文件放到另一个账号目录下,再登录,会显示登录失败,未知错误0x00080008,接着查看登录失败的报文发现服务器实际上是对接受到的matrix.dat最后38H字节解密后进行了验证,很可能是通过账号,因此我猜测这38H字节解密后除了密钥之外还有诸如账号之类的信息,不过没发验证。
最后是另一个疯狂的实验,写了个工具,先是替换了matrix.dat内容,然后将所有content.dat中的加密数据先解密出来,然后再用替换的Matrix中相应的密钥对其加密,再写回去,之后再将这个Msg2.0.db文件放到替换账号的目录下,然后登录,成功,打开消息管理器,可以查看里面的所有消息,哈哈,证明QQ也没有对Msg2.0.db文件做任何校验。
写了这么多,也算对QQ的Msg2.0.db文件的原理有了进一步的理解,并且弄清了密钥传递的情况;当然,能够做到这步,testada和sethseth的分析给我了很大帮助。
将分析的过程与大家分享,希望大家有新的想法可以去尝试实验并验证,相信大家也会有很多奇思妙想,说不定就能发现QQ该机制的漏洞。当然,由于个人水平有限,难买也会存在分析有误或者错别字的地方,希望不要见笑。
另外,本文提到的最后一个疯狂的实验,需要了解QQ加密算法,不过这个好像已经是公开的秘密了,呵呵,有兴趣的朋友可以去试一下这个实验。我觉得利用QQ自带的消息管理器查看消息比手动从msg2.0.db中提取消息要强大很多。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-43741-2.html
我知道