吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5456|回复: 122
收起左侧

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

    [复制链接]
laironggui 发表于 2024-7-30 15:18
本帖最后由 laironggui 于 2024-7-30 15:25 编辑

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

微信聊天记录里的原始的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)




免费评分

参与人数 22吾爱币 +22 热心值 +19 收起 理由
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 ...

感谢热心人
IceFireKen2727 发表于 2024-12-5 19:45
好想法,可以学习一下。
realy 发表于 2024-12-5 10:41
功能很实用,希望能好用一些
000ADC 发表于 2024-12-4 17:59
w572298341 发表于 2024-12-4 13:40
试了下还是不行,用别的软件代替了。谢啦

OK 好的
w572298341 发表于 2024-12-4 13:40
000ADC 发表于 2024-11-28 14:07
用管理权限打开看看

试了下还是不行,用别的软件代替了。谢啦
houjingqiu666 发表于 2024-11-30 11:10
好东西先收藏了
JokerShow 发表于 2024-11-29 10:08
感谢分享

000ADC 发表于 2024-11-28 14:07
w572298341 发表于 2024-11-28 12:46
为什么我运行后2-3秒钟软件就闪退?win10专业22H2

用管理权限打开看看
w572298341 发表于 2024-11-28 12:46
000ADC 发表于 2024-7-31 18:22
根据楼主的代码处理了一下,做个了EXE文件,需要的可以下载一下,链接:https://pan.baidu.com/s/19Y41O9ja ...

为什么我运行后2-3秒钟软件就闪退?win10专业22H2
xiaoxing365 发表于 2024-11-21 16:21
谢楼主,wx压缩过的图片看着是真难受,尤其是有用的时候
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-12-14 16:42

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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