微信数据库分析

本文是关于微信数据库的一些基本信息,所括数据库的基本结构,以及加密算法,还有关键数据库参数的说明。

数据库文件

微信的数据库文件存储在这个目录下:

/data/data/com.tencent.mm/MicroMsg`

其中EnMicroMsg.db是微信聊天记录所在的数据库,数据库使用SqlCipher加密。

数据库解密参数

PRAGMA cipher_default_kdf_iter = 4000; 
PRAGMA key = ‘3ecab33’; 
PRAGMA cipher_use_hmac = OFF; 
PRAGMA cipher_page_size = 1024;

其中密钥的生成算法为:

KEY = (MD5(IMEI + UIN))[0:6]

数据库相关操作

聊天记录表结构:

CREATE TABLE `message` (
    `msgId` INTEGER,
    `msgSvrId`  INTEGER,
    `type`  INT,
    `status`    INT,
    `isSend`    INT,
    `isShowTimer`   INTEGER,
    `createTime`    INTEGER,
    `talker`    TEXT,
    `content`   TEXT,
    `imgPath`   TEXT,
    `reserved`  TEXT,
    `lvbuffer`  BLOB,
    `transContent`  TEXT,
    `transBrandWording` TEXT,
    `talkerId`  INTEGER,
    `bizClientMsgId`    TEXT,
    `bizChatId` INTEGER DEFAULT -1,
    `bizChatUserId` TEXT,
    `msgSeq`    INTEGER,
    `flag`  INT,
    PRIMARY KEY(`msgId`)
);

聊天记录查询:

SELECT msgId 消息id,msgSvrId 不知道干啥用,Type 消息类型,status 不懂,isSend  是否是发送消息,0是接收的,1是发送的,isShowTimer 没研究,talker 对话者,imgPath 图片路径, datetime((select createTime/1000 FROM message b WHERE b.msgId  = a.msgId),'unixepoch','localtime') 发送时间,content 消息内容(最主要的),reserved 备注 FROM message a ORDER BY a.createtime ASC ;