✨前言
今天我們想來介紹一下關於圖片隱寫相關處理,以及修復被修改尺寸的PNG圖片。
關於PNG圖片的相關處理,是CTF Misc圖片隱寫術中極為基礎的一項操作,筆者這里是想要提一些做題過程中發現的小技巧。
✨CTF圖片處理基本套路
各種圖片類型
比較常見有PNG圖片,JPG圖片,GIF圖片。
其中GIF圖片通常涉及逐幀分離,后續操作等等。JPG、PNG圖片通常修改圖片尺寸,圖片隱寫術等等。后續我們要重點提的就是修復被修改尺寸的PNG圖片。
檢查詳細信息
很多時候重要信息就隱藏在圖片的詳細信息內,有可能是后續解題步驟所需信息或者Hint,例如可能是后續隱寫壓縮文件的解壓密碼等等,所以睜大眼睛仔細看哦。
十六進制編輯器處理
萬物皆文件,都可以用十六進制編輯器打開,這里筆者常用的十六進制編輯器是“010 Editor”,當然其他十六進制編輯器例如“WinHex”也是可以的。十六進制編輯器打開后仔細檢查,可以ASCII搜索“flag”、“key”或者其他題目提示信息。
kali分析文件
kali中file命令、binwalk命令都可以用來分析文件
其中如下命令可以用來分離隱寫文件
binwalk -e filename
foremost命令也可以用來分離隱寫文件,有些binwalk無法分離的可以使用foremost命令嘗試。
foremost filename
//反正筆者一般是binwalk分析文件,有隱寫就直接用foremost分離文件。
如下圖就分離出來隱寫的兩張圖片和一個zip壓縮包
當然其他還有zsteg工具、stegdetect工具、dd命令、手動分離等等。
神器 Stegsolve
stegsolve真可謂神器,可以用來幀查看,切換顏色通道,處理LSB隱寫等等。
File Format:文件格式
Data Extract:數據提取(常用來處理LSB隱寫)
Steregram Solve:立體試圖 可以左右控制偏移
Frame Browser:幀瀏覽器
Image Combiner:圖像合並(如果題目給出多張圖片,可以將兩張圖片進行XOR、OR、AND等操作,有時候兩張圖片異或運算后神奇地出現了一個二維碼!)
這里給出一個stegsolve modifed version Github鏈接
https://github.com/Giotino/stegsolve
//原版一般主流工具包中都有 網絡上也比較容易找到
腦洞大開
CTF就是這樣,50%的實力和50%的靈感,許多時候靈感是非常重要的。
✨修復被修改尺寸的PNG圖片
再次放上blog的頭圖
PNG文件結構
參考:https://www.cnblogs.com/lidabo/p/3701197.html
CRC循環冗余檢測比較常用,筆者在計算機網絡中就有學到。
這里我們重點提一下文件頭之后的數據塊
就是說一張PNG圖片第17個字節起的8個字節就表示了圖片的寬度高度信息。
那么我們有什么方法可以判斷一張PNG圖片的尺寸被修改了呢?
//筆者在寫blog的時候發現被修改尺寸的PNG圖片在Typora中無法預覽出圖片,而是以markdown鏈接的形式,這算是個新發現吧。
Irfanview
IrfanView是適用於Windows XP,Vista,7、8和10的快速,緊湊和創新的FREEWARE(非商業用途)圖形查看器。
這是筆者的默認圖片查看器,主要是因為啟動快,軟件體積小,支持保存格式多等等。筆者也是在做題過程中發現,如果PNG圖片被修改,用Irfanview打開時會有報錯提示。
//win10的照片(系統自帶的照片查看器)打開被修改尺寸的圖片是不會有報錯提示的。
TweakPNG
TweakPNG是用於檢查和修改PNG圖像文件的低級實用程序。它支持Windows XP及更高版本。為了充分利用它,您至少必須對PNG文件的內部格式有所了解。有關PNG的信息,請參見 PNG主頁。
或者可訪問該地址下載軟件:http://entropymine.com/jason/tweakpng/
當使用TweakPNg打開被修改尺寸或者是其他信息的PNG圖片時,會有提示。
提示CRC錯誤。
這里有兩種可能
1)圖片CRC被修改
可以嘗試用十六進制編輯器打開圖片,修改CRC。
2)圖片尺寸被修改
這時候就要用十六進制編輯器修改圖片尺寸了。
Python腳本計算正確的尺寸
import os
import binascii
import struct
crcbp = open("xxx.png", "rb").read() #打開圖片
for i in range(2000):
for j in range(2000):
data = crcbp[12:16] + \
struct.pack('>i', i)+struct.pack('>i', j)+crcbp[24:29]
crc32 = binascii.crc32(data) & 0xffffffff
if(crc32 == 0x38162a34): #圖片當前CRC
print(i, j)
print('hex:', hex(i), hex(j))
這里的腳本是在一個非常火的CTF培訓課程中了解到的
//原腳本長寬限制0~1023 筆者這里將其修改為2000防止圖片尺寸過大沒有遍歷到
鏈接:https://www.bilibili.com/video/BV1Kt411j7r7
使用時修改腳本中的打開圖片名稱和圖片當前CRC
然后在圖片所在目錄運行Python腳本
(或者填上要計算的圖片的絕對路徑,運行Python腳本)
我們這里修改后的腳本如下
然后運行腳本可得正確尺寸
然后我們再用十六進制編輯器復原圖片尺寸
當當當!就復原PNG圖片啦!
順便也驗證了筆者之前的猜想,PNG圖片修改為原尺寸后Irfanview打開就不會報錯。
233圖是筆者自己P的 順便安利《德魯納酒店》、《我的大叔》真的好看!!(跑題了...)
✨碎碎念
當然這只是圖片隱寫術中很小的一個知識點,但是或許可以拿去逗逗同學(?)
實戰中一般筆者Irfanview打開如果有報錯提示(表明PNG圖片尺寸被修改),一般隨緣修改下尺寸就行了,一般不會用Python腳本去爆破原始尺寸,解題速度要緊。
⭐轉載請注明出處
本文作者:雙份濃縮馥芮白
原文鏈接:https://www.cnblogs.com/Flat-White/p/13515090.html
版權所有,如需轉載請注明出處。