如果一个人把自己的记忆弄丢了,那人生只是一个单纯的奔向死亡的过程,无论在他人眼中是什么样的存在,终究是一副空壳而已。而无论那记忆是美好,痛苦或是平淡,那都是我们生命中的一部分,无法割舍的深深的烙印。


# 效果图展示

  1. wechat-backup 导出
Image
  1. wechat-dump 导出
Image
  1. 聊天记录转 pdf
Image

# 聊天记录转移至模拟器

手机聊天记录备份至电脑 -> 电脑聊天记录备份至模拟器 -> 雷电模拟器开启 root -> 模拟器下载 ES 文件浏览器并启用 root 工具箱 -> 复制微信数据库等资料到共享文件

  1. 手机聊天记录备份至电脑后,将电脑上存储的聊天记录备份至电脑上的安卓模拟器
    Image

  2. 这里我用的是雷电模拟器,在设置里边可以直接开启 root 权限
    Image

  3. 模拟器安装 ES 文件浏览器,通过此文件管理工具操作文件
    Image

  4. ES 文件浏览器开启 Root 工具箱
    Image

  5. 此时已经有权限可以看到安卓模拟器上的所有文件夹及文件
    Image


# 收集微信相关数据

各文件夹具体作用参考文章:https://blog.greycode.top/posts/android-wechat-bak/

收集以下数据:
auth_info_key_prefs.xml uin 位置:/data/data/com.tencent.mm/shared_prefs/auth_info_key_prefs.xml
image2 所有的微信聊天图片:/data/data/com.tencent.mm/MicroMsg/[32 位字母]/image2
voice2 所有的微信语音:/sdcard/Android/data/com.tencent.mm/MicroMsg/[32 位字母]/voice2
voide 所有的微信视频:/sdcard/Android/data/com.tencent.mm/MicroMsg/[32 位字母]/voide
avatar 所有的微信头像:/data/data/com.tencent.mm/MicroMsg/[32 位字母]/avatar
Download 聊天发送的文件存放在这里:/sdcard/Android/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
emoji 表情包:/data/data/com.tencent.mm/MicroMsg/emoji

  1. 收集数据,以微信本地数据库 EnMicroMsg.db 为例,长按 -> 更多 -> 复制到
    Image

  2. 我选择了复制到 Applications 的共享文件,也可以选择 Alarms 及 dianxin
    Image

  3. 如果觉得传输速度太慢,可以先压缩,再复制过去解压
    Image

  4. 打开模拟器的共享在电脑上的文件夹的位置,判断复制成功
    Image

  5. 同样的方法,复制其他需要收集的数据到电脑上的共享文件中
    Image


# 数据前期处理

数据库解密参考文章:https://blog.csdn.net/sinat_25926481/article/details/122326313
音频解码参考文章:https://github.com/greycodee/wechat-backup

获取数据库密码 -> 解密微信数据库 -> 解码音频文件

  1. 获取 uin 值,如图 _auth_uin 所在行的值就是,我的为 - 1639125062

微信数据库密码为 IMEI+UNI 的 md5 加密后的前 7 位
IMEI+UNI:1234567890ABCDEF-1639125062
在线 md5 加密: https://md5jiami.bmcx.com/
命令行 md5 加密:echo -n “1234567890ABCDEF-1639125062” | md5

Image

如图,显示的前 7 位为我的数据库密码:23a9a94

  1. 通过获取到的数据库密码将 EnMicroMsg.db 导出为一个未加密的数据库,依次输入以下命令解密数据库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 安装sqlcipher -> 如果系统是os,请根据参考文章给出的方式安装工具
brew install sqlcipher

# 通过 sqlcipher 操作数据库
sqlcipher EnMicroMsg.db

# 依次在sqllite命令行输入以下命令
PRAGMA key = '23a9a94';
PRAGMA cipher_use_hmac = off;
PRAGMA kdf_iter = 4000;
PRAGMA cipher_page_size = 1024;
PRAGMA cipher_hmac_algorithm = HMAC_SHA1;
PRAGMA cipher_kdf_algorithm = PBKDF2_HMAC_SHA1;
ATTACH DATABASE 'EnMicroMsg_230721.db' AS EnMicroMsg_230721 KEY '';
SELECT sqlcipher_export('EnMicroMsg_230721');
DETACH DATABASE EnMicroMsg_230721;

# 删除无用的文件
rm -f EnMicroMsg.db-wal EnMicroMsg.db-shm
Image

如图,将导出为一个未加密的数据库,名为 EnMicroMsg_230721.db

  1. 同样的方法,解密微信索引数据库 WxFileIndex.db, 注意导出的数据库名字不可以重复
    Image

  2. 通过 docker 拉取 greycodee/silkv3-decoder 镜像,将编码后的 amr 格式解码为 mp3

1
2
# 我将 voice 发送到了装有 docker 的linux,执行以下命令解码音频后再传回来
docker run --rm -v /root/voice2:/media greycodee/silkv3-decoder
Image

# wechat-backup 导出 html

源码位置:https://github.com/greycodee/wechat-backup

修改代码中指向的数据库名和数据库索引表 -> 本地 web 查看聊天记录

  1. wechat-backup 是用 go 写出来的,star*2.2k, 效果还是很不错的
    Image

  2. 修改 db/wxdb.go 下的数据库名,改为刚才解码导出后的两个数据库
    Image

  3. 指定数据运行程序 go run main.go -f /Volumes/KINGSTON/微信数据库/230721_backup
    Image

  4. 查看聊天记录 http://127.0.0.1:9999
    Image


# wechat-dump 导出 html

源码位置:https://github.com/ppwwyyxx/wechat-dump

  1. wechat-backup 是用 py 写出来的,star*1.5k, 效果我很喜欢
Image
  1. 克隆项目 git clone https://github.com/ppwwyyxx/wechat-dump.git
Image
  1. 列出联系人及其微信号
    python list-chats.py /Volumes/KINGSTON/微信数据库备份/220921_backup/EnMicroMsg_220921.db > list_chats_22.txt
Image
  1. 导出数据库中的聊天记录
    python dump-msg.py /Volumes/KINGSTON/微信数据库备份/220921_backup/EnMicroMsg_220921.db res/msg
Image

如图,环境问题终于还是来了,不过这个脚本直接加个 try 就可以解决了

  1. 加个捕获异常可以正常导出聊天的 msg 信息
Image
  1. 可以看到每个人或者每个群的聊天记录的 msg 信息,可据此写写前端
Image

但是接下来将聊天记录导出为 html 的时候,碰到了很多奇怪的问题,自己索性修改了作者提供的源码


# 修改 wechat-dump 源码

源码位置:https://github.com/n1h1l157/wechat-dump

或许在调试的时候还是会遇到些 bug,建议自己 fork 下来断点调试

  1. 导出为 html
    python dump-html.py --db /Volumes/KINGSTON/微信数据库备份/220921_backup/EnMicroMsg_220921.db --res /Volumes/KINGSTON/微信数据库备份/230721_backup --output result/Camile/Camile.html wxid_qxxxxxxx22
Image
  1. 导出后的文件如图,html 被分为若干个
Image
  1. 可以本地预览这些 html 文件,表情包、图标、音频、视频等都是正常的,除非图片已经丢失
Image

# 导出聊天记录为 pdf

后面做了自定义的一些设置,直接把脚本贴到 github 了,需要自行阅读源码理解

  1. 按自己喜欢的方式做了一些小改变,将 html 拼接为一个整体的大的 html 文件

python merge_html.py -f /Users/chentuo/Personal/myself/微信数据库/wechat_dump/result/Camile -n Camile.html

Image
  1. 对 html 做处理,使得拼接后的 html 文件只保留最顶部的滚动条

python modify_html.py --nickname 'Camile' --input /Users/chentuo/Personal/myself/微信数据库/wechat_dump/result/Camile/Camile.html

30)通过 js 加载 puppeteer,用一个谷歌浏览器的测试版将 html 转为多页的 pdf

参考项目:https://github.com/puppeteer/puppeteer

node convert_html_to_pdf.js -f 'Camile' -n 20 -e '~/.cache/puppeteer/chrome/mac_arm-114.0.5735.133/chrome-mac-arm64/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing'

Image
  1. 最后聊天记录保存成了本地的 pdf 文件
Image

大功告成,结束。

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

.N1h1l157 微信支付

微信支付

.N1h1l157 支付宝

支付宝

.N1h1l157 贝宝

贝宝