MISC總結——隱寫術(四)

轉載自:https://www.cnblogs.com/lxz-1263030049/p/9404251.html

目錄

 

這一篇是繼上一篇之後的另一篇關於隱寫術在ctf比賽中常見的套路問題:

MISC總結——隱寫術(一)詳情請見:https://blog.csdn.net/xuchen16/article/details/82969608

MISC總結——隱寫術(二)詳情請見:https://blog.csdn.net/xuchen16/article/details/82970062

MISC總結——隱寫術(三)詳情請見:https://blog.csdn.net/xuchen16/article/details/82970342

這應該是關於隱寫術問題的最後一篇文章了!!

如果有喜歡的請關注一下哦!!!!

 

本文參考自:先知社區:https://xz.aliyun.com/t/1875

 

隱寫術介紹:

隱寫術是關於信息隱藏,即不讓計劃的接收者之外的任何人知道信息的傳遞事件(而不只是信息的內容)的一門技巧與科學。

英文寫作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。

Return Top

Outguess

實驗

- 在實驗機中找到隱寫術目錄,打開圖片隱寫,打開圖片隱寫第四部分文件夾
- 在該文件夾找到Outguess.jpg
- 雙擊打開圖片,我們先確認一下圖片內容並沒有什麼異常
- 使用Stegdetect對圖片的隱寫方式進行檢測
- 從結果中得知是使用JPHide的隱寫,使用JPHS工具對隱寫信息進行提取
- 最後打開保存的問就,flag是flag{Good_you_got_it}

第一步,在cmd中運行,Stegdetect,對目標圖片進行檢測


從結果可以得知,這裏的隱寫方式是,Outguess。

第二步,使用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

# coding=utf-8

import cv2

import numpy as np

import random

import os

from argparse import ArgumentParser

ALPHA = 5

 

 

def build_parser():

    parser = ArgumentParser()

    parser.add_argument('--original', dest='ori', required=True)

    parser.add_argument('--image', dest='img', required=True)

    parser.add_argument('--result', dest='res', required=True)

    parser.add_argument('--alpha', dest='alpha', default=ALPHA)

    return parser

 

 

def main():

    parser = build_parser()

    options = parser.parse_args()

    ori = options.ori

    img = options.img

    res = options.res

    alpha = options.alpha

    if not os.path.isfile(ori):

        parser.error("original image %s does not exist." % ori)

    if not os.path.isfile(img):

        parser.error("image %s does not exist." % img)

    decode(ori, img, res, alpha)

 

 

def decode(ori_path, img_path, res_path, alpha):

    ori = cv2.imread(ori_path)

    img = cv2.imread(img_path)

    ori_f = np.fft.fft2(ori)

    img_f = np.fft.fft2(img)

    height, width = ori.shape[0], ori.shape[1]

    watermark = (ori_f - img_f) / alpha

    watermark = np.real(watermark)

    res = np.zeros(watermark.shape)

    random.seed(height + width)

    = range(height / 2)

    = range(width)

    random.shuffle(x)

    random.shuffle(y)

    for in range(height / 2):

        for in range(width):

            res[x[i]][y[j]] = watermark[i][j]

    cv2.imwrite(res_path, res, [int(cv2.IMWRITE_JPEG_QUALITY), 100])

 

 

if __name__ == '__main__':

    main()

 `

  

提取盲水印
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之間。

Return Top

容差比較的隱寫

beyond compare
beyond compare是一款很適合用來對圖片進行比較的工具,就圖片而言,它支持容差、範圍、混合等模式。

  • 實驗:
 在實驗中找到隱寫術目錄,打開圖片隱寫,打開圖片隱寫第六部分文件夾
 在該文件夾找到 pokemon_1.jpg,pokemon_2.jpg
 打開工具Beyond Compare,選擇圖片比較,導入兩張圖片
 在左下角慢慢修改容差,
 在容差的修改過程中得到了flag

打開工具,選擇圖片比較,導入pokemon_1.jpg,pokemon_2.jpg

選擇容差模式,並調整容差大小

小結:
如果在CTF賽場中,就隱寫這一部分,出題人給於兩張或者多張圖片,一般都是需要對圖片的內容進行比較的。

Return Top

 

思考:

  1. Stegsolve 也有圖片的比較的功能,是否能完成這個隱寫?如果不可以爲什麼?

 

DCT.zip (0.074 MB) 下載附件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章