数据库在哪?
安卓在/data/data/com.tencent.qq/databases/你的QQ号.db,
IOS好像在/var/mobile/Applications/QQ/Documents/contents/你的QQ号/QQ.db未测试。所以说苹果需要越狱、安卓需要root。
怎么加密了?
sqlite数据库本身没有被加密可以直接用,但是一些敏感的数据部分被伟大的。。。异或加密了。比如分组名称(聊天记录更不用说了)。
然后就是:key哪里来的?
显然对于异或这种东东。。。可以很简单的直接用明文和密文推密码。比如:我把一个分组命名成aaaaaaaaaaaaaaaaaaaa。然后:
import sqlite3 conn = sqlite3.connect(;******.db;)
cursor = conn.execute("SELECT * from Groups ")
print "select database successfully";
for row in cursor:
a= row[4]
sbstr=;;
for i in range(0,len(a)):
sbstr+=unichr( ord(a[i])^ord(;a;))
print sbstr
果断发现和网上说的一样(别抽我)key是手机的IMEI(别问我如果是不支持移动数据的安卓pad key是啥)。
IMEI怎么获取?拨号键盘输入*#06#
聊天记录都在哪里?
每个聊天记录都存入了单独的数据表mr_friend_+MD5(好友QQ)+_New
其中msgData是聊天内容,senderuin是加密的发信者qq号。
解密聊天记录:
# -*- coding: utf-8 -*-
import structimport sqlite3 IMEI=;***************;
def check(thestr):
#print ;checking;
if (len(thestr)==0):
return 0
i=0
while i<len(thestr):
if ord(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 :
return 0
return 1
f2 = open(;rec1.tmp;,;wb;)
conn = sqlite3.connect(;*********.db;)
cursor = conn.execute("SELECT msgdata from mr_friend_******************************_New ")
print "select database successfully";
for row in cursor:
a= row[0] sbstr=;;
if check(a)or 1:
#if (ord(a[0])^ord(IMEI[0])<0xef)and(ord(a[0])^ord(IMEI[0])>0xe0):
for i in range(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:
print sbstr except UnicodeEncodeError:
pass
f2.write(struct.pack(;B;,ord(;x0A;)))
然后发现utf8的3字节编码中文不能直接print出来求大神大腿。
但是winword还好很优秀的:
所以总算是可以看了,聊天记录的解密到此结束。
但是还有一些遗憾:
发送时间好像把12个数字压缩到10个数字了,我不知道怎么做的也解不开。
怎么处理3字节的中文啊print不出来伤不起。
不知那位大神有想法?
参考:http://www.fenlog.com/post/75.html
本文始发于微信公众号(关注安全技术):用Python解密手机QQ聊天记录
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论