zsteg
zsteg เป็นเครื่องมือเฉพาะสำหรับตรวจ LSB steganography ใน PNG และ BMP — ลองทุก combination ของ channel, bit, และ pixel order อัตโนมัติ แล้วโชว์สิ่งที่ดูเป็นข้อมูล บทนี้ลงลึกการอ่าน output, การระบุ payload notation, และการดึงข้อมูล
1. zsteg ทำอะไร
zsteg เป็น Ruby tool ที่ออกแบบมาเฉพาะ PNG/BMP — มันลอง extract LSB ทุก combination (channel R/G/B/A, จำนวน bit, ลำดับ bit, แนว pixel) แล้วตรวจว่าผลลัพธ์ดูเป็น text/file signature ไหม โชว์เฉพาะอันที่น่าจะเป็นข้อมูลจริง ประหยัดเวลาเทียบกับลองเองทีละแบบ
2. การใช้
# ลอง combination มาตรฐาน
zsteg image.png
# ลองทุกอย่างละเอียด (all)
zsteg -a image.png
# verbose
zsteg -v image.png
# ติดตั้ง
gem install zsteg3. อ่าน output และ payload notation
output ของ zsteg แต่ละบรรทัดขึ้นต้นด้วย notation ของ parameter ที่ใช้ดึง ตามด้วยสิ่งที่เจอ เช่น:
b1,r,lsb,xy .. text: "flag{lsb_in_red}"
b1,rgb,lsb,xy .. file: PNG image data
b2,b,msb,xy .. <random noise>
# ความหมายของ notation:
# b1 = 1 bit ต่อ channel (b2 = 2 bit)
# r/g/b/a = channel (rgb = รวมทุก channel)
# lsb/msb = bit order (least/most significant first)
# xy/yx = pixel order (row-major / column-major)4. ดึงข้อมูลออก (-E)
# ดึงตาม notation ที่ zsteg โชว์ (เช่นเจอ b1,rgb,lsb,xy เป็น file)
zsteg -E "b1,rgb,lsb,xy" image.png > extracted.bin
file extracted.bin # เช็คว่าได้อะไร
# ถ้าเป็น zip/gz → แตกต่อ
# ถ้าเป็น text → cat ดู flag
# ดึงหลาย parameter มาเทียบ
zsteg -E "b1,r,lsb,xy" image.png | xxd | head5. Quick Reference
- เฉพาะ PNG/BMP (lossless) — JPG/WAV ใช้ไม่ได้
- zsteg image.png → zsteg -a (ละเอียด)
- notation: b1=bit, r/g/b/a=channel, lsb/msb, xy/yx
- บรรทัด text/file = น่าสนใจ; noise = ข้าม
- ดึง: zsteg -E 'b1,rgb,lsb,xy' image.png > out.bin
- file out.bin → ถ้า zip แตกต่อ (ดูหัวข้อ LSB/PNG)
🧭 จับมือทำทีละขั้น (มีแค่ Kali) + ถ้าติดไปไหนต่อ
สมมติได้ไฟล์ PNG/BMP มา มีแค่ Kali เปล่าๆ สงสัยว่าเป็น LSB — zsteg เป็นคำสั่งที่ควรลองก่อนเทคนิคอื่นเพราะรันเร็วและครอบคลุม combination พื้นฐานเกือบหมด ทำตามนี้ทีละขั้น
- 1พิมพ์
file image.pngยืนยันว่าเป็น PNG/BMP จริง (zsteg ใช้กับ JPG/WAV ไม่ได้) - 2พิมพ์
zsteg image.png— ดู combination มาตรฐานที่มันลองอัตโนมัติ - 3อ่านทุกบรรทัด ดูว่ามีบรรทัดไหนโชว์
text:หรือfile:(ไม่ใช่<random noise>) - 4ถ้าเจอบรรทัดน่าสนใจ เช่น
b1,r,lsb,xy .. text: "flag{...}"— อ่าน flag ได้เลยจากตรงนั้น จบ - 5ถ้าเจอบรรทัดที่โชว์
file:(เช่น PNG/Zip ซ้อนอยู่) ให้ดึงด้วยzsteg -E "notation-ที่เจอ" image.png > out.bin - 6พิมพ์
file out.binเช็คชนิดไฟล์ แล้วเปิด/แตกต่อตามชนิด (unzip ถ้าเป็น zip) - 7ถ้ารันปกติแล้วไม่เจออะไรเลย ลอง
zsteg -a image.pngให้มันลองละเอียดขึ้น (ทุก channel/bit/order รวมที่ปกติข้าม) - 8ถ้า -a ก็ยังไม่เจอ เปิดภาพใน StegSolve ไล่ดู bit-plane ด้วยตาแทน (บางทีข้อมูลไม่ได้เป็น text/known-signature ที่ zsteg รู้จัก)
- 9ถ้าไล่ StegSolve แล้วก็ไม่เจอ ให้สงสัยว่าอาจไม่ใช่ PNG/BMP จริง หรือไม่ใช่ LSB เลย — กลับไปเช็ค metadata/binwalk ให้ครบ
| ขั้นตอน/งาน | เครื่องมือใน Kali | ติดตั้งเพิ่ม (ถ้าไม่มี) | เครื่องมือออนไลน์ |
|---|---|---|---|
| ยืนยันชนิดไฟล์ | file | - | aperisolve.com |
| สแกน LSB มาตรฐาน | zsteg | gem install zsteg | aperisolve.com |
| สแกนละเอียดสุด | zsteg -a | - | - |
| ดึง payload ตาม notation | zsteg -E | - | - |
| ไล่ดู bit-plane ด้วยตา | StegSolve | wget stegsolve.jar | stylesuxx.github.io/steganography |
| เช็ค metadata ก่อน/หลัง zsteg | exiftool | sudo apt install libimage-exiftool-perl | exifdata.com |
| เช็คไฟล์ฝัง/ต่อท้าย | binwalk | sudo apt install binwalk | aperisolve.com |
<random noise> ทุกบรรทัดคือสัญญาณว่าไม่ใช่ LSBโน้ตของฉัน
ยังไม่มีโน้ตสำหรับหัวข้อนี้