欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

CRC**宽高

程序员文章站 2022-07-16 15:43:59
...

前言

有时CTF杂项给一张png图片,linux下打不开(白屏),Windows下可查看图片,就可能是宽高被修改

解析IHDR

CRC**宽高

例题

选自2020安恒月赛
下载压缩包解压出一张PNG图片,linux下打不开,如图所示
CRC**宽高
猜测是对其高或宽进行了更改,需要进行CRC**以获得原来的宽和高,修改回去就行了。

脚本

import zlib
import struct

filename = 'test.png'
with open(filename, 'rb') as f:
    all_b = f.read()
    crc32key = int(all_b[29:33].hex(),16)
    data = bytearray(all_b[12:29])
    n = 4095            #理论上0xffffffff,但考虑到屏幕实际/cpu,0x0fff就差不多了
    for w in range(n):          #高和宽一起**
        width = bytearray(struct.pack('>i', w))     #q为8字节,i为4字节,h为2字节
        for h in range(n):
            height = bytearray(struct.pack('>i', h))
            for x in range(4):
                data[x+4] = width[x]
                data[x+8] = height[x]
            crc32result = zlib.crc32(data)
            if crc32result == crc32key:
                print("宽为:",end="")
                print(width)
                print("高为:",end="")
                print(height)
                exit(0)

根据结果发现高被改了
CRC**宽高
修改回去即可
CRC**宽高
图片正常显示,得到flag
CRC**宽高

相关标签: CTF杂项