当前位置: 首页 > 科技观察

使用Python解密手机QQ聊天记录

时间:2023-03-20 14:29:06 科技观察

据说手机QQ2012之后,记录中存储的sqliteDB内容被加密。那么如何恢复和解密QQ聊天记录呢?数据库在哪里?安卓在/data/data/com.tencent.qq/databases/你的QQ号.db,IOS好像在/var/mobile/Applications/QQ/Documents/contents/你的QQ号/QQ.db还没测试。所以苹果需要越狱,安卓需要root。它是如何加密的?sqlite数据库本身没有加密,可以直接使用,但是对一些敏感数据部分进行了保护。..异或加密。比如群名(更不用说聊天记录了)。然后就是:钥匙是从哪里来的?显然是为了XOR的东西。..明文和密文直接推送密码,非常简单。例如:我将一个组命名为aaaaaaaaaaaaaaaaaaaaa。然后:importsqlite3conn=sqlite3.connect(;******.db;)cursor=conn.execute("SELECT*fromGroups")print"selectdatabasesuccessfully";forrowincursor:a=row[4]sbstr=;;foriinrange(0,len(a)):sbstr+=unichr(ord(a[i])^ord(;a;))printsbstr果断发现和网上说的一样(别扒我)key是手机的IMEI(不要问我不支持移动数据的安卓padkey是什么)。如何获取IMEI?拨打*#06#输入的聊天记录在哪里?每条聊天记录都保存在单独的数据表mr_friend_+MD5(好友QQ)+_New中,其中msgData为聊天内容,senderuin为加密后的发件人qq号。解密聊天记录:#-*-coding:utf-8-*-importstructimportsqlite3IMEI=;****************;defcheck(thestr):#print;checking;if(len(thestr)==0):return0i=0whilei=0xe0):i=i+3#print;3;else:return0return1f2=open(;rec1.tmp;,;wb;)conn=sqlite3.connect(;**********.db;)cursor=conn.execute("SELECTmsgdatafrommr_friend_*********************************_New")print"selectdatabasesuccessfully";forrowincursor:a=row[0]sbstr=;;ifcheck(a)or1:#if(ord(a[0])^ord(IMEI[0])<0xef)and(ord(a[0])^ord(IMEI[0])>0xe0):foriinrange(0,len(a)):sbstr+=unichr(ord(a[i])^ord(IMEI[i%15]))#f2.write(struct.pack(;B;,ord(a[i])^ord(IMEI[i%15])))f2.write(struct.pack(;B;,ord(a[i])^ord(IMEI[i%15])))try:printsbstrexceptUnicodeEncodeError:passf2.write(struct.pack(;B;,ord(;\x0A;)))发现utf8的3字节编码的中文不能直接打印求大go的大腿d.不过winword还是很好的:总算可以读取了,聊天记录解密就结束了。但是还是有一些遗憾:发送时间好像把12个号压缩成10个号了,不知道怎么弄,解决不了。怎么处理3字节的中文啊,打印伤不起。不知道哪位大神有思路?