在做CTF中MISC分類題目時,很常見的一個問題就是修改圖片正確的寬與高
(此篇筆記中的內容以ctfshow中MISC入門分類為切入點,感興趣的同學可以一邊做一邊有不會的看看,僅供參考,我是菜雞)
曾經狠狠地被{there is no flag}教育了
-
bmp圖片口算圖片的寬與高(MISC24)
首先,我們在010editor中可以找到圖片此時的寬與高分別為900*150
同時,在010editor的最后一行可以看到結尾有4個0由windows自動補充,那么實際的像素點就是675040(0xA4CE0)+13=645053個像素點
因為BMP的頭部占據了53個,那么我們原本有645000個。
由因為有3個RGB通道,那么645000/3=225000個像素點,本題中款式沒有問題的,那么215000/900=250即為圖片正確的高,在010editor中修改高,即可得到flag。
要注意:bmp圖片的寬高值在十六進制數據中是倒置的!!! -
PNG圖片由crc32爆破寬與高(MISC25/26)
此處貼一crc爆破的jio本:
import struct
import binascii
import os
m = open("flag.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
根據腳本對圖片正確的寬高進行爆破,得到后在010中修改即可得到flag。
- JPG圖片(MISC27)
emm這個題,其實就是盡可能地將高搞大,在010editor中可以找到對應寬高的位置,進行修改即可。