吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 10577|回复: 123
上一主题 下一主题
收起左侧

[Python 原创] 微信聊天记录的图片DAT文件还原

    [复制链接]
跳转到指定楼层
#
laironggui 发表于 2024-7-30 15:18 回帖奖励
本帖最后由 laironggui 于 2024-7-30 15:25 编辑

微信聊天记录里的图片忘记保存原图过期了怎么办?备份微信聊天记录,图片全是一些DAT文件,无法直接预览,怎么办?
每次找个资料都可能会遇到这个问题,纠结来纠结去,终于找到了解决方案了。
可以把需要恢复的图片(在电脑的聊天记录存储里,查找*.dat,找到聊天记录时间附近的文件拷贝出来)

然后通过执行python脚本,直接得到解析后的图片成果:

完美~~~~

附代码:
[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)[1] == '.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([newByte]))
    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])
                    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)




免费评分

参与人数 23吾爱币 +23 热心值 +20 收起 理由
lksdo886 + 1 + 1 我很赞同!
beatone + 1 谢谢@Thanks!
luanshils + 1 + 1 热心回复!
zhourj99 + 1 用心讨论,共获提升!
fhlfxtd + 1 + 1 我很赞同!
wx9265661 + 1 + 1 谢谢@Thanks!
hugh0680 + 1 感谢 感谢
HsiaoChau + 1 谢谢@Thanks!
saml + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
wzl90327 + 1 + 1 谢谢@Thanks!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
zxyfy + 1 用心讨论,共获提升!
y5230024 + 1 我很赞同!
supernox + 1 + 1 我很赞同!
江男 + 1 + 1 谢谢@Thanks!
hheedd + 1 + 1 谢谢@Thanks!
nothing222 + 1 + 1 谢谢@Thanks!
huangpei8 + 1 + 1 代码高手如云
2322 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
flight828 + 1 + 1 谢谢@Thanks!
尚三宝 + 1 谢谢@Thanks!
Ybushu + 1 我很赞同!
pjyeah + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
000ADC 发表于 2024-7-31 18:22
根据楼主的代码处理了一下,做个了EXE文件,需要的可以下载一下,链接:https://pan.baidu.com/s/19Y41O9jaxfs4OA7UwLtoMw?pwd=du3r
提取码:du3r

免费评分

参与人数 4吾爱币 +5 热心值 +4 收起 理由
luanshils + 3 + 1 热心回复!
shiban + 1 + 1 感谢
HsiaoChau + 1 谢谢@Thanks!
Jason_R + 1 + 1 热心回复!

查看全部评分

推荐
Jason_R 发表于 2024-8-7 14:25
000ADC 发表于 2024-7-31 18:22
根据楼主的代码处理了一下,做个了EXE文件,需要的可以下载一下,链接:https://pan.baidu.com/s/19Y41O9ja ...

感谢分享
推荐
eakon1 发表于 2024-8-2 10:12
推荐
wangsheng518 发表于 2024-12-6 09:47
这个 还原的时候 是不是 图片很小  很小
推荐
wujn 发表于 2024-8-21 11:20
000ADC 发表于 2024-7-31 18:22
根据楼主的代码处理了一下,做个了EXE文件,需要的可以下载一下,链接:https://pan.baidu.com/s/19Y41O9ja ...

试用了下,非常完美
推荐
amansbj 发表于 2024-11-11 11:18
感谢楼主分享!
实际测试了一下,有一些文件无法解析。
以下是GPT优化了一下的。


[Asm] 纯文本查看 复制代码
# -*- 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)[1] == '.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([newByte]))
    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])
                    i += 1
                if res[0] == res[1] == res[2]:
                    return res[0], 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)
推荐
shihuotiantang1 发表于 2024-11-2 20:06
000ADC 发表于 2024-7-31 18:22
根据楼主的代码处理了一下,做个了EXE文件,需要的可以下载一下,链接:https://pan.baidu.com/s/19Y41O9ja ...

360怎么报毒 怎么破
推荐
laotzudao0 发表于 2024-8-18 10:33
这功能很实用,谢谢
推荐
mishuai 发表于 2024-9-25 14:36
000ADC 发表于 2024-7-31 18:22
根据楼主的代码处理了一下,做个了EXE文件,需要的可以下载一下,链接:https://pan.baidu.com/s/19Y41O9ja ...

感谢热心人
123#
yicigang 发表于 2025-11-14 13:00
学习了,感谢楼主
122#
fadee 发表于 2025-11-14 09:03
感谢大神分享
121#
hu13865220548 发表于 2025-4-24 14:47
很实用的东西 谢谢
120#
leyhjs 发表于 2025-3-31 09:46
超赞,一直想找一个这样的东西,好多微信图片都过期没法看了,现在有这个了,不怕了
119#
liufurusu 发表于 2025-3-23 14:54
非常感谢,主要需要
118#
Pacino2025 发表于 2025-3-18 09:53
python这是要安装环境么
117#
xiangsi365 发表于 2025-2-26 19:46
谢谢分享
116#
hancy08 发表于 2025-2-6 22:12
感谢分享
115#
纯洁微笑 发表于 2025-1-21 15:46
感谢大神分享!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-4-17 15:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表