本文是對簡單隱寫和ctf中隱寫思路的一個小總結
推薦我的另兩篇博客
常見文件格式特征
ctf常用隱寫工具介紹
隱寫的載體
文本、圖像、音頻、視頻
文本隱寫
1、利用文檔格式:行移、子移、字符顏色、字符字體等,如行移,調整文本數據的垂直行距,比如上移為1下移為0。字移,每一行的字符,左右移動。將字符顏色調整為和背景相同的顏色白色。
2、利用空格回車標點:添加空格,回車,或者使用逗號句號,或者英文版和中文版的標點等
3、利用字符特征:將兩個字符縮小間距,使其看起來為一個字符
4、利用自然語言:同義詞替換,或者句法變換,如把字句和被字句
5、利用office中自帶的隱藏功能:
在word中選中要隱藏的文字,右鍵,選擇字體,選擇隱藏,確定后發現這幾個字不見了,而word中字數統計也相應減少。
通過文件->選項->顯示->勾選隱藏文字,即可顯示出隱藏的文字
6、另:
可以對文檔設置編輯保護,文檔可以打開,無法編輯
設置方法:導航欄上的審閱->限制編輯->勾選編輯限制->啟動強制保護->設置密碼
在不知密碼的情況下,解除編輯保護的方法:
https://jingyan.baidu.com/article/624e74597d9abd34e8ba5a84.html
可以對文檔設置保護密碼,輸入密碼才可以查看
有個工具叫AOPR,可以暴力破解
圖片隱寫
雙圖隱寫
兩種情形
- 只有一張圖片一張圖片藏在另一張圖片中
- 有兩張或者多張圖片,需要這幾張圖片經過運算
兩種隱寫方式
1、圖像直接拼接
將一張圖像的數據附在一張圖像數據的后面。因為讀到文件結尾處就結束了,所以只會顯示一張圖片
在windows中可以通過命令實現這一隱藏
copy /b 載體文件 + 隱藏的文件 新文件
用winhex打開生成的3.jpg,發現在jpg的文件結束符FF D9后又附有數據且為89 50 41 47這是png文件的特征。
可以在winhex中,復制后段數據到一個新的文件,即可提取隱藏圖片
2、圖像運算
涉及對兩張或更多圖片的像素進行與,或,異或,移位等操作
ctf中題目類型
類型 | 特征 | 方法 |
---|---|---|
直接拼接 | 只有一張圖,無任何提示,或直接提示圖片中隱藏有一張圖 | 直接將插入的數據提取 |
間接拼接 | 圖像結尾有大量冗余信息 | 需要先將信息提取出來,再經過解碼等操作 |
修改文件格式 | 文件無法正常打開或顯示不全 | 需要對文件格式有了解,修改或補全相應特征數據 |
雙圖疊加 | 縮略圖與放大圖不一致,或在winhex中出現ps的軟件的標記 | 采用stegsolve進行運算 |
雙圖運算 | 給出的兩張圖片看起來完全相同或屬於同一風格 | 采用stegsolve進行運算 |
一圖分多圖 | 分離出多張圖片 | 如果每張圖片都能分析出信息,則信息拼接,不能,則多圖運算 |
bugku平台的這道題http://123.206.87.240:8002/misc/1.jpg用winhex打開圖片發現結尾有冗余信息key{you are right}
明顯是html編碼,解碼后得flag
bugku平台的這道題https://ctf.bugku.com/challenges#隱寫3修改文件的寬度和高度使其顯示圖片的全部即可
算法隱寫
根據提示或工具確定隱寫算法,根據算法進行檢測,提取隱藏信息
涉及的概念
時域:自變量是時間,即橫軸是時間,縱軸是信號的變化
頻域:自變量是頻率,即橫軸是頻率,縱軸是該頻率信號的幅度
空域:圖片上的空域是像素域
空域和時域可以通過傅里葉變換到頻域
光學三原色紅綠藍
顏料三原色紅黃藍
LSB算法
最低有效位替換算法
圖像中的每一個點都是由rgb(紅綠藍)三原色組成,三種顏色又組合成其它顏色,每種顏色占八位,修改每種顏色值的最低位
一個像素點包含三種顏色,每個顏色修改最后三位,一個像素可以攜帶三位信息
載體不能經過有損的壓縮,一般是png和bmp這種位圖的格式
以下基本為針對jpg格式圖像的隱寫算法
jsteg算法
針對jpg圖像,對量化后的DCT系數(不包括系數0和1)進行最低有效位替換
嵌入時可以采用隨機嵌入或者順序嵌入。順序嵌入容易通過卡方分析監測出來。
卡方分析:因為如2如果嵌入0會變成2,嵌入1會變成3,3嵌入0會變成2,嵌入1會變成3,這樣會在量化的DCT直方圖中出現對效應,即2和3出現頻率相同,4和5出現頻率相同。而正常圖像卻不是這樣的
對效應如下圖
f3算法
- 如果DCT系數的最低位與要嵌入的信息相同,則不變
- 不同則絕對值減1
- 0系數不嵌
- 如果是絕對值為1的系數嵌入比特0時,嵌入無效,要在下一個系數中重新嵌入
這樣導致DCT系數的0增多,且直方圖向中央靠攏,也容易被分析
f4算法
- 規定DCT系數中,正奇數和負偶數代表1,正偶數和負奇數代表0
- 如果系數代表的比特位與要嵌入的信息相同,則不改,否則,絕對值減1
- 產生新的0的系數時,視為無效嵌入,在下一個系數中重新嵌入
f5算法
進一步升級,引入了矩陣編碼技術。將1比特的信息隱藏在\(n=2^{k}-1\)個符合要求的DCT系數中,其中n為需要使用的比特數,k為嵌入信息的比特數
jphide算法
- 解壓jpg圖像得到DCT系數
- 根據用戶提供的key值進行blowfish生成偽隨機序列來尋找DCT系數
- 將對應DCT系數進行最低有效位替換
- 重新壓縮
outguess算法
同樣對DCT系數進行修改,同樣不修改為0和絕對值為1 的系數,只是隨機決定嵌入位置,並且進行糾正,即修改未嵌入信息的DCT系數,以消除統計特征的變化
ctf中題目類型
類型 | 特征 | 思路 |
---|---|---|
LSB隱寫 | 給出的是bmp或png格式的圖像,或者有最低位的提示 | 編程或用工具stegsolve獲取各個通道的最低位,得到的信息可能要變為二維碼或者是文本字符信息 |
jpg圖像隱寫 | 可能會有key值的提示 | 通過stegdetect檢測隱寫方式,如果需要key值則要找到 |
自定義算法隱寫 | 包含算法的暗示或工具 | 根據提示找到對應算法 |
音頻隱寫
兩種情況:
1、音頻的波形或頻譜為某種編碼或密碼,找到后進行解碼解密即得到隱藏信息
2、音頻文件中嵌入了數據,需要提取出來,得到隱藏信息
基於波形的隱寫
波形圖中橫坐標是時間,縱坐標是幅值。通過對圖像的控制可以模擬為一種編碼或密碼
可以在波形圖中隱藏莫斯電碼,隱藏二進制數據
基於頻譜圖的隱寫
頻譜是波形經過傅里葉變換得到的,橫坐標是頻率,縱坐標是幅值,表示各某時間點上各頻率正弦波的幅值大小,越亮的地方表示這個頻率越響
若波形圖無法看出隱藏信息,可以轉換成頻譜圖
使用mp3stego的隱寫
在音頻文件中嵌入比特流,需要使用密碼
寫入:encode -E 隱藏的文件 -P 口令密碼 載體音頻文件 生成的文件
讀取:decode -X -P 口令密碼 文件名
另:還用有雙音多頻,雙聲道等多個ctf隱寫問題
壓縮包
涉及方面:
爆破、碰撞、偽加密、已知明文分析
文件頭特征
壓縮包有三種壓縮格式rar、7z、zip
zip加密
zip有無加密,真加密,偽加密,三種狀態
zip有數據區和目錄區,只有兩個區的全局方式標志位都為加密位時才是真加密
數據區:50 4B 03 04 數據區標志開頭 后2個字節為解壓文件所需要的版本 后2個字節數據區加密標記位
目錄區:50 4B 01 02 目錄去標志開頭 后2個字節為壓縮文件所使用的版本 后2個字節解壓文件所需要的版本 后2個字節目錄區加密標志位
加密標志位只要是奇數位就表示加密位 偶數不加密
ctf中題目類型
類型 | 特征 | 思路 |
---|---|---|
壓縮包+圖片 | 壓縮包附在圖片后,或者圖片隱藏壓縮包 | |
壓縮包加密 | 密碼以注釋等其它提示形式給出 | |
壓縮包偽加密 | 密碼沒有給出,加密標志位異常 | 修改對應的標志位 |
壓縮包爆破 | 密碼沒有給出,加密標志位正常 | archpr進行爆破 |
crc32碰撞 | 當壓縮包被加密,但文件為純文本文檔,且大小很小時 | 涉及程序編寫,一般用Binascii 和string庫string.ascii_letters |
壓縮包已知明文攻擊 | 壓縮包為zip格式,給出了其中的一個明文,明文的crc32與壓縮包中的密文crc32一致 | archpr進行爆破 |
視頻隱寫
與其他結合,最多的是信息隱藏在視頻的幾個幀中
以嘶吼2019ctf的一道題為例
首先得到的是一個mp4文件,叫做黃金6年,觀看沒有發現異常
之后用winhex,在結尾處發現可能為base64編碼
對其解碼,發現無法正常顯示解碼,可能為2進制數據
用Python編寫程序解碼發現rar標記
所以將其解碼並保存為rar壓縮包
import base64
str = 'UmFyIRoHAQAzkrXlCgEFBgAFAQGAgADh7ek5VQIDPLAABKEAIEvsUpGAAwAIZmxhZy50eHQwAQADDx43HyOdLMGWfCE9WEsBZprAJQoBSVlWkJNS9TP5du2kyJ275JzsNo29BnSZCgMC3h+UFV9p1QEfJkBPPR6MrYwXmsMCMz67DN/k5u1NYw9ga53a83/B/t2G9FkG/IITuR+9gIvr/LEdd1ZRAwUEAA=='
result = base64.b64decode(str)
print(result)
f = open(r'C:\Users\Guoyang\Desktop\my.rar', 'wb')
f.write(result)
發現有密碼
確認不是偽加密后,試圖先從視頻中尋找密碼
用工具potplayer打開,一幀一幀播放,發現
四張二維碼,掃描,將得到的信息拼接為iwantplayctf,解開數據包得flag
另
- 圖片中的exif信息也可能隱藏信息,並且圖片中的這個信息也可能泄露個人隱私。通過查看圖片屬性中的詳細信息可以簡單查看,也有專門的工具輔助查看。
- 在pdf文件中隱寫。使用webstego4open工具,這個程序利用pdf文件頭添加信息。
- 可以在可執行文件中隱寫
- 在html中隱寫,通過注釋等
- 隱寫分析
- 隱寫工具一般會在隱寫的文件加入特定的標識,可以通過標識判斷
- 也可以通過相應統計分析識別
- 現在還有一些設計深度學習的方法
- 一些其它的隱藏技術
- 卡爾達諾柵格碼。通信雙方會事先有一塊柵格,即一塊板中按一定規律挖出小窗格。秘密信息藏在一段信息中。用柵格板蓋住消息,小窗格中漏出來的信息就組成了隱藏的消息。
- 隱形墨水
- 縮影術
- 打印機跟蹤點
- 信息隱藏入門讀物《數據隱藏技術揭秘:破解多媒體、操作系統、移動設備和網絡協議中的隱秘數據》