StonyGround

The heart is a bloom , shoots up through the stony ground.

0%

微信逆向

微信数据分析

文件目录

系统文件

微信用户数据存储目录名是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
    5
    fun 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