電腦硬盤空間被大量佔用發現是微信自己賬號下的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)
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()
運行結果: