安卓微信聊天记录的解密

安卓微信聊天记录的解密

本文旨在指导用户如何获取微信聊天中的语音记录,并将其转换为WAV格式以供后续处理。适用于已经获取Root权限的安卓手机用户。

环境要求

  • 已Root的安卓手机(本人使用Root后的小米14 Pro)或者将聊天记录迁移到模拟器或者使用小米手机自带的备份等
  • 微信版本:8.0.43
  • 工具:SQLCipher, silk-v3-decoder

数据文件及路径

  • image2 文件夹:存放所有微信聊天图片,路径:/data/data/com.tencent.mm/MicroMsg/[32位字母]/image2
  • voice2 文件夹:存放所有微信语音,路径:/data/data/com.tencent.mm/MicroMsg/[32位字母]/voice2
  • voide 文件夹:存放所有微信视频,路径:/data/data/com.tencent.mm/MicroMsg/[32位字母]/voide
  • avatar 文件夹:存放所有微信头像,路径:/data/data/com.tencent.mm/MicroMsg/[32位字母]/avatar
  • Download 文件夹:存放微信聊天发送的文件,路径:/data/data/com.tencent.mm/MicroMsg/Download
  • EnMicroMsg.db: 微信数据库文件,路径:/data/data/com.tencent.mm/MicroMsg/[32位字母]/EnMicroMsg.db
  • WxFileIndex.db: 微信文件索引数据库文件,路径:/data/data/com.tencent.mm/MicroMsg/[32位字母]/WxFileIndex.db

注:32位字母根据不同账号生成,多账号登录将出现多个文件夹。

fece8c91d0fb5428bfa2dbc12c9e5fd7

获取访问密码

EnMicroMsg.dbWxFileIndex.db 均被加密,需获取秘钥解密:

  1. 获取秘钥:使用 MD5(IMEI+uin) 取前7位作为访问密码。若为大写字母需转换为小写。拼接时不需使用+号。IMEI为手机IMEI码,在手机设置中可查。新版微信使用1234567890ABCDEF代替IMEI。

  2. 获取uin:访问 /data/data/com.tencent.mm/shared_prefs/auth_info_key_prefs.xml

    auth_info_key_prefs.xml 文件截图
  3. 生成秘钥:使用 MD5(1234567890ABCDEF+uin),去掉+号,取前7位。MD5在线加密 - 站长工具 (chinaz.com)

解密数据库

  1. 使用 SQLCipher 打开数据库文件。

    SQLCipher界面截图

  2. 将数据库导出为CSV格式以便分析。

    导出CSV截图

消息内容解析

EnMicroMsg.db 数据库解析

主要数据表
  • userinfo 表:存储个人信息。id为2的value是个人微信ID。
  • message 表:存储所有聊天记录。
  • chatroom 表:存储群聊信息。
  • img_flag 表:存储在线头像信息。若本地avatar文件夹无头像,可使用此表地址访问头像。reserved2为缩略图,reserved1为高清图。
  • rcontact 表:存放好友信息。
消息类型解析

message表中,`

type`字段表示消息类型,包括:

  • 1:文本
  • 3:图片
  • 34:语音
  • 43:视频
  • 47:大表情
  • 49:分享卡片
  • 1000:撤回消息提醒
  • 436207665:红包
  • 419430449:转账
  • 1090519089:文件

媒体类型消息(如图片、语音、视频等)可通过msgId字段在WxFileIndex.dbWxFileIndex3表中找到对应文件路径。

媒体文件路径获取
  • 图片地址
    • 缩略图message表中imgPath字段值(如:THUMBNAIL_DIRPATH://th_5a24c5d362dae72b0ad52d78767ba883)指向image2文件夹中对应文件。
    • 原图:发送图片和接收图片有不同的拼接规则。
  • 视频地址:通过message表的imgPathvideo文件夹中找到对应视频。封面.jpg,视频.mp4
  • 语音地址message表的imgPath字段经MD5加密后,前4字母表示两级文件夹,文件名格式为msg_imgPath值.amr
  • 文件地址:发送文件存于/sdcard/Android/data/com.tencent.mm/MicroMsg/Download,通过msgIdWxFileIndex3表中查找路径。
  • 本地头像avatar文件夹中,微信ID经MD5加密后前4字母表示两级文件夹,格式为user_md5字符串.png
语音文件处理

微信语音使用SILK v3编码,需用silk-v3-decoder进行解码。安装GCC、ffmpeg等工具后进行转码。转码完成后,需将语音文件地址后缀改为转码后的格式(如.mp3)。


解密安卓微信聊天信息存储 | Greycode’s Blog

### 使用Python读取微信聊天记录 #### 解决方案概述 存在两种主要方法用于利用 Python 获取微信聊天记录。一种方式涉及调用微信官方开放平台所提供的 API 接口;另一种则是基于本地数据库文件的操作,即解密并解析存储于手机或电脑端的微信数据文件。 #### 方法一:借助WeChat API接口访问聊天记录 为了合法合规地取得用户的聊天历史,开发者应当遵循 WeChat 官方文档指导下的认证流程注册应用,并申请相应的权限范围内的 API 访问权。然而值得注意的是,目前 WeChat 并未公开提供直接获取私聊消息内容的功能给外部应用程序使用[^1]。 #### 方法二:从本地数据库提取聊天记录 对于已经备份至计算机上的微信资料而言,可以通过分析其内部结构来间接实现这一目标。具体来说就是针对特定版本号对应的 SQLite 数据库(如 `EnMicroMsg.db`),运用 Python 的 sqlite3 库执行 SQL 查询语句从而检索所需的信息片段。下面给出一段简单的代码实例展示怎样连接到该类型的数据库并将结果保存成 CSV 文件格式: ```python import sqlite3 import csv from pathlib import Path def export_wechat_messages(db_path, output_file='wechat_messages.csv'): conn = None try: db_path = str(Path(db_path).resolve()) # Connect to the database file. conn = sqlite3.connect(db_path) cursor = conn.cursor() query = """ SELECT datetime(msg.createTime / 1000, 'unixepoch') AS time, talker AS contactId, content AS messageText FROM message msg; """ with open(output_file, mode="w", newline='', encoding='utf-8-sig') as f: writer = csv.writer(f) rows = cursor.execute(query).fetchall() header = ['time', 'contact_id', 'message_text'] writer.writerow(header) writer.writerows(rows) except Exception as e: print(e) finally: if conn is not None: conn.close() if __name__ == '__main__': path_to_db = r"C:\Users\YourUsername\Documents\WeChat Files\dbpath\EnMicroMsg.db" export_wechat_messages(path_to_db) ``` 此脚本会尝试打开指定路径处名为 EnMicroMsg.db 的 SQLite 数据库,并从中选取时间戳、对话者 ID 和纯文本形式的消息体三列作为输出字段写入新的CSV文档当中去[^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值