Mac、Win 对微信 PC 客户端本地 .db 数据库文件解密并读取

一、简介

  • 比如需要做一个读取聊天记录,并对聊天记录进行归纳整理存储到其他地方的功能,有几种方式:

  • 1、通过微信网页版,但是网页版存在限制。
    • 登录限制:微信网页版在 2017年 开始限制新注册账号登录,并于 2019年 彻底关闭了登录入口。新注册的微信号无法登录网页版微信,老账号则不受影响,但随着时间的推移,老账号也可能逐渐无法使用网页版‌1。

    • API调用限制:微信网页版 API 存在调用限制,每个帐号每月有一定的 API 调用限额。如果超过限额,可能会导致功能受限或无法正常使用‌。

    • 安全风险:由于网页版微信存在 API,一些开发者利用这些 API 开发了微信机器人等工具,这可能带来安全风险。因此微信对网页版微信进行了限制和关闭,以保障用户账号的安全‌。而且这种方式登录还有可能被封号的可能。

    在这里插入图片描述

  • 2、解密客户端本地 SQLite 数据库读取。
    • 这些数据库文件都是加密的。不过微信存数据使用的是开源的 sqlcipher, 所以还是有办法导出微信在本机的聊天数据库的。

    • 客户端本地 SQLite 数据库文件路径:

      • Mac:登录微信客户端,随便截个图发送一个消息,然后右键这个图片,选择 在 Frinder 中显示,在打开的文件夹中往上级文件夹找,找到 Message 文件夹即可,里面就是当前账号的聊天记录 .db 文件。

        在这里插入图片描述

        在这里插入图片描述

      • Win:登录微信客户端,到 设置 -》文件管理 中找到存储文件夹,文件夹内的 Msg 文件夹就是存储聊天记录的,里面有各种 db 文件,不止聊天相关的。

        在这里插入图片描述

  • 3、使用 PC 客户端 HookAndroid 抓包。

二、聊天记录 .db 文件分析

  • 进入各端聊天文件夹后,会发现同一个文件名会有几个不同后缀

    在这里插入图片描述

  • 文件关系与用途总结
    文件名作用特点
    xxx.db主数据库文件存储聊天记录的主要数据
    xxx.db-backup主数据库的备份便于数据恢复
    xxx.db-shm共享内存文件(加速访问)动态文件,多线程间共享内存
    xxx.db-wal写操作的临时存储(预写日志)动态文件,写入性能优化
  • xxx.db
    • 主数据库文件
    • 这是 SQLite 数据库的核心文件,包含了聊天记录的主数据。
    • 文件中存储了聊天记录的内容,包括消息文本、图片路径、音视频文件的元信息等。
  • xxx.db-backup
    • 备份数据库文件
    • 这是微信定期或在某些关键操作(如程序升级、异常退出)时,生成的主数据库的备份文件。
    • 用于在主数据库损坏时进行恢复。
    • 数据内容通常与某一时刻的 xxx.db 一致,但可能稍旧。
  • xxx.db-shm
    • 共享内存文件Shared Memory)。
    • SQLite 使用 WAL(Write-Ahead Logging,预写日志)模式 时产生的文件。
    • 用于多个数据库连接之间共享内存和协调事务(如多线程访问数据库时)。
    • 文件作用:
      • 暂存查询结果或中间数据。
      • 加速读写操作。
    • 文件内容是动态的,重启微信或关闭数据库连接后可能会被清空。
  • xxx.db-wal
    • 预写日志文件Write-Ahead Log)。
    • 也是 WAL 模式的文件之一,用于临时存储对数据库的写操作。
    • 写入流程:
      1. 数据库写操作首先写入 xxx.db-wal 文件。
      2. 当达到一定条件(如文件大小限制或事务提交时),WAL 文件中的数据会被写回主数据库 xxx.db 中。
    • 优点:
      • 提高写入性能,避免频繁对主数据库文件操作。
      • 保证数据完整性,即使程序崩溃,未提交的数据仍可从 WAL 文件恢复。
  • 实际应用
    • 恢复聊天记录:
      • 如果 xxx.db 损坏,可以尝试从 xxx.db-backup 恢复。
      • 如果 xxx.db 数据缺失,xxx.db-wal 可能包含未写入主数据库的最新消息。
    • 分析聊天记录:
      • 核心数据存储在 xxx.db 中,但在事务未提交或进行中的情况下,需同时解析 xxx.db-wal
    • 清理冗余文件:
      • 在数据库关闭后,xxx.db-shmxxx.db-wal 通常可以被清理,不影响主数据库。

三、xxx.db 密钥获取方式

  • xxx.db 导入到第三方可视化工具中后,遇到 表和字段名显示为乱码无法加载任何数据,无法查看到表结构和内容提示文件加密 都需要对 xxx.db 文件进行解密后再导入,代码访问同理。

  • 密钥获取可以分为 配置文件获取(可能存在)运行时内存中获取,如果想省事可以直接选后者,必定能提取到,前者有找不到的可能,可能是还未存储就去找了。

四、【推荐】密钥获取:运行时内存中获取

  • 参考文章
    • 参考工具:Win

    • 参考文章1:Mac

    • 参考文章2:Win、Mac

      网上有很多方法,对于 mac 几乎都是这套方法,都是利用 lldb 对进程设断点跟踪信息,从而获取密钥。但是现在 Mac 系统新增了 系统安全限制(System Integrity Protection, SIP),需要关闭它才能使用 lldb 指令,参考文章中有。

  • Win
    • 先按参考文章来,琢磨其他方案再更新。
  • Mac
    • 先按参考文章来,琢磨其他方案再更新。 不希望关闭 系统安全限制(System Integrity Protection, SIP) 才能进行操作。

    • 执行命令后报 系统安全限制(System Integrity Protection, SIP) 的错误,关闭再执行即可:

      $ lldb -p $(pgrep WeChat)
      

      (lldb) process attach --pid 600

      **error:** attach failed: attach failed (Not allowed to attach to process. Look in the console messages (Console.app), near the debugserver entries, when the attach failed. The subsystem that denied the attach permission will likely have logged an informative message about why it was denied.)

五、【不推荐】密钥获取:配置文件获取(可能存在)

  • 尝试跑了下没走通,节流留个笔记。

  • Win
    • 在刚才的 Msg 文件夹的同级找到 config 文件夹,里面有个配置文件,应该是在里面,但是是个二进制文件,需要处理。

      在这里插入图片描述

    • 处理后,部分版本可能存储在 xml 文件中,字段可能包括 d2b_passwdpass_key

  • Mac
    • 通过之前的方式,发个图片右键进入文件夹,往上找,找到 xxx/Data/Library/Preferences 文件夹,这里就不贴固定路径了,这样找适用所有版本系统。

      在这里插入图片描述

    • 搜索关键文件:

      • system_config_prefs.xml(类似 Android 的路径)。

      • JSON 格式的配置文件,可能包含字段 d2b_passwdpass_key

    • .plist 如何打开:

      • 方式一: 通过 Finder 快速预览

        1. 选中 .plist 文件。

        2. 按下 空格键,使用 macOS 的快速预览功能查看内容。如果是二进制格式,快速预览可能无法显示详细信息。请先使用 plutil 转换为 XML 格式(见下方步骤)。

      • 方式二:可以使用 macOS 自带的 plutil 工具可以转换和读取 .plist 文件。

        # 输出会以 JSON 格式显示文件内容
        $ plutil -p 文件路径(.plist)
        

        某些 .plist 文件可能是二进制格式,使用以下命令将其转换为可读的 XML 格式:

        # 输出会以 JSON 格式显示文件内容,转换后,用文本编辑器打开即可
        $ plutil -convert xml1 文件路径(.plist)
        
解密由sqlcipher加密的微信FTS5IndexMicroMsg_encrypt.db数据库文件需要对加密算法和openssl工具的使用有深入理解。首先,需要确认你已经具备了必要的openssl库和相应的开发环境,以便进行后续的操作。接下来,按照以下步骤进行解密操作: 参考资源链接:[使用openssl解密sqlcipher加密的微信FTS5IndexMicroMsg_encrypt.db](https://wenku.csdn.net/doc/5r0chnn3mr?spm=1055.2569.3001.10343) 1. 确认sqlcipher加密数据库的加密参数,特别是加密算法和密钥长度。在本例中,使用的是AES-256-CBC算法。 2. 根据提供的辅助资料《使用openssl解密sqlcipher加密的微信FTS5IndexMicroMsg_encrypt.db》,理解函数boolCFTS5IndexDbResolver::Decrypt的工作流程。该函数是解密过程的核心,负责处理输入输出文件和加密解密逻辑。 3. 准备解密所需的参数,包括加密数据库文件名、解密密码和解密后的输出文件名。确保这些参数正确无误。 4. 使用openssl提供的EVP接口,初始化AES-256-CBC算法的解密上下文。需要特别注意密钥和初始化向量(IV)的处理,它们对于解密过程至关重要。 5. 逐块读取加密数据库文件使用初始化好的解密上下文进行解密。在openssl中,通常使用EVP_DecryptInit_ex、EVP_DecryptUpdate和EVP_DecryptFinal_ex等函数来完成解密过程。 6.解密后的数据写入到指定的输出文件中。在整个过程中,需要注意处理可能出现的异常和错误,进行相应的错误检查和处理。 7. 如果在解密过程中涉及到HMAC-SHA1等完整性校验机制,还需要实现相应的HMAC验证逻辑,确保数据在传输或存储过程中的安全。 8.解密完成后,验证解密数据的完整性和正确性,确保无误后方可使用。 整个解密过程中,openssl库的正确使用是关键。务必确保openssl库的版本与sqlcipher加密时使用的版本兼容。此外,解密操作可能涉及到敏感数据,务必保证操作环境的安全性和操作的合法性。 在完成解密操作后,为了更深入地掌握openssl在数据库解密方面的应用,建议查阅更多官方文档和相关资料,以获取更全面的知识。 参考资源链接:[使用openssl解密sqlcipher加密的微信FTS5IndexMicroMsg_encrypt.db](https://wenku.csdn.net/doc/5r0chnn3mr?spm=1055.2569.3001.10343)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡尔特斯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值