1. 程式人生 > >ctf解題--當眼花的時候,會顯示兩張圖(隱寫)

ctf解題--當眼花的時候,會顯示兩張圖(隱寫)

題目

解題

  • 下載圖片
wget http://ctf5.shiyanbar.com/stega/final.png 
  • kali自帶binwalk
binwalk final.png

這裡寫圖片描述

發現從1922524開始偏移

  • 用dd命令進行分離
    這裡寫圖片描述
    分離後得圖片儲存為final-1.png
    開啟圖片發現無差別

  • compare兩個檔案
    這裡寫圖片描述
    比較結果存為out.png

  • 開啟out.png這裡寫圖片描述
    發現圖片左下角有紅線
    為方便分析將out.png重新命名為out.bmp格式
  • kali自帶十六進位制編輯器hexdump或用winhex開啟
    png圖片的掃描是從左向右,從下往上來的
hexdump out
.bmp

這裡寫圖片描述
黑色的像數的在bmp中的hex的00儲存的,那麼我們就尋找不是00的地方,在偏移0x1110的地方可以發現有不是00的位元組,一開始還以為這些就是flag的資訊了,後來才發現是因為兩個圖片sub影響到了效果,真正的資訊是隱藏在final-1.png中的,所以開啟由final-1.png轉換的final-1.bmp來對,通過之前diff得到的偏移,尋找到0x1110的地方,直到0x1330結束,這是隱藏的資訊

  • 只保留00 01,這個是因為RGB的關係,只隱藏在R通道里面了,其他通道都是圖片的正常像數資訊,過濾掉就可以了

00010000010000010001000100000101000100000001010100010101010001010001000000010001000001010001000000010101000001010001000101000001000100010101010100010001000001010001010100010000000100000001000100010100000101010000010100010000000101000101010000000101000000000001010000010101000100010000010000000101000100000001010100000000000100000100000000010101010000010001010101010001

  • 觀察一下可以發現,而奇數位都是0,是多餘的,把這些去除掉。直接把00 替換成0,01替換成1

0100100101010011010001110111101101000101001101000111001101011001010111110101001101110100010001010110011100110100011011100011000001100111010100100011010001110000010010000111100101111101

  • 發現長度是184,是8的倍數,轉換成ascii碼。
    可以使用JPK工具來進行轉換,工具的下載的連結:
    http://www.wechall.net/applet/JPK_406.jar
    對比2.bmp可以發現隱藏了一些00 01這些資訊,複製出來
    這裡寫圖片描述
    JPK——binary——binary to ascii 得到flag