开始阅读之前,请确认是否处于这个地址,这是对本菜鸟辛勤码字最大的鼓励,感激不尽!
用winhex打开图片,前面 89 50 4e 47打头就是PNG格式的图片。
红框是IHDR标识,橙框是文件头,蓝框是crc检验码。
其它PNG图片的文件格式解析自行了解,这里简单粗暴上代码
# coding:utf8
# python3
# Clover modified on 2022/05/13
import zlib
import struct
import sys
crc32key = 0x35FD4C38 #crc校验码,前面补上0x告诉编译器这个是16进制数字
data = bytearray(b'\x49\x48\x44\x52\x00\x00\x01\xCE\x00\x00\x01\x49\x08\x06\x00\x00\x00') #从IHDR开始复制复制4+13=17个字节。
n = 1080 #理论上四个字节分辨率最高可以是65535,但一般图象分辨率不超过1080
for w in range(n):#高和宽不对都会影响CRC32的值,所以要一起爆破
width = bytearray(struct.pack('>i', w))#q为8字节,i为4字节,h为2字节
#Clover:不知道上面说的q和h是什么,i代表整形,4个字节存放,所以设置'i'输出才是4个字节
for h in range(n):
height = bytearray(struct.pack('>i', h))#'>' means big-endian, 高位在前
#Clover:1080最多用到16进制的低三位,其他情况自己改下代码
for x in range(2,4):
data[x+4] = width[x]
data[x+8] = height[x]
crc32result = zlib.crc32(data)
if crc32result == crc32key:
print(width,height)
#找到了,结束程序
sys.exit(0)