來自夏風師傅的博客:https://blog.xiafeng2333.top/ctf-28/
#python3
import binascii
from Crypto.Util import number
p = open('perceptron2.png','rb').read()
# print(p[0x14:0x17]+chr(0xaf).encode()[-1:])
count = 0
height=160
for width in range(1020,1200):
data = p[:0x10] +width.to_bytes(4,'big') + height.to_bytes(4,'big')+ p[0x18:0x1d]
p2 =data + number.long_to_bytes(binascii.crc32(data[0xc:0x1d])&0xffffffff) + p[0x21:]
p1 = open('te2/'+str(count)+'.png','wb')
count += 1
p1.write(p2)
p1.close()
#這裏直接提取三個zlib
import re,os
import zlib
c=re.sub(b'........IDAT',b'',open('perceptron.png','rb').read(),0,re.S)#替換字符串,這裏的re.S表示讓 '.' 特殊字符匹配任何字符,包括換行符,事實上這裏的.替換了length和CRC等無關數據爲空串,
count=0
for i in c.split(b'x\x9c')[1:]:#從1開始是爲了丟棄png signature
open('flag'+str(count)+'.data','wb').write(zlib.decompress(b'x\x9c'+i))
count=count+1