深刻理解JPEG圖像格式Jphide隱寫

0x00 隱寫原理

Jphide是基於最低有效位LSB的JPEG格式圖像隱寫算法,使用JPEG圖像做爲載體是由於相比其餘圖像格式更不容易發現隱藏信息,由於JPEG圖像在DCT變換域上進行隱藏比空間域隱藏更難檢測,而且魯棒性更強,同時Blowfish算法有較強的抗統計檢測能力。html

因爲JPEG圖像格式使用離散餘弦變換(Discrete Cosine Transform,DCT)函數來壓縮圖像,而這個圖像壓縮方法的核心是:經過識別每一個8×8像素塊中相鄰像素中的重複像素來減小顯示圖像所需的位數,並使用近似估算法下降其冗餘度。所以,咱們能夠把DCT看做一個用於執行壓縮的近似計算方法。由於丟失了部分數據,因此DCT是一種有損壓縮(Loss Compression)技術,但通常不會影響圖像的視覺效果。linux

0x01 隱寫過程

Jphide隱寫過程大體爲:先解壓壓縮JPEG圖像,獲得DCT係數;而後對隱藏信息用戶給定的密碼進行Blowfish加密;再利用Blowfish算法生成僞隨機序列,並據此找到須要改變的DCT係數,將其末位變爲須要隱藏的信息的值。最後把DCT係數從新壓回成JPEG圖片,下面是我的對隱寫過程理解畫出的大體流程圖。git

0x02 隱寫實現

(1)Stegdetectgithub

實現JPEG圖像Jphide隱寫算法工具備多個,好比由Neils Provos開發經過統計分析技術評估JPEG文件的DCT頻率係數的隱寫工具Stegdetect,它能夠檢測到經過JSteg、JPHide、OutGuess、Invisible Secrets、F五、appendX和Camouflage等這些隱寫工具隱藏的信息,而且還具備基於字典暴力破解密碼方法提取經過Jphide、outguess和jsteg-shell方式嵌入的隱藏信息。算法

(2)JPHSshell

而這裏介紹另外一款JPEG圖像的信息隱藏軟件JPHS,它是由Allan Latham開發設計實如今Windows和Linux系統平臺針對有損壓縮JPEG文件進行信息加密隱藏和探測提取的工具。軟件裏面主要包含了兩個程序JPHIDE和JPSEEK, JPHIDE程序主要是實現將信息文件加密隱藏到JPEG圖像功能,而JPSEEK程序主要實現從用JPHIDE程序加密隱藏獲得的JPEG圖像探測提取信息文件,Windows版本的JPHS裏的JPHSWIN程序具備圖形化操做界面且具有JPHIDE和JPSEEK的功能。app

1.Windows用戶請下載JPHS-05 for Windows,同時也提供下載Linux版本編輯器

2.分別準備一個JPEG格式的圖片(example.jpg)和一個文本文件(flag.txt)。ide

因爲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做爲密碼爲例,而後輸入要包含隱藏信息的文本。

5.選擇將要隱藏的信息如flag.txt。

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隱寫檢測方法

轉載請註明來自4ido10n's Blog文章《深刻理解JPEG圖像格式Jphide隱寫》

相關文章
相關標籤/搜索