微信数据分析
文件目录
系统文件
微信用户数据存储目录名是data/data/com.tencent.mm/MicroMsg/md5(mm+uin)
/
avatar
用户头像image2
图片资源
外部文件
外部目录名/sdcard/Android/data/com.tencent.mm/MicroMsg/(32位md5值)
,注意:此处md5值不是mm+uin,加密方法未知
attachment
下载过的文件video
发送的视频文件voice2
语音消息
数据库破解
微信用户数据存储目录名是
data/data/com.tencent.mm/md5(mm+uin)/
其中聊天信息在
EnMicroMsg.db
文件中,密钥为md5(IMEI+uin).sub(0,7)
IMEI获取方式
1
2
3
4
5fun getIMEI(): String {
val tm: TelephonyManager =
BaseApp.context.getSystemService(Service.TELEPHONY_SERVICE) as TelephonyManager
return tm.imei
}uin在
shared_prefs/system_conf_prefs.xml
文件中
表分析
chatroom
表是微信群表。其中memeberList
是所有的群员,以逗号隔开的。message
表:type
为3是图片,为49是文件,1是个人聊天的文字内容(含表情),10000是群里的系统提示消息,43是视频格式文件类型,34是发送语音。isSend
:0为不是我主动发送的,1为我主动发送过去的。talker
:如果属于群组消息都会带有@chatroom结尾,如果是个人就是个人的id了msgSvrId
不为空的说明是服务器同步过的,imgPath
如果不为空且是id的形式,则对应于voiceinfo表或者videoinfo2表,区别在于看type是语音类型还是视频类型的。- (如果是语音的话imgPath值的MD5取第1到2位+”/“+md5取第3到4位+”/“+msg_imgPath的值+”.amr”,例如”6c/5b/msg_040949010820c1aa467cc0d105.amr”)
- (如果是视频文件的话,直接在video)
rcontact
表:username
就是微信的id,gh开头的是公众号或者小程序吧,wxid开头的就是用户,以@chatrom结尾就是群组了。
alias就是我们通常说的微信号了。type
:33代表系统的应该是微信的功能的(漂流瓶、附近的人、腾讯新闻、摇一摇、朋友圈、群发助手等),0为小程序的,3或者其他例如1、4、513、515、38771等应该都为和用户类似的估计和功能节点(部署)有关。
ContactLabel
表:是标签表AppMessage
表估计是一些公众号等消息信息摘要ImgInfo2
表对应的是聊天的图片信息表,至于ImgInfo表示干嘛的?这里就不清楚了。thumbImgPath
字段对应的值例如THUMBNAIL_DIRPATH://th_742c574a7bb8d85ef39e2608ab10dd50,会取th_后面的前四位,作为文件目录。例如/74/42/742c574a7bb8d85ef39e2608ab10dd50,这里需要取字段的大中小图了。字段midImgPath估计就是了appattach
表发送文件,然后点击下载文件后的关联表。可以获取文件的路径,根据mediaSvrId(应该是很长很长以@cdn开头的)获取查询。如果clientAppDataId有值的话说明是自己发送的(并且是时间戳和mediaSvrid一样的),否则是下载的。
其他参考
破解:https://bbs.pediy.com/thread-250714.htm
数据库表:https://blog.csdn.net/qq_21687123/article/details/104229675
Android代码解析数据库:https://blog.csdn.net/loocanp/article/details/103475998