手机QQ聊天记录的db文件使用的sqlite数据库,一般库文件的名字是 {用户QQ号}.db
要拿到db文件,需要手机root或者手机支持应用备份,我使用的是小米手机,支持不用root直接备份app数据出来,这方面网上教程挺多的。
db文件本身没有加密,加密的是字段内容,加密方式一般使用的是手机IMEI值和要加密的字符值异或操作。
下面解决如果IMEI找不到了,在只有db文件情况下怎么推导加密用的IMEI值。
1、推导IMEI值
分析db文件内的Friens表,发现可以利用好友备注(remark)和拼音字段(mCompareSpell)之间的对应关系,推导出加密的IMEI值
mCompareSpell字段就是remark字段的拼音对应(如果remark为空会和name字段对应)
知道了对应关系,我们就可以使用数字0-9作为密钥去解密这两个字段值,取remark字段的拼音值对比解密后的mCompareSpell值,然后根据对比选出正确的数字值,依次循环直到找出所有的值即为要找的IMEI
写了个python脚本实现这一过程,操作环境:手机QQ v8.3导出db文件,win10,小米安卓手机
2、手工操作步骤
首先从第1位开始推导,从上图看出【此】和【c】【步】和【b】是正确的拼音对应关系,所以第1位IMEI值就是8或9(9在后面会发现是错误的值),此处选8
然后继续第2位的求值,【此】的拼音是ci, 所以第2位选6, 1个汉字对应多个字母,所以按汉字顺序选出正确的拼音就可以了
最后的IMEI值
3、自动操作步骤
直接指定db路径就可以自己推导IMEI值了
4、脚本源码地址
如果一条数据展示不明显,也可以设置多条数据展示比对
λ py find_qq_db_imei.py -h
usage: find_qq_db_imei.py [-h] [-l KEY_LENGTH] [-m MODEL] [-n LIMIT_ROWS][-i INIT_IMEI | -q USER_QQ]db_fileQQ聊天记录db文件获取解密key(IMEI)positional arguments:db_file db文件路径(必输)optional arguments:-h, --help show this help message and exit-l KEY_LENGTH 需要推导的IMEI长度值(默认15)-m MODEL 操作模式:1 自动(默认) 2 手动-n LIMIT_ROWS 需要查看的组数(默认2)-i INIT_IMEI 初始前几位IMEI值-q USER_QQ db文件所属用户qq号,以求解前几位IMEI
https://github.com/perfel/find_qq_db_imei