【CTF】圖片隱寫術 · 修復被修改尺寸的PNG圖片


✨前言

今天我們想來介紹一下關於圖片隱寫相關處理,以及修復被修改尺寸的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

版權所有,如需轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM