png IDHR修改高度寬度枚舉腳本以及提取zlib腳本

來自夏風師傅的博客: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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章