png宽高被改,crc无脑爆破

原理

一个图片的CRC码受图片这些参数影响,其中就有宽高

00 00 00 C8 00 00 00 25

通过上面这些数算出的CRC码:

当一个图片只被修改了宽高而没有被修改CRC码时,再通过前面的值去算CRC码就会跟原本的CRC值不一样。


判断

import zlib

image_data=open('图片路径','rb')
bin_data=image_data.read()
crc32key = zlib.crc32(bin_data[12:29])                 #使用函数计算
if crc32key==int(bin_data[29:33].hex(), 16):#对比算出的CRC和原本的CRC
    print('宽高没有问题')
else:
    print('宽高被改了')

爆破宽高

import binascii
import struct



crcbp = open("图片路径", "rb").read()    #打开图片
crc32frombp = int(crcbp[29:33].hex(),16)     #读取图片中的CRC校验值
print(crc32frombp)

for i in range(4000):                        #宽度1-4000进行枚举
    for j in range(4000):                    #高度1-4000进行枚举
        data = crcbp[12:16] + \
            struct.pack('>i', i)+struct.pack('>i', j)+crcbp[24:29]
        crc32 = binascii.crc32(data) & 0xffffffff
        #print(crc32)
        if(crc32 == crc32frombp):            #计算当图片大小为i:j时的CRC校验值,与图片中的CRC比较,当相同,则图片大小已经确定
            print(i, j)
            print('hex:', hex(i), hex(j))
            exit(0)

站在巨人的肩膀上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值