异想之旅:本人原创博客完全手敲,绝对非搬运,全网不可能有重复;本人无团队,仅为技术爱好者进行分享,所有内容不牵扯广告。本人所有文章仅在CSDN、掘金和个人博客(一定是异想之旅域名)发布,除此之外全部是盗文!


概述

微信的数据文件根目录(WeChat Files)可以在设置中的“文件管理”选项中查看,通常位于电脑的“文档”文件夹中。

这其中有数据库文件以及收到的图片、视频、文件等等,而我们主要讨论的数据库文件,存放于WeChat Files/wxid_xxxxx/Msg之中。这里的wxid_xxxxx也可能是你自己设置的微信号。

这个文件夹中有很多文件,可能是用来校验的,我们只需要看.db结尾的 SQLite 文件。不过这些文件是经过 AES 加密的,所以我们需要找到密钥并且解密。

获取密钥

说实话这一步并不怎么一帆风顺,我在最开始做的时候踩了不少坑。

完成这一步大致有两个方向,直接用内存分析工具爆破微信(网上的博客中大多也说的是这个方式),不过在 GitHub 上其实有两个项目可以帮我们快速完成这一步:

  • AdminTest0/SharpWxDump
  • SpenserCai/GoWxDump(根据作者描述,这只是把上面那个项目使用 Go 重构的版本)

其中第一个项目在编译时就遇到了困难(本人没用过 C# 和 .NET),我最后是狠下心来跟着这篇教程下了个 VS 才编译出来,也将编译产物上传到了我 Fork 的仓库,然而发给别人用的时候发现似乎兼容性比较差,悲……不过应该说自己在自己的设备上用 VS 编译是最可靠的

第二个仓库就方便很多,只要电脑上有 Go 环境直接执行build.bat就行(记得配置go get的代理,否则下载第三方包会很慢)。不过需要说明的是,建议大家只使用它的show_info功能,它的解密极其不可靠。

我这里对 Go 的这个版本也进行了编译,下载地址

如果你使用的是第一个,那么下载好后用管理员身份从命令行运行exe,他就会输出类似下面的格式(中间乱码的WeChatMail忽略就行):

[+] WeChatProcessPID: 15176
[+] WeChatVersion: 3.9.2.23
[+] WeChatName: XXX
[+] WeChatAccount: wxid_xxxxx
[+] WeChatMobile: 1**********
[+] WeChatMail: ?M??@魢#??M????????????T?B
??L???3??????f7i?J???M??h?v??M??`?v????????T?B
?J?3?????f7
[+] WeChatKey: 92AD63A674************************222544426
[+] Done

如果是第二个,双击启动之后输入show_info并回车,会有类似这样的输出:

>>show_info
WeChat Version: 3.9.2.23
WeChat NickName: XXX
WeChat Account: wxid_xxxxx
WeChat Mobile: 1**********
WeChat Key: 92AD63A674************************222544426

其中的WeChatKey就是我们解密数据库文件需要的 AES 密钥。

解密数据库

打开微信数据文件所在的目录,例如我的是 D:\Documents\WeChat Files\wxid_r5xxxxxxxxxx12\Msg,将这里面的所有.db文件复制到一个新的文件夹中(别忘了Multi文件夹中还有一些),然后可以通过下面的 Python 脚本进行解密(在前两行输入好你的文件所在目录):

input_pass = '92AD63A674************************222544426'
input_dir = r'D:\微信数据库文件'import ctypes
import hashlib
import hmac
from pathlib import Pathfrom Crypto.Cipher import AESSQLITE_FILE_HEADER = bytes('SQLite format 3', encoding='ASCII') + bytes(1)
IV_SIZE = 16
HMAC_SHA1_SIZE = 20
KEY_SIZE = 32
DEFAULT_PAGESIZE = 4096
DEFAULT_ITER = 64000password = bytes.fromhex(input_pass.replace(' ', ''))def decode_one(input_file):input_file = Path(input_file)with open(input_file, 'rb') as (f):blist = f.read()print(len(blist))salt = blist[:16]key = hashlib.pbkdf2_hmac('sha1', password, salt, DEFAULT_ITER, KEY_SIZE)first = blist[16:DEFAULT_PAGESIZE]mac_salt = bytes([x ^ 58 for x in salt])mac_key = hashlib.pbkdf2_hmac('sha1', key, mac_salt, 2, KEY_SIZE)hash_mac = hmac.new(mac_key, digestmod='sha1')hash_mac.update(first[:-32])hash_mac.update(bytes(ctypes.c_int(1)))if hash_mac.digest() == first[-32:-12]:print('Decryption Success')else:print('Password Error')blist = [blist[i:i + DEFAULT_PAGESIZE]for i in range(DEFAULT_PAGESIZE, len(blist), DEFAULT_PAGESIZE)]with open(input_file.parent / f'decoded_{input_file.name}', 'wb') as (f):f.write(SQLITE_FILE_HEADER)t = AES.new(key, AES.MODE_CBC, first[-48:-32])f.write(t.decrypt(first[:-48]))f.write(first[-48:])for i in blist:t = AES.new(key, AES.MODE_CBC, i[-48:-32])f.write(t.decrypt(i[:-48]))f.write(i[-48:])if __name__ == '__main__':input_dir = Path(input_dir)for f in input_dir.glob('*.db'):decode_one(f)

这个脚本可以将你设置的目录下的所有.db文件进行解密,例如对于abc.db,会生成decoded_abc.db文件。特别说明的是,如果复制出来后你的Multi文件夹还是独立的一个文件夹,需要分别对D:\微信数据库文件操作和D:\微信数据库文件\Multi进行操作。

另外,xinfo.db无需解密,可直接查看。

解密后,你就可以通过任意一个你喜欢的数据库可视化查看工具查看这些数据库了。

关于各个数据库存放的数据内容,详见:

  • 微信PC端各个数据库文件结构与功能简述 - 根目录_微信用了哪些数据库_异想之旅的博客-CSDN博客
  • 微信PC端各个数据库文件结构与功能简述 - Multi文件夹_异想之旅的博客-CSDN博客

微信PC端数据库文件解密相关推荐

  1. 微信PC端各个数据库文件结构与功能简述 - Multi文件夹

    异想之旅:本人原创博客完全手敲,绝对非搬运,全网不可能有重复:本人无团队,仅为技术爱好者进行分享,所有内容不牵扯广告.本人所有文章仅在CSDN.掘金和个人博客(一定是异想之旅域名)发布,除此之外全部是 ...

  2. 微信PC端各个数据库文件结构与功能简述 - 根目录

    异想之旅:本人原创博客完全手敲,绝对非搬运,全网不可能有重复:本人无团队,仅为技术爱好者进行分享,所有内容不牵扯广告.本人所有文章仅在CSDN.掘金和个人博客(一定是异想之旅域名)发布,除此之外全部是 ...

  3. 解密保存Mac版微信聊天记录的数据库文件并导出聊天记录

    MacOS版本的微信的聊天记录保存在如下路径中的数据库文件中: ~/Library/Containers/com.tencent.xinWeChat/Data/Library/Application\ ...

  4. 微信PC端无法拖入文件

    问题:桌面文件或图片,无法拖入微信PC端,显示黑色圆圈禁止符号! 解决: 1.windows系统,按"WIN + R"出现"运行"对话框,然后在对话框中输入&q ...

  5. 微信PC端技术研究(2)-拿下语音

    微信PC端技术研究-保存聊天语音 by anhkgg(公众号:汉客儿) 2019年1月31日 2.6.6.28 0x0. 前言 虽然一直知道CE,也用过一段时间,但一直用不好,可能太笨. 最近又学习了 ...

  6. 微信PC端技术研究(2)-保存聊天语音

    微信PC端技术研究-保存聊天语音 转载地址: [原创]微信PC端技术研究(2)-保存聊天语音-软件逆向-看雪论坛-安全社区|安全招聘|bbs.pediy.com 0x0. 前言 最近又学习了某位大佬用 ...

  7. 微信PC端浏览器内置浏览器

    嵌入式Chromium框架(简称CEF) 是一个由Marshall Greenblatt在2008建立的开源项目,它主要目的是开发一个基于Google Chromium的Webbrowser控件,支持 ...

  8. 使用微信PC端的截图dll库实现微信截图功能(C++ Builder实现)

    使用微信PC端的截图dll库实现微信截图功能(C++ Builder实现) 网上有很多文章说"使用微信PC端的截图dll库实现微信截图功能",我用node实现截图也要用一下,于是找 ...

  9. 微信PC端有了新功能,快来看看你知不知道

    你们知道微信PC端更新了吗?它新增了几个功能,有兴趣了解的朋友就接着往下看吧. 1.文件路径更清晰 微信之前的文件存储路径,都是一串乱码的文件夹,不便于我们查找和管理. 微信更新后,现在接收到的文件路 ...

最新文章

  1. package extends 解析
  2. C#——《C#语言程序设计》实验报告——数据库编程——基于ADO.NET技术和WPF技术的简单数据库可视化工具DEMO
  3. 1.4 消息循环和回调函数
  4. Android API Guides---RenderScript
  5. matlab function的使用
  6. el-table文字超出隐藏;el-table表格文字一行展示,超出隐藏,多余的内容会在 hover时显示 ;
  7. pythonxlwt行居中_python3-xlwt-Excel设置(字体大小、颜色、对齐方式、换行、合并单元格、边框、背景、下划线、斜体、加粗)...
  8. 长三角,也开始“东北化”了
  9. union c语言大小,Union declaration(联合体声明)
  10. 12.整数转罗马数字-LeetCode
  11. php数字转千分制,JS实现金额千分制的转换以及还原
  12. 3DMax VRay 渲染笔记
  13. 卡秘生活APP是一款什么样的APP 关于卡秘生活疑问详细解答
  14. 网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
  15. 中国自主潜航器AUV—潜龙号
  16. html文字阴影效果图,CSS3 -- 文字阴影(text-shadow)
  17. 【动态规划】字符串编辑距离(Levenshtein距离)算法
  18. 基于QT实现的计算器(只需要简单的栈知识,不仅仅是四则运算,接近手机内置计算器功能)
  19. TFN TT70网络综合分析仪性能如何
  20. java操作XMLType的几种方法

热门文章

  1. windows服务器2012,ftp用File zilla连接不上是怎么回事???
  2. 怨恨别人最终伤害的只有自己
  3. 原创设计和尖端创新产品齐聚全球最大家具展中国家博会(广州)
  4. 新手做自媒体短视频,想入行的必看哦!博主的真实收入?
  5. 主板上的jrgb接口干什么用_教学|主板上这么多接口 你都认识吗?
  6. 我的世界显示java过老_我的世界:基岩版比Java多出的七个特性,都听过的非老mc莫属了!...
  7. beetlsql3 (一)简介
  8. 职教云python程序设计答案_智慧职教云课堂Python程序设计题目及答案
  9. python中pdb的使用教程
  10. Python工程师简历100条技能例句,写简历再也不用愁!!