题目地址:https://buuoj.cn/challenges#[BJDCTF2020]一叶障目
题目图片长这样
使用010 Editor打开出现CRC不匹配报错
图片能正常打开,但是出现CRC匹配错误一般是修改了宽高
这里也不知道原始宽高是多少,我是直接手动测试修改,也没测多久
当修改宽为:01 E2,高为:07 77
保存,打开图片,注意不要拉大 拉大就变这样了哈哈哈哈
做完之后在网上找了下,看到有大佬写了修复CRC错误的脚本 tqltql
#coding=utf-8 import zlib import struct #读文件 file = '1.png' #注意,1.png图片要和脚本在同一个文件夹下哦~ fr = open(file,'rb').read() data = bytearray(fr[12:29]) crc32key = eval(str(fr[29:33]).replace('\\x','').replace("b'",'0x').replace("'",'')) #crc32key = 0xCBD6DF8A #补上0x,copy hex value #data = bytearray(b'\x49\x48\x44\x52\x00\x00\x01\xF4\x00\x00\x01\xF1\x08\x06\x00\x00\x00') #hex下copy grep hex n = 4095 #理论上0xffffffff,但考虑到屏幕实际,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] #print(data) crc32result = zlib.crc32(data) if crc32result == crc32key: print(width,height) #写文件 newpic = bytearray(fr) for x in range(4): newpic[x+16] = width[x] newpic[x+20] = height[x] fw = open(file+'.png','wb')#保存副本 fw.write(newpic) fw.close flag{66666}