BUUCTF:[BJDCTF2020]一葉障目

Seanz7發表於2020-10-05

題目地址:https://buuoj.cn/challenges#[BJDCTF2020]%E4%B8%80%E5%8F%B6%E9%9A%9C%E7%9B%AE

在這裡插入圖片描述
題目圖片長這樣

在這裡插入圖片描述
使用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}

相關文章