คลัง
stego

zsteg

zsteg เป็นเครื่องมือเฉพาะสำหรับตรวจ LSB steganography ใน PNG และ BMP — ลองทุก combination ของ channel, bit, และ pixel order อัตโนมัติ แล้วโชว์สิ่งที่ดูเป็นข้อมูล บทนี้ลงลึกการอ่าน output, การระบุ payload notation, และการดึงข้อมูล

BeginnerIntermediate#zsteg#stego#png#bmp#lsb#bit-plane#ctf

1. zsteg ทำอะไร

zsteg เป็น Ruby tool ที่ออกแบบมาเฉพาะ PNG/BMP — มันลอง extract LSB ทุก combination (channel R/G/B/A, จำนวน bit, ลำดับ bit, แนว pixel) แล้วตรวจว่าผลลัพธ์ดูเป็น text/file signature ไหม โชว์เฉพาะอันที่น่าจะเป็นข้อมูลจริง ประหยัดเวลาเทียบกับลองเองทีละแบบ

zsteg ใช้ได้เฉพาะ PNG และ BMP เท่านั้น (lossless) — JPG/MP3/WAV ใช้ไม่ได้ สำหรับ JPG ใช้ steghide/stegseek, WAV ใช้ WavSteg

2. การใช้

คำสั่งหลักLinux
# ลอง combination มาตรฐาน
zsteg image.png

# ลองทุกอย่างละเอียด (all)
zsteg -a image.png

# verbose
zsteg -v image.png

# ติดตั้ง
gem install zsteg
เริ่มจาก zsteg image.png ปกติ ถ้าไม่เจอค่อย -a (ละเอียดขึ้น ช้าขึ้น)

3. อ่าน output และ payload notation

output ของ zsteg แต่ละบรรทัดขึ้นต้นด้วย notation ของ parameter ที่ใช้ดึง ตามด้วยสิ่งที่เจอ เช่น:

ตัวอย่าง output
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)
บรรทัดที่เป็น text/file = น่าสนใจ; <random noise> = ไม่ใช่ข้อมูล

4. ดึงข้อมูลออก (-E)

extract ด้วย parameter ที่เจอLinux
# ดึงตาม 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 | head
-E ตามด้วย notation ใน quote ตรงกับที่ output โชว์เป๊ะ

5. 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. 1พิมพ์ file image.png ยืนยันว่าเป็น PNG/BMP จริง (zsteg ใช้กับ JPG/WAV ไม่ได้)
  2. 2พิมพ์ zsteg image.png — ดู combination มาตรฐานที่มันลองอัตโนมัติ
  3. 3อ่านทุกบรรทัด ดูว่ามีบรรทัดไหนโชว์ text: หรือ file: (ไม่ใช่ <random noise>)
  4. 4ถ้าเจอบรรทัดน่าสนใจ เช่น b1,r,lsb,xy .. text: "flag{...}" — อ่าน flag ได้เลยจากตรงนั้น จบ
  5. 5ถ้าเจอบรรทัดที่โชว์ file: (เช่น PNG/Zip ซ้อนอยู่) ให้ดึงด้วย zsteg -E "notation-ที่เจอ" image.png > out.bin
  6. 6พิมพ์ file out.bin เช็คชนิดไฟล์ แล้วเปิด/แตกต่อตามชนิด (unzip ถ้าเป็น zip)
  7. 7ถ้ารันปกติแล้วไม่เจออะไรเลย ลอง zsteg -a image.png ให้มันลองละเอียดขึ้น (ทุก channel/bit/order รวมที่ปกติข้าม)
  8. 8ถ้า -a ก็ยังไม่เจอ เปิดภาพใน StegSolve ไล่ดู bit-plane ด้วยตาแทน (บางทีข้อมูลไม่ได้เป็น text/known-signature ที่ zsteg รู้จัก)
  9. 9ถ้าไล่ StegSolve แล้วก็ไม่เจอ ให้สงสัยว่าอาจไม่ใช่ PNG/BMP จริง หรือไม่ใช่ LSB เลย — กลับไปเช็ค metadata/binwalk ให้ครบ
รัน zsteg แล้วไปทางไหนต่อ
zsteg image.png
ลอง combination มาตรฐานก่อน
เจอบรรทัด text:/file: ที่ไม่ใช่ noise ไหม?
✅ เจอ→ zsteg -E ดึงออกมา
❌ ไม่เจอเลย→ ลอง zsteg -a ละเอียดขึ้น
zsteg -E "notation" image.png > out.bin
แล้ว file out.bin เช็คชนิด
out.bin เปิดได้/อ่านออกไหม?
✅ ใช่→ จบ ได้ flag/ไฟล์ลับ
❌ เป็น binary มั่ว→ ลอง notation อื่นที่ zsteg โชว์ไว้
zsteg -a image.png
ลองทุก combination รวมที่ปกติข้าม
เจอไหม?
✅ เจอ→ zsteg -E ดึงออกมา จบ
❌ ยังไม่เจอ→ ไล่ดู bit-plane ด้วยตา
เจอ pattern ในโหมด visual ไหม?
✅ เจอ→ Data Extract จาก StegSolve จบ
❌ ไม่เจอ→ zsteg ตันแล้ว กลับไปเช็ค metadata/binwalk
เช็ค exiftool/binwalk ให้ครบ หรือสงสัยว่าไม่ใช่ LSB
ขั้นตอน/งานเครื่องมือใน Kaliติดตั้งเพิ่ม (ถ้าไม่มี)เครื่องมือออนไลน์
ยืนยันชนิดไฟล์file-aperisolve.com
สแกน LSB มาตรฐานzsteggem install zstegaperisolve.com
สแกนละเอียดสุดzsteg -a--
ดึง payload ตาม notationzsteg -E--
ไล่ดู bit-plane ด้วยตาStegSolvewget stegsolve.jarstylesuxx.github.io/steganography
เช็ค metadata ก่อน/หลัง zstegexiftoolsudo apt install libimage-exiftool-perlexifdata.com
เช็คไฟล์ฝัง/ต่อท้ายbinwalksudo apt install binwalkaperisolve.com
🚑 ถ้าตันสนิท ลองท่าถัดไป: lsb เพื่อเข้าใจกลไก bit-plane และเขียน solver เอง (เมื่อ zsteg ไม่รู้จัก pattern), stego-png ถ้าสงสัยว่าซ่อนใน chunk/height แทน LSB, binwalk ถ้ายังไม่เช็คข้อมูลต่อท้าย, steghide ถ้าไฟล์จริงเป็น JPG/WAV ไม่ใช่ PNG/BMP (zsteg ใช้ไม่ได้) — เจอ <random noise> ทุกบรรทัดคือสัญญาณว่าไม่ใช่ LSB

โน้ตของฉัน

ยังไม่มีโน้ตสำหรับหัวข้อนี้