【工具】-Misc-PNG图片高度宽度CRC爆破脚本

文章介绍了CRC32在PNG图片中的作用,用于验证数据完整性。当PNG图片的宽高被修改后,可能在某些系统中导致错误。提供了一个Python脚本,用于遍历并寻找新的宽高值,以保持CRC校验的正确性,适用于CTF挑战中修复图片。
摘要由CSDN通过智能技术生成

什么是CRC

这里的CRC指的是CRC32,也就是PNG图片的一个效验位,是一种不可逆运算,类似于MD5,作为数据效验或效验文件的完整性使用。

使用010 Editor打开一个PNG图片,89 50 4E 47 0D 0A 1A 0A (0h行0-7这8个)是PNG的固定文件头(啊?别告诉我还不知道在哪里,第一行粉底白字看到了吧)。

00 00 00 0D是文件头数据块标示IDCH。

49 48 44 52是IHDR。

接下来第二行前8个hex数据都是表示宽高的:00 00 07 80 00 00 09 5F,这里表示宽度为07 80,高度为09 5F,这两组数据转换为10进制就是1920x2399。

08 02 00 00 00这5个字节依次为Bit depth,ColorType,Compression method,Filter method,Interlace method

接下来的4组(16个)Hex组成的则是CRC校验码,我这里是13 97 08 36

CRC的原理,就是由IDCH和IHDR共十七位字节进行crc计算得到的。

爆破宽高

有的CTF题目会修改PNG图片的宽高,这在没有CRC检测的国内软件或Windows的图片看来是正常的。

但是一旦在Linux、MacOs等打开,则会出现报错。

前面提到了CRC的原理,我们借鉴网络上的脚本进行了修改。

import struct
import zlib

def hexStr2bytes(s):
    b = b""
    for i in range(0,len(s),2):
        temp = s[i:i+2]
        b +=struct.pack("B",int(temp,16))
    return b


str1="49484452"  # IHDR
width = "0x0780"
height = "0x0095E" # 高度与上面的不统一
str2="0802000000" # Bit depth,ColorType,Compression method,Filter method,Interlace method
crc32 = "0x13970836"
add_num = 2000 # 最大宽高,合理修改快速出flag
bytes1=hexStr2bytes(str1)
bytes2=hexStr2bytes(str2)
wid = int(width,16)
hei = int(height,16)

for w in range(wid,wid+add_num):
    for h in range(hei,hei+add_num):
        width = hex(w)[2:].rjust(8,'0')
        height = hex(h)[2:].rjust(8,'0')
        bytes_temp=hexStr2bytes(width+height)
        if eval(hex(zlib.crc32(bytes1+bytes_temp+bytes2))) == eval(crc32):
            print(hex(w),hex(h))
            break
    if eval(hex(zlib.crc32(bytes1+bytes_temp+bytes2))) == eval(crc32):
        # print(hex(w),hex(h))
        break

上面的脚本参考案例(前人)是引用了https://blog.csdn.net/weixin_44145452/article/details/109612189,摸着他建的墙,我才得以趟过这条河。

不过也对他的脚步进行了优化和改良,修改了一些代码问题、逻辑问题等。

后续我们也会给这个脚本增加到qsnctf库中,努力整合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值