欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2024-03-26 18:26:17
微信已经成为非常重要的社交工具了,但是随着使用的年限增加,微信会产生大量的文件占据手机磁盘空间,而且很多文件都是dat格式,不能正常打开。这些文件其实都是聊天时候的图片,那么如何可以正常地看到图片并打...

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

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

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

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

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

【c:usersadministratordocumentswechat files】

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

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

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

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

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,不选择删除源文件,是不会有影响的。软件会读取文件,并转码后重新生成文件,并与源文件同名。

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