深入理解JPEG影像格式Jphide隱寫

wyzsk發表於2020-08-19
作者: 4ido10n · 2016/05/12 10:33

0x00 隱寫原理


Jphide是基於最低有效位LSB的JPEG格式影像隱寫演算法,使用JPEG影像作為載體是因為相比其他影像格式更不容易發現隱藏資訊,因為JPEG影像在DCT變換域上進行隱藏比空間域隱藏更難檢測,並且魯棒性更強,同時Blowfish演算法有較強的抗統計檢測能力。

由於JPEG影像格式使用離散餘弦變換(Discrete Cosine Transform,DCT)函式來壓縮影像,而這個影像壓縮方法的核心是:透過識別每個8×8畫素塊中相鄰畫素中的重複畫素來減少顯示影像所需的位數,並使用近似估演算法降低其冗餘度。因此,我們可以把DCT看作一個用於執行壓縮的近似計算方法。因為丟失了部分資料,所以DCT是一種有失真壓縮(Loss Compression)技術,但一般不會影響影像的視覺效果。

0x01 隱寫過程


Jphide隱寫過程大致為:先解壓壓縮JPEG影像,得到DCT係數;然後對隱藏資訊使用者給定的密碼進行Blowfish加密;再利用Blowfish演算法生成偽隨機序列,並據此找到需要改變的DCT係數,將其末位變為需要隱藏的資訊的值。最後把DCT係數重新壓回成JPEG圖片,下面是個人對隱寫過程理解畫出的大致流程圖。

0x02 隱寫實現


(1)Stegdetect

實現JPEG影像Jphide隱寫演算法工具有多個,比如由Neils Provos開發透過統計分析技術評估JPEG檔案的DCT頻率係數的隱寫工具Stegdetect,它可以檢測到透過JSteg、JPHide、OutGuess、Invisible Secrets、F5、appendX和Camouflage等這些隱寫工具隱藏的資訊,並且還具有基於字典暴力破解密碼方法提取透過Jphide、outguess和jsteg-shell方式嵌入的隱藏資訊。

(2)JPHS

而這裡介紹另一款JPEG影像的資訊隱藏軟體JPHS,它是由Allan Latham開發設計實現在Windows和Linux系統平臺針對有失真壓縮JPEG檔案進行資訊加密隱藏和探測提取的工具。軟體裡面主要包含了兩個程式JPHIDE和JPSEEK, JPHIDE程式主要是實現將資訊檔案加密隱藏到JPEG影像功能,而JPSEEK程式主要實現從用JPHIDE程式加密隱藏得到的JPEG影像探測提取資訊檔案,Windows版本的JPHS裡的JPHSWIN程式具有圖形化操作介面且具備JPHIDE和JPSEEK的功能。

1.Windows使用者請下載JPHS-05 for Windows,同時也提供下載Linux版本

2.分別準備一個JPEG格式的圖片(example.jpg)和一個文字檔案(flag.txt)。

由於JPEG檔案使用的資料儲存方式有多種不能一一演示,這裡用最常用的JPEG格式-JPEG檔案交換格式(JPEG File Interchange Format,JFIF)作為示例。

這裡簡單介紹JPEG檔案交換格式的JPEG圖片的影像開始標記SOI(Start of Image)和應用程式保留標記APP0(Application 0),JPEG檔案交換格式的JPEG圖片開始前2個位元組是影像開始標記為0xFFD8,之後2個位元組接著便是應用程式保留標記為0xFFE0,應用程式保留標記APP0包含9個具體欄位,這裡介紹前三個欄位,第一個欄位是資料長度佔2個位元組,表示包括本欄位但不包括標記程式碼的總長度,這裡為10個位元組,第二個欄位是識別符號佔5個位元組0x4A46494600表示“JFIF0”字串,第三個欄位是版本號佔2個位元組,這裡是0X0101,表示JFIF的版本號為1.1,但也可能為其它數值,從而代表了其它版本號。

3.Windows版本可以使用具有圖形化操作介面的Jphswin,選擇“Open jpeg”開啟示例JPEG格式圖片example.jpg

如果你選擇的不是JPEG格式的圖片程式會自動退出,你可以16進位制編輯器如Winhex檢視圖片的影像開始標記SOI和應用程式保留標記APP0,當載入JPEG格式圖片會顯示一些圖片的屬性。

4.選擇“Hide”選項之後在兩次文字框輸入相同的密碼,這裡以輸入flag作為密碼為例,然後輸入要包含隱藏資訊的文字。

6.選擇“Save jpeg as”選項將圖片另存為jpeg格式並輸入檔案的名稱為新的影像檔案如C4n-u-find-f14g.jpg。

7.之後便可以看到生成結果和相關資訊。

8.第2步到第7步做的是Jhide方式資訊隱藏,接下來我們從C4n-u-find-f14g.jpg圖片提取出隱藏資訊。

9.如果之前你並不知道圖片是基於什麼方式進行資訊隱藏,你可以使用Stegdetect先進行探測。

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顆星表示隱藏資訊存在的可能性最大。

從下圖可以看出很可能是Jphide的資訊隱藏方式:

10.在知道隱藏方式之後可以開始進行資訊提取,和使用JPHS進行資訊隱藏過程類似,開啟需要提取隱藏資訊的圖片C4n-u-find-f14g.jpg,輸入對應密碼(在不知道密碼的情況不可以嘗試Stegdetect工具裡的Stegbreak程式進行基於字典的暴力攻擊)flag,密碼驗證透過JPHS會自動提取隱藏資訊,之後便可以另存提取出的資訊。

11.開啟提取得到的find.txt便可以得到我們想要的隱藏資訊。

0x03 參考資料


Jphide原理剖析及檢測

基於二次加密的JPhide隱寫檢測方法

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章