
?前言
今天我們想來介紹一下關于圖片隱寫相關處理,以及修復被修改尺寸的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 = https://www.cnblogs.com/Flat-White/p/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
著作權所有,如需轉載請注明出處,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/69479.html
標籤:其他
上一篇:絕對路徑和相對路徑
下一篇:【CTF】圖片隱寫術 · 盲水印
