WAV Steganography
WAV เป็น audio format แบบ lossless ที่ซ่อนข้อมูลได้หลายแบบ — spectrogram (ซ่อนภาพ/ข้อความในความถี่), LSB ของ sample, DTMF tone, Morse code, หรือ channel ซ้าย-ขวาต่างกัน บทนี้ลงลึกทุกเทคนิค audio พร้อมเครื่องมือและการอ่าน spectrogram
1. ภาพรวม — audio ซ่อนได้หลายชั้น
WAV เก็บ sample เสียงดิบ (PCM) แบบ lossless จึงซ่อนได้หลายวิธีที่ format อย่าง MP3 ทำไม่ได้ จุดสำคัญคือต้องตรวจ หลายมิติ: ฟังเสียง (Morse/DTMF/เสียงพูดกลับด้าน), ดู spectrogram (ภาพ/ข้อความในความถี่), อ่าน LSB ของ sample, และเทียบ channel L/R การเจอขึ้นอยู่กับว่าผู้ซ่อนใช้ชั้นไหน
| เทคนิค | สัญญาณบ่งชี้ | เครื่องมือ |
|---|---|---|
| Spectrogram image | เสียง noise/หวีดแปลกๆ | Sonic Visualiser, Audacity |
| LSB ของ sample | ฟังปกติ แต่ไฟล์ใหญ่ผิด | WavSteg, Python |
| DTMF tones | เสียงโทรศัพท์กดปุ่ม | dtmf decoder, multimon-ng |
| Morse code | เสียง beep สั้น-ยาว | ฟัง / ดู waveform |
| Reversed audio | เสียงพูดกลับด้าน | Audacity reverse |
| L/R channel ต่าง | สองหูได้ยินไม่เท่ากัน | Audacity แยก channel |
2. Spectrogram — เทคนิคที่พบบ่อยสุด
เทคนิคยอดนิยม: ผู้ซ่อนวาดข้อความ/flag เป็นภาพในโดเมนความถี่ เมื่อเปิดดู spectrogram (กราฟความถี่-เวลา) จะเห็น flag เป็นตัวอักษรลอยอยู่ เสียงที่ได้ยินจะเป็น noise/หวีด
- 1เปิดไฟล์ใน Sonic Visualiser (ดีสุดสำหรับงานนี้)
- 2เพิ่ม layer: Pane → Add Spectrogram
- 3ปรับ scale/color จนเห็นข้อความชัด (ลอง log scale, ปรับ window size)
- 4อ่าน flag ที่เห็นในภาพ
- 5ทางเลือก: Audacity → เลือก track → Spectrogram view; หรือ sox สร้างภาพ
# สร้างภาพ spectrogram จาก WAV
sox audio.wav -n spectrogram -o spectro.png
# ปรับความละเอียด/ช่วงความถี่
sox audio.wav -n spectrogram -o spectro.png -x 2000 -y 1000
# เปิด spectro.png ดู flag
# ถ้าไฟล์เป็น format อื่น แปลงเป็น wav ก่อน
ffmpeg -i audio.mp3 audio.wav3. LSB ของ audio sample
เหมือน LSB ของภาพ แต่ทำกับ sample เสียง (16-bit PCM) — แทนที่ bit ต่ำสุดของแต่ละ sample ฟังแล้วแทบไม่ต่าง
# WavSteg (จาก stego-lsb)
stegolsb wavsteg -i audio.wav -o output.bin -n 1 # n = bit ต่อ sample
# ลอง n=1,2 และ output ดู file type
file output.binimport wave, numpy as np
w = wave.open("audio.wav","rb")
frames = w.readframes(w.getnframes())
samples = np.frombuffer(frames, dtype=np.int16)
bits = "".join(str(s & 1) for s in samples) # LSB ของแต่ละ sample
# แปลงทีละ 8 bit
msg = "".join(chr(int(bits[i:i+8],2)) for i in range(0, len(bits)-7, 8))
print(msg[:300])
# variant: ถ้า stereo ลองแยก channel (samples[0::2] / samples[1::2])4. DTMF, Morse, reversed, channel
- DTMF (เสียงกดปุ่มโทรศัพท์): ใช้
multimon-ng -a DTMF audio.wavหรือเว็บ DTMF decoder → ได้ลำดับตัวเลข - Morse code (beep สั้น-ยาว): ดู waveform ใน Audacity → ถอดเป็น .-/-. หรือใช้ morse decoder
- Reversed: Audacity → Effect → Reverse (บางทีเสียงพูดถูกกลับด้าน)
- Speed/pitch: ลองเปลี่ยน speed — เสียงที่เร็ว/ช้าผิดอาจเป็นข้อความ
- L/R channel: Audacity → Split Stereo to Mono → ฟังแยก / subtract สอง channel (ข้อมูลอาจอยู่ในผลต่าง)
# DTMF
multimon-ng -a DTMF -t wav audio.wav
# Morse (CW)
multimon-ng -a MORSE_CW -t wav audio.wav
# ต้องเป็น wav mono 22050Hz — แปลงด้วย sox ถ้าจำเป็น
sox audio.wav -r 22050 -c 1 conv.wav5. Workflow ตรวจ WAV
- 1exiftool + binwalk + strings — เช็ค metadata/append ก่อน
- 2ฟังเสียง — ปกติ? noise? beep (Morse)? เสียงกดปุ่ม (DTMF)?
- 3ดู spectrogram (Sonic Visualiser) — มีภาพ/ข้อความไหม
- 4ดู waveform — pattern แปลก/Morse
- 5LSB extract (WavSteg / Python)
- 6แยก L/R channel, ลอง reverse/speed
6. Quick Reference
- ตรวจหลายชั้น: ฟัง → spectrogram → waveform → LSB → channel
- spectrogram: Sonic Visualiser / sox -n spectrogram (พบบ่อยสุด)
- LSB: stegolsb wavsteg / Python wave+numpy (s & 1)
- DTMF/Morse: multimon-ng -a DTMF / MORSE_CW
- reversed/speed: Audacity Effect
- stereo → แยก L/R, ลองผลต่าง channel
🧭 จับมือทำทีละขั้น (มีแค่ Kali) + ถ้าติดไปไหนต่อ
สมมติโจทย์แจกไฟล์ .wav มา มีแค่ Kali เปล่าๆ — WAV ซ่อนได้หลายมิติ (spectrogram, LSB, DTMF, Morse) ทำตามลำดับนี้ทีละขั้น เริ่มจากฟัง/ดูภาพก่อนค่อยไป LSB
- 1พิมพ์
file audio.wav+exiftool audio.wav+binwalk audio.wav— เช็ค metadata/ไฟล์ฝังก่อนเสมอ - 2ฟังไฟล์เสียงเปล่าๆ ก่อน — ปกติ? มี noise/หวีดแปลกๆ? beep สั้นยาว (Morse)? เสียงกดปุ่มโทรศัพท์ (DTMF)?
- 3เปิดไฟล์ใน Sonic Visualiser แล้ว Pane → Add Spectrogram ดูว่ามีข้อความ/ภาพลอยอยู่ในความถี่ไหม (เทคนิคที่พบบ่อยสุด)
- 4ถ้าไม่มี Sonic Visualiser พร้อมใช้ ลอง
sox audio.wav -n spectrogram -o spectro.pngเปิดดูภาพแทน - 5เห็นข้อความใน spectrogram แล้ว → อ่านตัวอักษรออกมาเป็น flag ได้เลย จบ
- 6ถ้า spectrogram เรียบเฉย ลอง
stegolsb wavsteg -i audio.wav -o output.bin -n 1(ลอง n=1,2) แล้วfile output.bin - 7ถ้าได้ยินเสียง DTMF ให้
multimon-ng -a DTMF -t wav audio.wav; ถ้าเป็น Morse ให้multimon-ng -a MORSE_CW -t wav audio.wav - 8ถ้าเสียงฟังดูแปลก (พูดกลับด้าน/เร็วผิดปกติ) เปิด Audacity แล้วลอง Effect → Reverse หรือปรับ speed
- 9ถ้าเป็น stereo ลองแยก L/R channel ใน Audacity ฟังแต่ละข้าง หรือลองผลต่างของสอง channel ด้วย Python (numpy)
| ขั้นตอน/งาน | เครื่องมือใน Kali | ติดตั้งเพิ่ม (ถ้าไม่มี) | เครื่องมือออนไลน์ |
|---|---|---|---|
| เช็ค metadata/ไฟล์ฝัง | exiftool, binwalk | sudo apt install libimage-exiftool-perl binwalk | aperisolve.com |
| ดู spectrogram | sox, sonic-visualiser, audacity | sudo apt install sox sonic-visualiser audacity | - |
| ดึง LSB จาก sample | stegolsb (stego-lsb), python | pip install stego-lsb | - |
| ถอด DTMF/Morse | multimon-ng | sudo apt install multimon-ng | - |
| แปลงฟอร์แมต/sample rate | sox, ffmpeg | sudo apt install sox ffmpeg | - |
| วิเคราะห์ waveform ละเอียด | audacity | sudo apt install audacity | - |
| ถอดรหัส/แปลงข้อความที่ได้ | - | - | CyberChef, dcode.fr |
หัวข้อที่เชื่อมโยง
โน้ตของฉัน
ยังไม่มีโน้ตสำหรับหัวข้อนี้