BMP图片

image-20231017135138955

  • 文件类型

前两个字节为42 4D字符为BM

  • 文件大小

占4个字节,如图中A6 4E 12 00,颠倒后为00 12 4E A6,所以该图片的大小为1199782字节

  • 图片宽度

占4个字节,如图中7A 03 00 00,颠倒后为00 00 03 7A,所以该图片宽度为890像素,约等于文件大小(00 12 4E A6) / 3 / 高度(00 00 01 C1)

  • 图片高度

占4个字节,如图中C1 01 00 00,颠倒后为00 00 01 C1,所以该图片的高度为449像素,约等于文件大小(00 12 4E A6) / 3 / 宽度(00 00 03 7A)

PNG图片

image-20231017151428710

  • 文件类型

占8个字节,为png的文件头:89 50 4E 47 0D 0A 1A 0A ,固定格式

  • 图片宽度

占4个字节,如图00 00 04 14,图片高度为1044像素

  • 图片高度

占4个字节,如图00 00 00 96,图片高度为150像素

  • CRC32校验块

占4个字节,如图E1 4A 4C 0B,值由从第12个字节到第28个字节的十七位字节进行crc计算得到

PNG图片要计算正确的宽高需要进行CRC32爆破

CRC32爆破脚本:

import struct
import binascii
 
m = open("./res/misc.png","rb").read()
k=0
for i in range(5000):
    if k==1:
        break
    for j in range(5000):
        c = m[12:16] + struct.pack('>i', i) + struct.pack('>i', j)+m[24:29]
        crc = binascii.crc32(c) & 0xffffffff
        if crc == 0x889C2F07:
        #目标图片对应的crc值
            k = 1
            print(hex(i),hex(j))
            break

JPG图片