挖一挖微信图片,看它藏着个什么世界—【蘇小沐】
系统环境 |
---|
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"等相关文件夹查找。
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\】
最近没怎么关注,暂不清楚微信 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格式,而非常见的jpg、png等图片格式,所以无法直接打开浏览。
微信图片Dat解密不需要调用微信程序,不依赖微信ID和UIN等。
获取Dat文件头信息,然后和常见的图片格式异或,如果异或的值相等,则得出解密后的文件类型。
知道文件类型,将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),这两个值是解密的关键!
【解密目标:与常见图片文件头"异或"得到相同的两个16进制值】
使用Windows自带的计算器,切换为"程序员"模式,将WinHex获取Dat文件头的特征值分别与常见的图片格式文件头值异或,当然,也可以一个个单独异或,如果异或得到相同的两个16进制值即为解码关键的"异或值"。
从上面可以看出,使用(57、8E)分别和JPEG的头文件值(FF、D8)、PNG的头文件值(89、50)异或,结果是PNG的异或值相等,所以此Dat解码后的格式为PNG图片格式。
解出了,只需要将dat文件的所有数据都与"DE"异或便可以解密Dat数据,然后保存为对应的图片格式便可以打开查看了。
另存为PNG图片。
保存图片(解码成功后另存为JPG等图片格式也是可以正常查看的,主要是前面解码的时候不要搞错格式就行!!!)。
编写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图片转换进度,运行完自动关闭。
这款小工具着眼于对聊天图片进行直接、批量的整理,除了能批量把电脑端微信加密后的 dat 文件导出为图片外,还能直接批量查看dat图片,更是提供了诸如仅查看重复图片、过滤指定类型/大小/画面尺寸/时间范围的图片等选项,方便删除不重要的dat图片,特别适合整理PC端大量的微信图片文件。
具体可以看作者介绍,因为没有什么上手难度,所以就没必要说太多!概括为强大、便携、速度快,所见即所得!!!
个人建议拷贝副本来转换,再三确认不需要了再删除!数据无价谨慎操作!!!
微信dat图片批量解密、查看、整理工具:WxDatViewer 2.5 - 吾爱破解
加密可以有效防止其他人未经授权地访问和查看你的图片,在数据安全、个人隐私保护方面,这条路还很长!
书写片面,纯粹做个记录,有错漏之处欢迎指正。
公众号回复关键词【微信取证】自动获取资源合集,如链接失效请留言,便于及时更新。
【声明:欢迎转发收藏,喜欢记得点点赞!转载引用请注明出处,著作所有权归作者 [蘇小沐] 所有】
【注:本文的软件资源等收集于官网或互联网共享,如有侵权请联系删除,谢谢!】
记录 |
---|
开始编辑:2024年 01月 21日 |
最后编辑:2024年 01月 24日 |