优秀的编程知识分享平台

网站首页 > 技术文章 正文

PNG图片宽度异常,写个python程序在kali里爆破并修改还原

nanyue 2024-11-27 18:16:39 技术文章 5 ℃

在CTF比赛中有时候会给一张图片,无法正常显示,图片宽度不正确,需要进行调整宽度爆破,以前通常在windows下用winhex进行修改图片宽度,使图像能正常显示。

比如有一张图片显示是这样的:

然后我把图片放在kali中,先使用pngcheck校验图片。

Bash
pngcheck -v -c flag.png

可以看到图片错误:

意思是IHDR计算结果是d1105f71,实际是52f8a40f,说明图像有被修改。我们使用一段python程序爆破它的宽度:

Bash
import os
import binascii
import struct


misc = open("flag.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 == 0x52f8a40f:
        print(hex(i))

运行python获得结果是0x2c6,这是正确的宽度。

我们用hexeditor打开flag.png,修改宽度:

将上图划线部分改为02c6 。快捷键ctrl+x保存退出。

打开图片可以看到正常的图片:

最近发表
标签列表