python数据解密-dat⽂件转图⽚(⽀持JPG,PNG,GIF)python数据解密-dat⽂件转图⽚(JPG,PNG,GIF,附可执⾏⽂件exe)
1. dat⽂件路径 (确保有路径,或⾃⼰修改)
into_path =r'C:\image'# image.dat⽂件路径
2. 输出图⽚路径
out_path =r"C:\image\jpg\\"
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:\image\jpg\\"
"""
解码
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='\n\n')
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:
python怎么读取dat文件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:\image\jpg\
**
dat⽂件转图⽚.exe
***********************************************
闲于时间,回过头来看看,发现有⼀些bug,可以优化⼀下(2021.7.14)bug:
1.路径⽂件夹下,存在⾮dat格式的⽂件 会报错。
优化:只寻dat格式⽂件,没有输出提⽰信息,并结束程序。
2.虽然可以处理jpg,png等的格式。但只保存了jpg的,修改成对应格式转换***********************************************
具体代码如下:
# 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⽂件路径
out_path =r"C:/image/jpg"
def main(into_path, out_path):
dat_list = Dat_files(into_path)# 把路径⽂件夹下的dat⽂件以列表呈现
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]# 截取字符串去掉.dat
imageDecode(temp_path, dat_file_name, out_path)# 转码函数
value =int((num / lens)*100)# 显⽰进度
print('正在处理--->{}%'.format(value))
def Dat_files(file_dir):
"""
:param file_dir: 寻⽂件夹下的dat⽂件
:return: 返回⽂件夹下dat⽂件的列表
"""
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")# 读取.bat ⽂件
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):
"""
计算异或值
各图⽚头部信息
png:89 50 4e 47
gif: 47 49 46 38
jpeg:ff d8 ff
"""
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# 记录是第⼏个格式 1:png 2:gif 3:jpeg
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)
谢谢阅读,感谢⽀持!如有错误,请多多指教