微信聊天记录的图片DAT文件还原
本帖最后由 laironggui 于 2024-7-30 15:25 编辑微信聊天记录里的图片忘记保存原图过期了怎么办?备份微信聊天记录,图片全是一些DAT文件,无法直接预览,怎么办?
每次找个资料都可能会遇到这个问题,纠结来纠结去,终于找到了解决方案了。
可以把需要恢复的图片(在电脑的聊天记录存储里,查找*.dat,找到聊天记录时间附近的文件拷贝出来)
然后通过执行python脚本,直接得到解析后的图片成果:
完美~~~~
附代码:
# -*- coding:utf-8 -*-
import os
into_path = r'D:/test1'# 微信图片DAT文件存放路径
out_path = r"D:/test2" # 转换后的图片存放路径
def main(into_path, out_path):
dat_list = dat_files(into_path)
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]
imageDecode(temp_path, dat_file_name, out_path)
value = round((num / lens) * 100, 2)
print('正在处理--->[{}/{}] {}%'.format(num, lens, value))
def dat_files(file_dir):
dat = []
for files in os.listdir(file_dir):
if os.path.splitext(files) == '.dat':
dat.append(files)
return dat
def imageDecode(temp_path, dat_file_name, out_path):
dat_read = open(temp_path, "rb")
xo, j = Format(temp_path)
if j == 1:
mat = '.png'
elif j == 2:
mat = '.gif'
else:
mat = '.jpg'
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())
dat_read.close()
png_write.close()
def Format(f):
dat_r = open(f, "rb")
try:
a = [(0x89, 0x50, 0x4e), (0x47, 0x49, 0x46), (0xff, 0xd8, 0xff)]
for now in dat_r:
j = 0
for xor in a:
j = j + 1
i = 0
res = []
now2 = now[:3]
for nowByte in now2:
res.append(nowByte ^ xor)
i += 1
if res == res == res:
return res, j
except:
pass
finally:
dat_r.close()
if __name__ == '__main__':
main(into_path, out_path)
根据楼主的代码处理了一下,做个了EXE文件,需要的可以下载一下,链接:https://pan.baidu.com/s/19Y41O9jaxfs4OA7UwLtoMw?pwd=du3r
提取码:du3r 000ADC 发表于 2024-7-31 18:22
根据楼主的代码处理了一下,做个了EXE文件,需要的可以下载一下,链接:https://pan.baidu.com/s/19Y41O9ja ...
感谢分享 纯小白,有代码我都不会用.
000ADC 发表于 2024-7-31 18:22
根据楼主的代码处理了一下,做个了EXE文件,需要的可以下载一下,链接:https://pan.baidu.com/s/19Y41O9ja ...
试用了下,非常完美 感谢楼主分享!
实际测试了一下,有一些文件无法解析。
以下是GPT优化了一下的。
# -*- coding:utf-8 -*-
import os
into_path = r'D:\Administrator\下载\Compressed'# 微信图片DAT文件存放路径
out_path = r"D:\Administrator\下载\Documents" # 转换后的图片存放路径
def main(into_path, out_path):
dat_list = dat_files(into_path)
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]
imageDecode(temp_path, dat_file_name, out_path)
value = round((num / lens) * 100, 2)
print('正在处理--->[{}/{}] {}%'.format(num, lens, value))
def dat_files(file_dir):
dat = []
for files in os.listdir(file_dir):
if os.path.splitext(files) == '.dat':
dat.append(files)
return dat
def imageDecode(temp_path, dat_file_name, out_path):
dat_read = open(temp_path, "rb")
xo, j = Format(temp_path)
if j == 1:
mat = '.png'
elif j == 2:
mat = '.gif'
else:
mat = '.jpg'
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())
dat_read.close()
png_write.close()
def Format(f):
dat_r = open(f, "rb")
try:
a = [(0x89, 0x50, 0x4e), (0x47, 0x49, 0x66), (0xff, 0xd8, 0xff)]
for now in dat_r:
j = 0
for xor in a:
j = j + 1
i = 0
res = []
now2 = now[:3]
for nowByte in now2:
res.append(nowByte ^ xor)
i += 1
if res == res == res:
return res, j
except Exception as e:
print(f"An error occurred: {e}")# 打印错误信息,帮助调试
finally:
dat_r.close()
# 如果没有找到匹配项,返回一个默认值,例如 (0, 0)
return 0, 0
if __name__ == '__main__':
main(into_path, out_path)
000ADC 发表于 2024-7-31 18:22
根据楼主的代码处理了一下,做个了EXE文件,需要的可以下载一下,链接:https://pan.baidu.com/s/19Y41O9ja ...
360怎么报毒 怎么破 这功能很实用,谢谢
000ADC 发表于 2024-7-31 18:22
根据楼主的代码处理了一下,做个了EXE文件,需要的可以下载一下,链接:https://pan.baidu.com/s/19Y41O9ja ...
{:1_921:}感谢热心人 谢楼主,wx压缩过的图片看着是真难受,尤其是有用的时候{:1_909:} 谢谢大佬们 支持下 感觉不错 打算后面用其它语言试试 学习一下 amansbj 发表于 2024-11-11 11:18
感谢楼主分享!
实际测试了一下,有一些文件无法解析。
以下是GPT优化了一下的。
辛苦了 感谢~ 学习了,刚好需要 大佬有没有 png jpg 转 dat 格式的工具 太好了,需要这样软件 mac微信存储的dat文件有大佬知道在哪个目录不{:1_937:} 我就是来逛逛的,不是灌水,我认真的看了帖子。不过看不懂。