【微信取证篇】微信过期图片恢复之微信Dat文件加密原理和解密工具

【微信取证篇】微信过期图片恢复之微信Dat文件加密原理和解密工具挖一挖微信图片 看它藏着个什么世界 蘇小沐 wxdatviewer

大家好,欢迎来到IT知识分享网。

【微信取证篇】微信过期图片恢复之微信Dat文件加密原理和解密工具

挖一挖微信图片,看它藏着个什么世界—【蘇小沐】

1、实验环境

系统环境
Windows 11 专业工作站版,[v23H2(22631.3007)]
微信 for Windows版本,[v3.9.9.35]
Visual Studio Code,[v1.85.2]
Python,[v3.12.1]

(一)微信默认位置

最近更新微信才发现微信 for Windows版本v3.9保存的视频、文件存储位置又改回了【v3.7.0.26】版本之前的位置。

系统环境不同或者更改过存储路径的,建议直接在电脑微信设置里面查看,打开文件管理,查看保存路径。如果微信未登录可以尝试搜索”WeChat Files、FileStorage、MsgAttach“等相关文件夹查找。

图片

1、微信 for Windows版本:v3.7.0.26之前

  • 微信默认安装路径:C:\Program Files (x86)\Tencent\WeChat。
  • 微信默认存储路径:C:\Users\【电脑用户名】\Documents
  • 微信默认照片存储路径:C:\Users\【电脑用户名】\Documents\WeChat Files\【微信账号ID】\FileStorage\Image
  • 微信默认视频存储路径:C:\Users\【电脑用户名】\Documents\WeChat Files\【微信账号ID】\FileStorage\Video
  • 微信默认文件存储路径:C:\Users\【电脑用户名】\Documents\WeChat Files\【微信账号ID】\FileStorage\File

2、微信 for Windows版本:v3.7.0.26到v3.9.9.35

2022年5月底,从微信v3.7.0.26 版开始,FileStorage目录下多了一个”MsgAttach文件夹,微信视频、图片等的保存路径发生了重大改变,开始按群、好友分别保存了。具体参考我之前的文章【【微信取证篇】电脑版微信的照片视频文件位置变化】

【微信图片位置:C:\Users\【电脑用户名】\Documents\WeChat Files\【微信账户ID】\FileStorage\MsgAttach\【微信ID的MD5值】\Image\】

【微信视频位置:C:\Users\【电脑用户名】\Documents\WeChat Files\【微信账户ID】\FileStorage\MsgAttach\【微信ID的MD5值】\Video\】

图片

3、微信 for Windows版本v3.9.9.35

最近没怎么关注,暂不清楚微信 for Windows版本v3.7.0.26及后续哪个版本开始,微信保存的视频、文件存储位置又改回了【v3.7.0.26】之前的位置,而微信图片仍然是v3.7.0.26开始的“MsgAttach”文件夹新位置。

图片

但,影响不大,了解即可,总归是这几个目录下,个人没那么多精力微信每更新一次就记录它的变化!

【MsgAttach】目录下有许多长名称文件夹(文件夹名称对应微信ID的MD5值),每一个文件夹对应着与该好友/群聊的聊天图片,里面主要有”Image、Thumb“两个文件夹。

【微信图片位置:C:\Users\【电脑用户名】\Documents\WeChat Files\【微信账户ID】\FileStorage\MsgAttach\【微信ID的MD5值】\Image\】

图片

Thumb文件夹是缩略图,同样也可能存在很多照片,和Image目录下的文件夹一样都是按照阿拉伯数字”年-月”命名。

图片

(二)微信Dat文件解密原理

1、微信图片恢复原理

不管微信是登录还是退出状态,电脑端微信聊天收发过的视频、图片、文件都是保存在本地的,并不会像”微信聊天数据”如果微信未登录就无法解密,不过微信图片在本地的存储是Dat格式,而非常见的jpg、png等图片格式,所以无法直接打开浏览。

微信图片Dat解密不需要调用微信程序,不依赖微信ID和UIN等。

2、Dat文件加密原理:异或

获取Dat文件头信息,然后和常见的图片格式异或,如果异或的值相等,则得出解密后的文件类型

3、Dat数据和异或值全部异或

知道文件类型,将Dat全部数据和得到的”异或值“进行异或,即可解码出原图片文件。

(三)实操解码Dat文件

1、获取Dat文件头特征值

常见的几类图片格式的文件头,可通过十六进制文本编辑器打开查看。

后缀名 文件头
JPG/JPEG(.jpg) FF D8
PNG(.png) 89 50
Windows Bitmap(.bmp) 42 4D
GIF(.gif) 47 49 46 38
TIFF (.tif) 49 49 2A 00
CAD (.dwg) 41 43 31 30
Adobe Photoshop (.psd) 38 42 50 53

使用WinHex查看Dat文件头特征值,记录其开头两个16进制的值(57、8E),这两个值是解密的关键!

图片

2、求出”异或值”

【解密目标:与常见图片文件头”异或”得到相同的两个16进制值】

使用Windows自带的计算器,切换为”程序员”模式,将WinHex获取Dat文件头的特征值分别与常见的图片格式文件头值异或,当然,也可以一个个单独异或,如果异或得到相同的两个16进制值即为解码关键的”异或值“。

图片

从上面可以看出,使用(57、8E)分别和JPEG的头文件值(FF、D8)、PNG的头文件值(89、50)异或,结果是PNG的异或值相等,所以此Dat解码后的格式为PNG图片格式。

3、Dat整体异或

解出了,只需要将dat文件的所有数据都与”DE“异或便可以解密Dat数据,然后保存为对应的图片格式便可以打开查看了。

图片

另存为PNG图片。

图片

保存图片(解码成功后另存为JPG等图片格式也是可以正常查看的,主要是前面解码的时候不要搞错格式就行!!!)。

图片

(四)Dat解码工具

1、Python脚本解码

编写Python脚本,有Python环境的可以直接运行此Python代码,需要创建”D:/Dat文件副本”路径。然后把需要解密的Dat文件拷贝到”D:/Dat文件副本“位置下,运行脚本开始解密,解密后的图片自动输出到”D:/Dat文件副本/Dat解密图片”下。有需要的可以把输入、输出路径“替换成自己的。

建议拷贝”Dat文件副本“到新的目录来测试运行。如果删除了原Dat文件,那么电脑微信原始图片也就被删除,不会再显示在聊天记录中,需要恢复的话很难!!!总之,数据无价,操作需谨慎!

有编程能力的可以自行封装!

# !/usr/bin/env python3 # 微信Dat文件转图片 # JPG 16进制文件头 FF D8 # PNG 16进制文件头 89 50 # GIF 16进制文件头 47 49 # 微信.bat 16进制 a1 86--->jpg ab 8c--->jpg dd 04--->png # 自动计算异或值 import os into_path = r'D:/Dat文件副本' # 输入路径,确保此路径存在,将需要解码的Dat文件复制到此文件夹下 out_path = r"D:/Dat文件副本/Dat解密图片" # 输出路径,保存Dat解码后的图片文件 def create_directory(path): if not os.path.exists(path): os.makedirs(path) create_directory("D:/Dat文件副本/Dat解密图片") # 遇到保存路径不存在,则自动创建保存路径 def main(into_path, out_path): dat_list = Dat_files(into_path) # 以列表呈现路径文件夹下的Dat文件 lens = len(dat_list) if lens == 0: print('没有Dat文件') exit() num = 0 for dat_file in dat_list: # 逐步读取文件 num += 1 temp_path = into_path + '/' + dat_file # 拼接路径:微信图片路径+图片名 dat_file_name = dat_file[:-4] # 截取字符串 去掉.dat imageDecode(temp_path, dat_file_name, out_path) # 转码函数 value = int((num / lens) * 100) # 显示Dat转换进度 print('转换进度-->{}%'.format(value)) def Dat_files(file_dir): """ :param file_dir: 寻找文件夹下的dat文件 :return: 返回文件夹下dat文件的列表 """ dat = [] for files in os.listdir(file_dir): if os.path.splitext(files)[1] == '.dat': dat.append(files) return dat def imageDecode(temp_path, dat_file_name, out_path): dat_read = open(temp_path, "rb") # 读取.bat 文件 xo, j = Format(temp_path) # 判断图片格式并计算返回异或值函数 if j == 1: mat = '.png' elif j == 2: mat = '.jpg' else: mat = '.gif' out = out_path + '/' + dat_file_name + mat # 图片输出路径 png_write = open(out, "wb") # 图片写入 dat_read.seek(0) # 重置文件指针位置 for now in dat_read: # 循环字节 for nowByte in now: newByte = nowByte ^ xo # 转码计算 png_write.write(bytes([newByte])) # 转码后重新写入 dat_read.close() png_write.close() def Format(f): """ 计算异或值 各图片头部信息 png: 89 50 4e 47 jpeg:ff d8 ff gif: 47 49 46 38 """ dat_r = open(f, "rb") try: a = [(0x89, 0x50, 0x4e), (0xff, 0xd8, 0xff), (0x47, 0x49, 0x46)] for now in dat_r: j = 0 for xor in a: j = j + 1 # 记录格式 1:png 2:jpeg 3:gif i = 0 res = [] now2 = now[:3] # 取前三组判断 for nowByte in now2: res.append(nowByte ^ xor[i]) i += 1 if res[0] == res[1] == res[2]: return res[0], j except: pass finally: dat_r.close() # 运行 if __name__ == '__main__': main(into_path, out_path) 

运行此脚本,会显示Dat图片转换进度,运行完自动关闭。

图片

2、WxDatViewer工具

这款小工具着眼于对聊天图片进行直接、批量的整理,除了能批量把电脑端微信加密后的 dat 文件导出为图片外,还能直接批量查看dat图片,更是提供了诸如仅查看重复图片、过滤指定类型/大小/画面尺寸/时间范围的图片等选项,方便删除不重要的dat图片,特别适合整理PC端大量的微信图片文件

具体可以看作者介绍,因为没有什么上手难度,所以就没必要说太多!概括为强大、便携、速度快,所见即所得!!!

个人建议拷贝副本来转换,再三确认不需要了再删除!数据无价谨慎操作!!!

图片

3、参考资料

【微信取证篇】电脑版微信的照片视频文件位置变化

微信dat图片批量解密、查看、整理工具:WxDatViewer 2.5 – 吾爱激活成功教程

总结

加密可以有效防止其他人未经授权地访问和查看你的图片,在数据安全、个人隐私保护方面,这条路还很长!

书写片面,纯粹做个记录,有错漏之处欢迎指正。

公众号回复关键词【微信取证】自动获取资源合集,如链接失效请留言,便于及时更新。

【声明:欢迎转发收藏,喜欢记得点点赞!转载引用请注明出处,著作所有权归作者 [蘇小沐] 所有】

【注:本文的软件资源等收集于官网或互联网共享,如有侵权请联系删除,谢谢!】

记录
开始编辑:2024年 01月 21日
最后编辑:2024年 01月 24日

【往期精彩回顾】

▲ 【微信取证篇】电脑版微信的照片视频文件位置变化

▲ 【微信取证篇】取证遇到微信昵称、微信号、微信账号、微信ID一次性区分清楚(更新)

▲ 【微信取证篇】聊聊微信聊天记录的删除与数据恢复

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/126956.html

(0)
上一篇 2025-09-14 18:20
下一篇 2025-09-14 18:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信