★圖片隱藏信息的用途
先來說說信息隱藏的目的。俺大致總結了一下,信息隱藏可以用于如下幾種場合。 (涉及敏感內容,此處省略191字) ◇傳遞加密信息 最后,圖片還可以用來隱藏加密的信息。關于加密的用途及重要性,俺在“文件加密的掃盲介紹 ”中,已經(jīng)強調過加密性。用圖片來隱藏加密信息,除了具有加密的效果,還具有很大的欺騙性——因為外人難以知道一張圖片是否包含有加密信息。 ★準備工作——先壓縮 下面,俺會介紹幾種不同的隱藏方式。在動手之前,先說一下準備工作——把要隱藏得文件先用壓縮工具(比如 7zip 或 WinRAR)壓縮一下。 壓縮有如下幾個好處: 優(yōu)點1 如果你要隱藏的文件是文本格式或者 Office 格式,它內部的內容是明碼的。如果里面包含敏感詞,在通過網(wǎng)絡傳輸時,會遭遇敏感詞過濾。而壓縮后的文件,原有的內容已經(jīng)變得面目全非,可以規(guī)律敏感詞過濾。 優(yōu)點2 壓縮之后,體積變小,有利于增加隱蔽性。因此,應盡量使用"最大壓縮"的選項。 優(yōu)點3 對于后面介紹的2種方法(尾部追加法、內容覆蓋法),如果你隱藏的文件是壓縮格式的,到時候提取信息會很簡便——直接用壓縮工具來解壓,即可。 ★尾部追加法 先介紹最簡單的一種方法。 ◇技術原理 顧名思義,"尾部追加法"就是把要隱藏的文件追加到圖片尾部。這種方法不會破壞圖片原有的任何數(shù)據(jù),因此,圖片看起來和原來一模一樣。 ◇隱藏信息的步驟 隱藏的過程很簡單,用 Windows 內置的文件拷貝命令,即可完成。假設你的圖片文件叫 A.JPG,需要隱藏的壓縮文件叫 B.ZIP,那你只需要執(zhí)行如下命令,就可以把兩個文件合并成一個新文件。 copy /b A.JPG + B.zip C.JPG 執(zhí)行完如上命令,即可得到一個新的圖片文件 C.JPG。這個圖片文件的大小是前兩者的總和。你可以用各種看圖工具來打開 C.JPG,不會看到什么異常。 ◇提取信息的步驟 由于你追加的是壓縮文件,提取的時候就簡單了——只要用壓縮工具打開 C.JPG,就可以直接看到壓縮包里面的內容了。 ◇優(yōu)點 1、 制作簡單,一條 copy 命令就可以搞定;如果隱藏的是壓縮文件,提取的過程也很簡單。 2、 用看圖工具看生成的新文件,還是跟原來一樣。 3、 隱藏的文件,大小不受限制。比如,你可以在一張100K的圖片尾部,追加200K的隱藏數(shù)據(jù)。 ◇缺點 1、 由于隱藏的文件附加在尾部。當你把這個新的圖片文件上傳到某些貼圖的網(wǎng)站,(假如這個網(wǎng)站對圖片格式的校驗比較嚴格)它有可能會發(fā)現(xiàn)圖片尾部有多余的數(shù)據(jù),并且會把這個多余的數(shù)據(jù)丟棄掉。 2、 追加后,圖片的文件尺寸變大了。如果你追加的文件太大,容易被發(fā)現(xiàn)破綻。 比方說,一張640*480的 JPEG 圖片,大小竟然有好幾兆,對于有經(jīng)驗的IT技術人員,一下子就會覺得有貓膩。 ★內容覆蓋法 說完尾部追加的辦法,再來介紹內容覆蓋的辦法。 ◇技術原理 通常,圖片文件都有包含2部分:文件頭和數(shù)據(jù)區(qū)。而"內容覆蓋法",就是把要隱藏的文件,直接覆蓋 到圖片文件的數(shù)據(jù)區(qū) 的尾部 。比方說,某圖片有100K,其中文件頭占1K,那么,數(shù)據(jù)區(qū)就是99K。也就是說,最多只能隱藏99K的文件。 切記:覆蓋的時候,千萬不可破壞文件頭 。文件頭一旦破壞,這個圖片文件就不再是一個合法的圖片文件了。 使用這種方法,對圖片文件的格式,是有講究的——最好用 24位色的 BMP 格式 。一來,BMP 格式本身比較簡單,數(shù)據(jù)區(qū)隨便覆蓋,問題不大;二來,24位色的 BMP 相對其它的格式 BMP,文件尺寸更大,可以隱藏更多內容。 ◇隱藏信息的步驟 用這個招數(shù)來隱藏信息,稍微有點麻煩,需要借助一些小工具。對于這種簡單的活計,俺通常用Python腳本來搞定。以下是俺寫的一個簡單 Python 腳本。你的電腦中如果有Python環(huán)境,可以直接拿這個腳本去用。 事先聲明:如下代碼沒有嚴格計算 BMP 的文件頭尺寸,俺只是大致預留了 1024 字節(jié),感覺應該夠了。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - import sys def embed(container_file, data_file, output_file) : container = open(container_file, "rb").read() data = open(data_file, "rb").read() if len(data)+1024 >= len(container) : print "Not enough space to save", data_file else : f = open(output_file, "wb") f.write(container[ : len(container)-len(data)]) f.write(data) f.close() if "__main__" == __name__ : try : if len(sys.argv) == 4 : embed(sys.argv[1], sys.argv[2], sys.argv[3]) else : print "Usage:" print sys.argv[0], "container data output" except Exception,err : print err - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 上述Python的代碼,很好懂,有編程基礎的同學,10分鐘之內就可以用自己熟悉的語言重寫一個類似的。 另外,沒學過 Python 的同學,如果有興趣,可以看看俺之前寫的系列帖子——為什么俺推薦Python? ◇提取信息的步驟 和前一種方法類似。如果你覆蓋的是壓縮文件,提取的時候,可以用壓縮工具打開圖片,就可以直接看到壓縮包里面的內容了。 ◇優(yōu)點 1、 圖片的文件尺寸沒變。 2、 雖然隱藏文件覆蓋到數(shù)據(jù)區(qū),破環(huán)了原圖像的內容。但是從格式上來講,該圖片文件的格式還是合法的。 因此,你可以把這種圖片上傳到各種貼圖的網(wǎng)站,技術上不會出問題。 3、 如果隱藏的是壓縮文件,提取的過程很簡單。 ◇缺點 1、 由于隱藏的文件覆蓋了數(shù)據(jù)區(qū),因此,圖片在顯示的時候,會有一塊區(qū)域變成灰蒙蒙的。 2、 隱藏文件的大小,有一定的限制——不能大于圖片數(shù)據(jù)區(qū)的尺寸。 3、 對圖片格式有一定要求。此處再啰嗦一下,建議用 24位色的 BMP 格式。 ★隱寫法 最后,來介紹一種最復雜,但是也最隱蔽的方法——隱寫術。 ◇技術原理 此方法會涉及較深奧的技術領域,俺也就知道個大概。通俗地說:如果把圖片的某個像素的顏色,進行微小的調整,肉眼是看不出來的;因此,專門的軟件,利用某些高深的算法,就可以在變化的像素中隱藏信息。 有興趣的同學,可以看"這里 "的介紹;懂洋文的,還可以看更詳細的介紹,在"這里 "。 ◇隱藏息/提取信息的步驟 使用這種方法,你需要用專門的工具來進行信息的隱藏和提取。在進行隱藏時,你除了指定圖片文件和被隱藏的文件,還需要設置一個密碼。隱寫工具會把你的隱藏文件先加密,然后再進行隱寫;提取的時候,需要用同一款隱寫工具進行提取,并輸入同樣的密碼,才能提取出來。 假如圖片文件落入攻擊者手中,他必須同時知道2個信息(你用哪款隱寫工具,你隱寫時設置的密碼),才有可能破解出隱含的信息。因此,安全性很高。 ◇相關工具 下面介紹幾款工具,大伙兒可以根據(jù)自己喜好,挑選一個試試看。 名稱 官網(wǎng) 界面 類型 Silent Eye 這里 圖形界面 開源軟件 Steg Hide 這里 命令行界面 開源軟件 Ultima Steganography 這里 圖形界面 商業(yè)軟件 ◇優(yōu)點 1、 隱蔽性非常好。圖片看上去幾乎沒變(其實是有極其輕微的變化,但是肉眼看不出)。并且,圖片文件的大小也沒變化。 即使是專業(yè)人士,也很難判斷一張圖片是否包含了隱寫術的數(shù)據(jù)。 ◇缺點 1、 隱藏信息和提取信息比較麻煩,需要使用專門的工具。 2、 只能隱藏較少的信息。 此方法能隱藏的信息量,和圖片面積有關,和圖片格式無關。比如一張1600*1200尺寸的,無論哪種格式,大約只能隱藏幾KB 的數(shù)據(jù)。 ★結尾 剛才介紹的幾個招數(shù),除了可以用于圖片文件,也可以用在其它的多媒體文件中(比如:音頻文件、視頻文件)。有興趣的網(wǎng)友,可以自個兒研究一下。 |
|