png IDHR修改高度宽度枚举脚本以及提取zlib脚本

21 篇文章 2 订阅
4 篇文章 0 订阅

来自夏风师傅的博客: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('修改宽度.png','rb').read(),0,re.S)#替换字符串,去掉IDAT头这里的re.S表示让 '.' 特殊字符匹配任何字符,包括换行符,事实上这里的.替换了length和CRC等无关数据为空串,
c=re.sub(b'........IEND....',b'',c,0,re.S)#替换字符串,去掉IEND尾
count=0
zlibhead=b'x\x9c\xed\x9d' #zlib头,注意不要重复
for i in c.split(zlibhead)[1:]:#从1开始是为了丢弃png signature
    open('flag'+str(count)+'.data','wb').write(zlib.decompress(zlibhead+i)) 
    count=count+1




根据crc爆破高度:

import os
import binascii
import struct
misc = open("attachment.png","rb").read()

for i in range(1024):
    data = misc[12:20] + struct.pack('>i',i)+ misc[24:29]
    crc32 = binascii.crc32(data) & 0xffffffff
    if crc32 == 0x73B90B29:
        print(i)

根据crc爆破宽度:

import os
import binascii
import struct
misc = open("attachment.png","rb").read()

for i in range(1024):
    data = misc[12:16] + struct.pack('>i',i)+ misc[20:29]
    crc32 = binascii.crc32(data) & 0xffffffff
    if crc32 == 0x73B90B29:
        print(i)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值