小工具知识网

当前位置: 首页 > 行业知识 > 【微信取证篇】微信过期图片恢复之微信Dat文件加密原理和解密工具

行业知识

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

2026-10-25 09:27:17 来源:互联网转载

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

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

文章目录

    • 【微信取证篇】微信过期图片恢复之微信Dat文件加密原理和解密工具
      • 1、实验环境
      • (一)微信默认位置
        • 1、微信 for Windows版本:v3.7.0.26之前
        • 2、微信 for Windows版本:v3.7.0.26到v3.9.9.35
        • 3、微信 for Windows版本v3.9.9.35
        • (二)微信Dat文件解密原理
          • 1、微信图片恢复原理
          • 2、Dat文件加密原理:异或
          • 3、Dat数据和异或值全部异或
          • (三)实操解码Dat文件
            • 1、获取Dat文件头特征值
            • 2、求出"异或值"
            • 3、Dat整体异或
            • (四)Dat解码工具
              • 1、Python脚本解码
              • 2、WxDatViewer工具
              • 3、参考资料
              • 总结
              • 【往期精彩回顾】

                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 osinto_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 datdef 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一次性区分清楚(更新)

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

上一篇:Win10系统上实现Win7安装,详细操作指南

下一篇:你哪级啊