电脑端⽤户图⽚DAT格式解码为图⽚
电脑硬盘空间被⼤量占⽤发现是⾃⼰账号下的Image⽂件夹引起的,因不清楚⾥⾯的图⽚有些是否有⽤。想逐⼀整理清理。
进去后发现都是dat格式,⽆法打开。修改后缀后仍⽆法打开,被加密了。
⼆进制⽅式打开⽂件后发现是这样的规律。通过异或运算加密了。
jpg:
ff d8 ff e0 20 10 4a 46 49 46 20 01 01
加密后:
17 30 17 08 e8 f8 a2 ae a1 ae e8 e9 e9
png:
89 50 4e 47 0d 0a 1a 0a 20 20 20 0d
加密后:
61 b8 a6 af e5 e2 f2 e2 e8 e8 e8 e5
解码代码如下(批量操作):
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
功能:电脑端⽤户图⽚DAT格式转化为图⽚
环境:python3.7
⽇期:2019/12/31 22:28
作者:指尖魔法师
版本:1.0
"""
import os
def main():
indir = r'G:\wx\2019-06'
outdir = r'G:\wx\out2019-06'
# 获取⽂件夹下所有⽂件
# 获取⽂件夹下所有⽂件
infiles = os.listdir(indir)
# 计数成功的⽂件个数
count = 0
# 循环每个⽂件进⾏判断、转换
for infile in infiles:
# 获取⽂件名
filename = infile[0:infile.find('.')]
# ⼆进制读取⽂件
f1 = open(os.path.join(indir, infile), 'rb')
infilebytes = f1.read()
newfile = []
# 判断图⽚类型JPG,通过异或判定
if (infilebytes[0] ^ 0xFF) == (infilebytes[1] ^ 0xD8):
y1 = infilebytes[0] ^ 0xFF
print('%s,⽂件是JPG图⽚,每个字节是根据0x%X异或进⾏加密' % (infile, y1))
# 字节进⾏异或转换,组合成新的⽂件
for i in infilebytes:
newbyte = i ^ y1
newfile.append(newbyte)
newfile2 = bytes(newfile)
# 写⼊新⽂件
f2 = open(os.path.join(outdir, filename+'.jpg'), 'wb')
f2.write(newfile2)
count += 1
# 判断图⽚类型PNG,通过异或判定
elif (infilebytes[0] ^ 0x89) == (infilebytes[1] ^ 0x50):
y1 = infilebytes[0] ^ 0x89
print('%s,⽂件是PNG图⽚,每个字节是根据0x%X异或进⾏加密' % (infile, y1))            for i in infilebytes:
newbyte = i ^ y1
newfile.append(newbyte)
python怎么读取dat文件
newfile2 = bytes(newfile)
f2 = open(os.path.join(outdir, filename+'.png'), 'wb')
f2.write(newfile2)
count += 1
# 判断图⽚类型GIF,通过异或判定
elif (infilebytes[0] ^ 0x47) == (infilebytes[1] ^ 0x49):
y1 = infilebytes[0] ^ 0x47
print('%s,⽂件是GIF图⽚,每个字节是根据0x%X异或进⾏加密' % (infile, y1))            for i in infilebytes:
newbyte = i ^ y1
newfile.append(newbyte)
newfile2 = bytes(newfile)
f2 = open(os.path.join(outdir, filename+'.gif'), 'wb')
f2.write(newfile2)
count += 1
else:
print('%s⽆法识别的类型!' % infile)
print('识别出图⽚%d张' % count)
if __name__ == '__main__':
main()
运⾏结果:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。