MISC總結——隱寫術(四)
目錄
這一篇是繼上一篇之後的另一篇關於隱寫術在ctf比賽中常見的套路問題:
這應該是關於隱寫術問題的最後一篇文章了!!
如果有喜歡的請關注一下哦!!!!
隱寫術介紹:
隱寫術是關於資訊隱藏,即不讓計劃的接收者之外的任何人知道資訊的傳遞事件(而不只是資訊的內容)的一門技巧與科學。
英文寫作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) 下載附件