测试平台:安卓4.1 & 2.3
测试软件:手机QQ2012 & 手机QQ2013 & 微信4.5 to 微信5.2
测试目的:获取聊天记录
1.手机QQ
据说手机QQ2012之前都是明文的,这个没测试,不细说了,有兴趣的朋友自己搜索下。2012之后使用记录保存的sqliteDB内容加密,库没有设置密码,直接用sqliteadmin之类的软件打开之后可以看到一堆歪七扭八的字符。
2013的最新版本的手机QQ数据库的表名调整为:mr_friend_MD5(QQ)_New ,比原来的多了一个_New。这里先讲解一下utf8编码,utf8的中文是3字节,之前的算法根据代码可以看出来,前两字节原封不对,只对最后一个字节进行异或。新版本的不在区分中文和英文,直接对每个字节进行疑惑加密。
使用了15位的手机串号作为key,依次做异或运算。。。这个尿性,就算没有手机串号也能碰撞出来的。。。这个加密算是形式吧。。。。
注意:从字段里读取内容的时候要使用sqlite3_column_blob函数获取内容缓冲区,使用sqlite3_column_bytes获取出来缓冲区长度,因为使用sqlite3_column_text会有\0字符干扰导致数据不全;所有的中文使用utf8编码,需要转下。
2.微信
微信貌似4.0之前也木有加密,没有测试,4.5版本以后使用了sqlite加密数据库,数据没有加密但是数据库文件加密了。
通过反编译逆向+调试,这个数据库的密码加密方式为MD5(手机串号+微信uin).substring(0,7),md5的字符均为小写。
例如我的串号为3535xxxxx....,uin为168150735,key为"2be3aa8"。
有了key,用sqlite数据库查看器打开即可看到内容。mssage表里是普通微信聊天的记录,qmessage是QQ离线消息的记录,其他的木有细看,测试基本结束。
更多疑问解答:http://www.fenlog.com/post/82.html
此方法有一定危害性,故代码不公开了,有需要联系本人。
当然也可能是某些地方没写正确导致的异常,很多人都解出来了。
印象中聊天内容存储在/data/data/com.xxx/里面 涉及到的资源什么图片语音放在/sdcard/tencent/mobileqq里面,都找找吧
t = t / 1000;
CTime cm(t);
cm.Format("%Y-%#m-%#d %H:%M:%S");