如何更改dat文件格式(dat文件的打开方式)

微信已经成为非常重要的社交工具了,但是随着使用的年限增加,微信会产生大量的文件占据手机磁盘空间,而且很多文件都是dat格式,不能正常打开。

这些文件其实都是聊天时候的图片,那么如何可以正常地看到图片并打开呢?

首先,了解我的微信dat文件到底在哪里?

一般来说,pc端的微信在安装的时候都是默认安装的,自定义安装的话就只能自己想想自己安装到哪里去了。

【c:usersadministratordocumentswechat files】

这个是默认安装的路径,找到后进去,里面就能看到以自己的微信号命名的文件夹。

然后点进去后就是微信pc端的所有数据。

其次,再看看如何实现转换?

1.dat文件路径 (确保已有路径,或自己修改)

into_path = r'c:image'  # 微信image.dat文件路径  

2.输出图片路径

out_path = r"c:imagejpg\"

3.输入代码

# weixin_image.dat 破解
# jpg 16进制 ff d8 ff
# png 16进制 89 50 4e 47
# gif 16进制 47 49 46 38
# 微信.bat 16进制 a1 86----->jpg  ab 8c----jpg     dd 04 --->png
# 自动计算异或 值
import os
into_path = r'c:image'  # 微信image.dat文件路径   
						#我这把路径写死了,运行可执行文件前 先创建这个路径把dat文件放在这
out_path = r"c:imagejpg\"
"""
    解码
    param f: 微信图片路径
    param fn:微信图片目录下的.dat
    return:
"""
def imagedecode(f, fn):
    dat_read = open(f, "rb")  						# 读取.dat 文件
    xo = format(f)  								# 判断图片格式 并计算返回异或值 
    out = out_path + fn + ".jpg"  					# 图片输出路径
    print("文件输出路径{}".format(out), end='nn')
    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 findfile(f):
    """
    寻找文件
    param f:微信图片路径
    return:
    """
    fsinfo = os.listdir(f) 		 					# 把路径文件夹下的文件以列表呈现
    print(fsinfo)
    for fn in fsinfo:  								# 逐步读取文件
        temp_path = os.path.join(f, fn)  			# 拼接路径:微信图片路径+图片名
        if os.path.isfile(temp_path):  				# 判断目录还是.dat  #temp_path需为绝对路径,判断是否为文件,也可 if not os.path.isdir(temp_path):
            print('找到文件路径{}'.format(temp_path))
            fn = fn[:-4]  							# 截取字符串 去掉后缀.dat
            imagedecode(temp_path, fn)  			# 转码函数
        else:
            pass




def format(f):
    """
    计算异或值
    各图片头部信息
    jpeg:ff d8 ff
    png:89 50 4e 47
    gif: 47 49 46 38
        """
    dat_r = open(f, "rb")

    try:
        a = [(0x89, 0x50, 0x4e), (0x47, 0x49, 0x46), (0xff, 0xd8, 0xff)]
        for now in dat_r:
            for xor in a:
                i = 0
                res = []
                nowg = now[:3]						#取前三个 数据信息
                for nowbyte in nowg:
                    res.append(nowbyte ^ xor[i])	#进行判断
                    i += 1
                if res[0] == res[1] == res[2]:		#三次异或值想等 说明就是那种格式
                    return res[0]					#返回异或值
    except:
        pass
    finally:
        dat_r.close()


# 运行
if __name__ == '__main__':
    findfile(into_path)

也可以直接使用打包好的exe软件

注意

dat文件路径:c:image	  没有先创建好 将要转换的微信dat文件 放到此处
图片输出路径:c:imagejpg

转码后只要不删除dat,不选择删除源文件,是不会有影响的。软件会读取文件,并转码后重新生成文件,并与源文件同名。

我们可以根据文件名进行排序或根据类型进行排序,然后对文件进行处理。

(0)
上一篇 2022年3月23日
下一篇 2022年3月23日

相关推荐