首页 未命名正文

用Python解密手机 *** 聊天记录

访客 未命名 2022-04-10 1177 4 *** 解密

据说手机 *** 2012之后使用记录保存的sqliteDB内容加密,库没有设置密码,直接用sqliteadmin之类的软件打开之后可以看到一堆歪七扭八的字符。那么如何恢复和解密 *** 聊天记录呢?

QQ

数据库在哪?

安卓在/data/data/com.tencent.qq/databases/你的 *** 号.db,

IOS好像在/var/mobile/Applications/ *** /Documents/contents/你的 *** 号/ *** .db未测试。所以说苹果需要越狱、安卓需要root。

怎么加密了?

sqlite数据库本身没有被加密可以直接用,但是一些敏感的数据部分被伟大的。。。异或加密了。比如分组名称(聊天记录更不用说了)。

QQ

然后就是:key哪里来的?

显然对于异或这种东东。。。可以很简单的直接用明文和密文推密码。比如:我把一个分组命名成aaaaaaaaaaaaaaaaaaaa。然后:

importsqlite3 conn=sqlite3.connect(;******.db;) cursor=conn.execute("SELECT*fromGroups")print"selectdatabasesuccessfully";forrowincursor: a=row[4] *** str=;; foriinrange(0,len(a)): *** str+=unichr(ord(a[i])^ord(;a;)) print *** str

qq

果断发现和网上说的一样(别抽我)key是手机的IMEI(别问我如果是不支持移动数据的安卓pad key是啥)。

IMEI怎么获取?拨号键盘输入*#06#

聊天记录都在哪里?

每个聊天记录都存入了单独的数据表mr_friend_+MD5(好友 *** )+_New

其中msgData是聊天内容,senderuin是加密的发信者qq号。

解密聊天记录:

#-*-coding:utf-8-*-importstruct importsqlite3 IMEI=;***************;defcheck(thestr): #print;checking; if(len(thestr)==0): return0 i=0 whilei<len(thestr): iford(thestr[i])^ord(IMEI[i%15])<=0x7f: i=i+1 #print;1; elif(ord(thestr[i])^ord(IMEI[i%15])<=0xef)and(ord(thestr[i])^ord(IMEI[i%15])>=0xe0): i=i+3 #print;3; else: return0 return1 f2=open(;rec1.tmp;,;wb;) conn=sqlite3.connect(;*********.db;) cursor=conn.execute("SELECTmsgdatafrommr_friend_******************************_New")print"selectdatabasesuccessfully";forrowincursor: a=row[0] *** str=;; ifcheck(a)or1: #if(ord(a[0])^ord(IMEI[0])<0xef)and(ord(a[0])^ord(IMEI[0])>0xe0): foriinrange(0,len(a)): *** str+=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: print *** str exceptUnicodeEncodeError: pass f2.write(struct.pack(;B;,ord(;\x0A;)))

然后发现utf8的3字节编码中文不能直接print出来求大神大腿。

但是winword还好很优秀的:

winword

所以总算是可以看了,聊天记录的解密到此结束。

但是还有一些遗憾:

发送时间好像把12个数字压缩到10个数字了,我不知道怎么做的也解不开。

怎么处理3字节的中文啊print不出来伤不起。

不知那位大神有想法?

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。