前提准备:
获取EnMicroMsg.db
ROOT后的手机,找到微信安装文件夹,找到EnMicroMsg.db文件。
破解EnMicroMsg.db
(1)获取imei值和uin值
手机的IMEI获取:手机拨号盘输入:*#06#
ROOT后的手机,找到微信安装文件夹,获取uin值;
找到和MicroMsg目录同一级目录中的/shared_prefs/system_config_prefs.xml,打开获取如图的值:
计算公式:
该加密方法从微信5.0 以来 均未发生变化。其中Left7为提取字符串的前七个字符。IMEI和uin的数据可以从以下配置文件中提取:
IMEI:data\data\com.tencent.mm\MicroMsg\CompatibilityInfo.cfg
u in:data\data\com.tencent.mm\shared_prefs\system_config_prefs.xml。
以IMEI= 866174957262534,uin =2007803184的设备为例,计算出的key值为4c27f5d,使用SQLcipher.exe工具打开,输入解密key,如图,可以查看微信的数据表。
这里工具也可以使用SQLite Database Browser
数据库字段说明
微信数据表
聊天记录保存在message表中,将其导出后可以看到详细的聊天内容。如图4.2与图4.3所示,为一段聊天场景对应的message表存储。
message表中存储的一段消息
该消息对应的聊天场景
Message表中比较重要消息记录数据字段有“talker”、“createtime”、“type”、“content”、“imgPath”和“isSend”。“talker”字段存储用户与之通信的微信账号,对应微信账号的详细信息存储在“userinfo”表和“rcontact”表中。“createtime”是此信息的时间戳。文本消息内容存储在“content”中。“isSend”字段表示发送状态,1由用户发送,0为“talker”创建用户接收。
解密规则
tables : rconversation,message
message表中:
type为3是图片,为49是文件或转发的聊天记录,1是个人聊天的文字内容(含表情),10000是群里的系统提示消息,43是视频格式文件类型,34是发送语音。
isSend:0为不是我主动发送的,1为我主动发送过去的。
msgSvrId不为空的说明是服务器同步过的,
imgPath如果不为空且是id的形式,则对应于voiceinfo表或者videoinfo2表,区别在于看type是语音类型还是视频类型的。
(如果是语音的话imgPath值的MD5取第1到2位+"/"+md5取第3到4位+"/"+msg_imgPath的值+".amr",例如"6c/5b/msg_040949010820c1aa467cc0d105.amr")
(如果是视频文件的话,直接在video)
createTime (发送时间位10位unix时间戳 默认最后加了3位干扰数据) 转换正常时间公式 =(时间戳+8*3600)/86400+70*365+19
talker(你与某个联系人的对话就为一个taker id,锁定了它就锁定了你与她的所有对话),如果属于群组消息都会带有@chatroom结尾,如果是个人就是个人的id了
content(聊天文字内容)。
SEMI_XML 解密规则:
前面10位标志位 不用管。
第11位开始文件内容
2位key长度(红色):0x002b =43
43位key内容(黄色):.msg.appmsg.mmreader.category.item1.pic_num
2位value长度(绿色) : 0x0001 = 1
1位value内容(蓝色) : 0x30 = "0"
也就是
.msg.appmsg.mmreader.category.item1.pic_num = 0
后面都是一样的格式
2位key长度+key 内容+2位value长度+value内容