轉載自:https://www.cnblogs.com/lxz-1263030049/p/9404251.html
目錄
這一篇是繼上一篇之後的另一篇關於隱寫術在ctf比賽中常見的套路問題:
MISC總結——隱寫術(一)詳情請見:https://blog.csdn.net/xuchen16/article/details/82969608
MISC總結——隱寫術(二)詳情請見:https://blog.csdn.net/xuchen16/article/details/82970062
MISC總結——隱寫術(三)詳情請見:https://blog.csdn.net/xuchen16/article/details/82970342
這應該是關於隱寫術問題的最後一篇文章了!!
如果有喜歡的請關注一下哦!!!!
本文參考自:先知社區:https://xz.aliyun.com/t/1875
隱寫術介紹:
隱寫術是關於信息隱藏,即不讓計劃的接收者之外的任何人知道信息的傳遞事件(而不只是信息的內容)的一門技巧與科學。
英文寫作Steganography,而這篇內容將帶大家瞭解一下CTF賽場上常見的圖片隱寫方式,以及解決方法。有必要強調的是,隱寫術與密碼編碼是完全不同的概念。
第一部分:基於DCT域的JPG圖片隱寫
知識背景:
JPEG圖像格式使用離散餘弦變換(Discrete Cosine Transform,DCT)函數來壓縮圖像,而這個圖像壓縮方法的核心是:
通過識別每個8×8像素塊中相鄰像素中的重複像素來減少顯示圖像所需的位數,並使用近似估算法降低其冗餘度。
因此,我們可以把DCT看作一個用於執行壓縮的近似計算方法。因爲丟失了部分數據,所以DCT是一種有損壓縮(Loss Compression)技術,但一般不會影響圖像的視覺效果。
在這個隱寫家族中,常見的隱寫方法有JSteg、JPHide、Outguess、F5等等
Stegdetect
實現JPEG圖像Jphide隱寫算法工具有多個,比如由Neils Provos開發通過統計分析技術評估JPEG文件的DCT頻率係數的隱寫工具Stegdetect,
它可以檢測到通過JSteg、JPHide、OutGuess、Invisible Secrets、F5、appendX和Camouflage等這些隱寫工具隱藏的信息,
並且還具有基於字典暴力破解密碼方法提取通過Jphide、outguess和jsteg-shell方式嵌入的隱藏信息。
JPHS
一款JPEG圖像的信息隱藏軟件JPHS,它是由Allan Latham開發設計實現在Windows和Linux系統平臺針對有損壓縮JPEG文件進行信息加密隱藏和探測提取的工具。
軟件裏面主要包含了兩個程序JPHIDE和JPSEEK, JPHIDE程序主要是實現將信息文件加密隱藏到JPEG圖像功能,
而JPSEEK程序主要實現從用JPHIDE程序加密隱藏得到的JPEG圖像探測提取信息文件,Windows版本的JPHS裏的JPHSWIN程序具有圖形化操作界面且具備JPHIDE和JPSEEK的功能。
Outguess
Outgusee算法是Niels Provos針對Jsteg算法的缺陷提出的一種方法:
- 嵌入過程不修改ECT係數值爲0,1的DCT係數,利用爲隨機數發生器產生間隔以決定下一個要嵌入的DCT係數的位置
- 糾正過程消除對效應的出現
對應的,也有針對該算法的隱寫工具,名字也叫Outguess。
JPHS
在實驗機中找到隱寫術目錄,打開圖片隱寫,打開圖片隱寫第四部分文件夾
在該文件夾找到JPhide.jpg
雙擊打開圖片,我們先確認一下圖片內容並沒有什麼異常
使用Stegdetect對圖片的隱寫方式進行檢測
從結果中得知是使用JPHide的隱寫,使用JPHS工具對隱寫信息進行提取
最後打開保存的文件,flag是flag{Good_you_got_it}
Stegdetect的指令介紹
-q 僅顯示可能包含隱藏內容的圖像。 -n 啓用檢查JPEG文件頭功能,以降低誤報率。如果啓用,所有帶有批註區域的文件將被視爲沒有被嵌入信息。如果JPEG文件的JFIF標識符中的版本號不是1.1,則禁用OutGuess檢測。 -s 修改檢測算法的敏感度,該值的默認值爲1。檢測結果的匹配度與檢測算法的敏感度成正比,算法敏感度的值越大,檢測出的可疑文件包含敏感信息的可能性越大。 -d 打印帶行號的調試信息。 -t 設置要檢測哪些隱寫工具(默認檢測jopi),可設置的選項如下: j 檢測圖像中的信息是否是用jsteg嵌入的。 o 檢測圖像中的信息是否是用outguess嵌入的。 p 檢測圖像中的信息是否是用jphide嵌入的。 i 檢測圖像中的信息是否是用invisible secrets嵌入的。 -V 顯示軟件版本號。 如果檢測結果顯示該文件可能包含隱藏信息,那麼Stegdetect會在檢測結果後面使用1~3顆星來標識 隱藏信息存在的可能性大小,3顆星表示隱藏信息存在的可能性最大。
首先,在cmd中運行,Stegdetect,對目標圖片進行檢測
發現結果顯示是jphide隱寫的可能性很大。
接着,我們使用工具JPHS提取信息
這是一款針對Jphide算法的隱寫工具,正如對症下藥,我們也得用對工具,才能更好的解決問題。
首先,在使用JPHS打開圖片,點擊Seek功能,緊接着會彈出一個密碼的輸入框,我們這裏默認爲空口令,直接點擊OK,將提取出來的信息保存爲flag.txt。
Outguess
實驗
- 在實驗機中找到隱寫術目錄,打開圖片隱寫,打開圖片隱寫第四部分文件夾
- 在該文件夾找到Outguess.jpg
- 雙擊打開圖片,我們先確認一下圖片內容並沒有什麼異常
- 使用Stegdetect對圖片的隱寫方式進行檢測
- 從結果中得知是使用JPHide的隱寫,使用JPHS工具對隱寫信息進行提取
- 最後打開保存的問就,flag是flag{Good_you_got_it}
第一步,在cmd中運行,Stegdetect,對目標圖片進行檢測
第二步,使用Outguess工具提取隱寫信息
點擊Enter key功能,輸入密碼,這裏我隱寫的時候,使用的密碼是123456
點擊Load image 加載目標圖片
點擊Extract file功能,將提取出來的信息保存成flag.txt文件。
打開保存後的文件,flag是flag{Outguess}
小結:
從上面的實驗來看,JPG圖片常用的隱寫方式一般也是DCT域的隱寫了,不過一般在CTF賽場上,這種題目是可以直接用Stegdetect所檢測出來的。
第二部分:數字水印隱寫
知識背景:
數字水印
數字水印(digital watermark)技術,是指在數字化的數據內容中嵌入不明顯的記號。
特徵是,被嵌入的記號通常是不可見或不可察的,但是可以通過計算操作檢測或者提取。
盲水印與傅里葉變換
這裏介紹的盲水印是以知乎某答主的頻域添加盲水印的文章爲基礎,在2016HCTF的也出了一個隱寫題目,也是以頻域爲背景的。
盲水印,是指人感知不到的水印,包括看不到或聽不見(沒錯,數字盲水印也能夠用於音頻)。
其主要應用於音像作品、數字圖書等,目的是,在不破壞原始作品的情況下,實現版權的防護與追蹤。
對圖像進行傅里葉變換,起始是一個二維離散傅里葉變換,圖像的頻率是指圖像灰度變換的強烈程度,將二維圖像由空間域變爲頻域後,
圖像上的每個點的值都變成了複數,也就是所謂的複頻域,通過複數的實部和虛部,可以計算出幅值和相位,計算幅值即對複數取模值,
將取模值後的矩陣顯示出來,即爲其頻譜圖。但是問題來了,複數取模後,數字有可能變的很大,遠大於255,如果數據超過255,
則在顯示圖像的時候會都當做255來處理,圖像就成了全白色。因此,一般會對模值再取對數,在在0~255的範圍內進行歸一化,
這樣才能夠準確的反映到圖像上,發現數據之間的差別,區分高頻和低頻分量,這也是進行傅里葉變換的意義
頻域盲水印隱寫
在實驗找到隱寫術目錄,打開圖片隱寫,打開圖片隱寫第五部分文件夾
在該文件夾找到ori.jpg,res,png
雙擊打開圖片,我們先確認一下圖片內容並沒有什麼異常
運行我提供的腳本,提取水印
有必要提以下的是,如果用mathlab生成的盲水印隱寫是不需要原圖的,這裏我能力有限,只能做到需要原圖才能提取水印。
python decode.py --original <original image file> --image <image file> --result <result file>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
|
提取盲水印
original 是輸入原圖, image是之後跟的是加入了水印的圖, result是保存水印圖片。
如果是像HCTF那樣的隱寫題,只需要有mathlab這個強大的工具,再運用提取盲水印的代碼,是不需要原圖的,代碼如下。
imageA = imread('3.bmp','bmp'); fftA = fft2(imageA); imshow(fftshift(fftA)) imshow(fft(rgb2gray(imread('shimakaze.bmp'))), [1,2]);
接下來就是最後一部分了
第三部分:圖片容差隱寫
知識背景:
容差
容差,在選取顏色時所設置的選取範圍,容差越大,選取的範圍也越大,其數值是在0-255之間。
容差比較的隱寫
beyond compare
beyond compare是一款很適合用來對圖片進行比較的工具,就圖片而言,它支持容差、範圍、混合等模式。
- 實驗:
在實驗中找到隱寫術目錄,打開圖片隱寫,打開圖片隱寫第六部分文件夾
在該文件夾找到 pokemon_1.jpg,pokemon_2.jpg
打開工具Beyond Compare,選擇圖片比較,導入兩張圖片
在左下角慢慢修改容差,
在容差的修改過程中得到了flag
打開工具,選擇圖片比較,導入pokemon_1.jpg,pokemon_2.jpg
選擇容差模式,並調整容差大小
小結:
如果在CTF賽場中,就隱寫這一部分,出題人給於兩張或者多張圖片,一般都是需要對圖片的內容進行比較的。
思考:
- Stegsolve 也有圖片的比較的功能,是否能完成這個隱寫?如果不可以爲什麼?
DCT.zip (0.074 MB) 下載附件