stego
Binwalk
Binwalk สแกนไฟล์หา signature ของไฟล์อื่นที่ฝัง/ต่อท้ายอยู่ข้างใน — เทคนิคยอดนิยมคือซ่อน zip/รูป/ไฟล์ไว้ท้ายภาพ (เพราะ viewer อ่านแค่ส่วนหัว) binwalk หาและแยกออกมาได้ บทนี้ลงลึกการ scan, extract, การแก้เมื่อ auto-extract ไม่ได้ผล, และ polyglot file
BeginnerIntermediate#binwalk#stego#file-carving#embedded-files#polyglot#firmware#ctf
1. หลักการ — ไฟล์ซ้อนไฟล์
หลายไฟล์ format อ่านแค่ส่วนหัวจนถึง marker จบ แล้วเพิกเฉยส่วนที่เหลือ — เช่น image viewer เปิด JPG เห็นภาพปกติ แม้มี zip ต่อท้าย binwalk สแกนหา magic bytes (signature) ของไฟล์ทุกชนิดในทั้งไฟล์ ทำให้เจอไฟล์ที่ฝัง/ต่อท้าย แล้วแยกออกมาได้ เป็นเทคนิค stego ที่พบบ่อยที่สุดอย่างหนึ่ง
ไฟล์ภาพที่มี zip ต่อท้าย (binwalk หาเจอ)
2. Scan
binwalk scanLinux
# สแกนหา signature
binwalk file.jpg
# output: offset | description
# 0 JPEG image data
# 12345 Zip archive data
# entropy analysis (หาส่วนที่ถูกบีบอัด/เข้ารหัส)
binwalk -E file.jpgดู offset ของไฟล์ที่ฝัง — ใช้ตอน extract เองด้วย dd ถ้า auto ไม่ได้
3. Extract
auto-extract และ manualLinux
# auto extract (recursive)
binwalk -e file.jpg # แยกไฟล์ออกมาในโฟลเดอร์ _file.jpg.extracted
binwalk -Me file.jpg # recursive (แยกซ้อนไฟล์ในไฟล์)
# ถ้า -e ไม่ได้ผล (permission/format) → ดึงเองด้วย dd ตาม offset
binwalk file.jpg # ดู offset ก่อน (เช่น 12345)
dd if=file.jpg of=hidden.zip bs=1 skip=12345
unzip hidden.zip
# foremost เป็นทางเลือก carving
foremost -i file.jpg -o out/dd skip=OFFSET คือ fallback ที่ชัวร์สุดเมื่อ binwalk -e ล้มเหลว
4. เมื่อ extract ไม่ได้ผล / polyglot
- binwalk -e ไม่แยก: ดู offset แล้ว
dd if=file of=out bs=1 skip=OFFSETเอง - zip ต่อท้าย:
unzip file.jpgตรงๆ ได้เลย (unzip หา central directory ท้ายไฟล์) - zip มี password: ดึง zip ออกมาแล้ว
fcrackzip -D -u -p rockyou.txt out.zipหรือzip2john - polyglot file: ไฟล์ที่ valid หลาย format พร้อมกัน (เช่นเป็นทั้ง JPG และ ZIP) — เปลี่ยนนามสกุลแล้วเปิด
- append หลายชั้น: binwalk -Me แยก recursive; หรือ dd ทีละชั้น
- ดู hex เอง:
xxd file | grep -i '504b'หา zip signature (PK)
ลอง
unzip file.jpg และ binwalk -e file.jpg ควบคู่กันเสมอ — zip ต่อท้ายเป็นเทคนิคที่พบบ่อยมาก และ unzip มักดึงได้ตรงๆ แม้ binwalk งอแง5. Quick Reference
- binwalk หา/แยกไฟล์ที่ฝัง-ต่อท้าย (magic bytes)
- scan: binwalk file → ดู offset
- extract: binwalk -e (auto) / -Me (recursive)
- ไม่ได้ผล → dd if=file of=out bs=1 skip=OFFSET
- zip ต่อท้าย → unzip file.jpg ตรงๆ; มี pass → fcrackzip/zip2john
- polyglot → เปลี่ยนนามสกุลเปิด; xxd | grep 504b หา PK
🧭 จับมือทำทีละขั้น (มีแค่ Kali) + ถ้าติดไปไหนต่อ
สมมติเพิ่งเจอโจทย์ stego แจกไฟล์รูปมาไฟล์เดียว มีแค่ Kali เปล่าๆ ไม่รู้จะเริ่มตรงไหน — binwalk คือ tool แรกที่ควรรันเพราะเช็คไวและเจอบ่อย ทำตามนี้ทีละขั้น
- 1พิมพ์
file image.jpg— เช็คชนิดไฟล์จริง (บางทีนามสกุลหลอก) - 2พิมพ์
binwalk image.jpg— ดูรายการ signature ที่เจอ ถ้ามีมากกว่า 1 บรรทัด (เช่นเจอ 'Zip archive' ต่อจาก 'JPEG image') แปลว่ามีไฟล์ฝัง - 3พิมพ์
binwalk -e image.jpg— ให้ binwalk แยกไฟล์ที่เจอออกมาอัตโนมัติ - 4พิมพ์
ls _image.jpg.extracted/— ดูไฟล์ที่ถูกแยกออกมา แล้วfileทีละไฟล์ - 5ถ้าได้ zip ลอง
unzip hidden.zipตรงๆ ก่อน (unzip หา central directory ท้ายไฟล์ได้เองแม้ binwalk งอแง) - 6ถ้า -e ไม่แยกอะไรออกมาเลย ดู offset จาก step 2 แล้วดึงเอง:
dd if=image.jpg of=hidden.bin bs=1 skip=OFFSET - 7พิมพ์
file hidden.binยืนยันชนิดไฟล์ก่อนเปิดต่อ - 8ถ้ายังไม่เจอไฟล์แปลกเลย ลอง
binwalk -E image.jpgดู entropy — ส่วนที่ entropy พุ่งสูงผิดปกติอาจเป็นข้อมูลเข้ารหัส/บีบอัดที่ signature ไม่ตรงมาตรฐาน - 9ถ้า entropy เรียบปกติทั้งไฟล์ แปลว่าโจทย์นี้ไม่ใช่ 'ไฟล์ซ้อนไฟล์' — ไป exiftool ดู metadata ต่อ แล้วค่อยไปเทคนิค LSB/bit-plane ตามชนิดไฟล์
ใช้ binwalk แล้วไปทางไหนต่อ
binwalk image.jpg
สแกนหา signature ไฟล์ที่ฝัง/ต่อท้าย
เจอ offset ไฟล์อื่นไหม?
✅ เจอ (เช่น Zip/PNG ต่อท้าย)→→ ทำ binwalk -e แยกไฟล์ออกมาต่อ
❌ ไม่เจออะไรเลย→→ ข้ามไปเช็ค metadata ก่อน (ตัน)
binwalk -e image.jpg
auto extract ไฟล์ที่ฝัง
extract ได้ไฟล์ที่เปิดใช้ได้ไหม?
✅ ได้ไฟล์ปกติ/เปิดได้→→ เปิด/unzip หา flag ต่อ
❌ ได้ zip ที่มี password→→ fcrackzip -D -u -p rockyou.txt หรือ zip2john+john
❌ -e ไม่แยกอะไรเลย→→ dd if=file of=out bs=1 skip=OFFSET เอง
เจอ flag ใน metadata ไหม?
✅ เจอ→→ จบ ได้ flag
❌ ไม่เจอ→→ เปลี่ยน channel ตามชนิดไฟล์ (LSB/bit-plane/spectrogram)
PNG/BMP → zsteg, JPG → steghide, WAV → spectrogram
เลือกหัวข้อเฉพาะตามชนิดไฟล์จริง
| ขั้นตอน/งาน | เครื่องมือใน Kali | ติดตั้งเพิ่ม (ถ้าไม่มี) | เครื่องมือออนไลน์ |
|---|---|---|---|
| ดูชนิดไฟล์จริง | file | - | aperisolve.com (upload แล้วรันชุด triage ให้) |
| สแกนหา signature ที่ฝัง | binwalk | sudo apt install binwalk | aperisolve.com |
| แยกไฟล์ที่ฝังออกมา | binwalk -e / dd | - | - |
| ถอด zip ที่มีรหัส | fcrackzip, zip2john+john | sudo apt install fcrackzip | crackstation.net (ถ้าเป็น hash) |
| เช็ค metadata หลัง extract ไม่เจอ | exiftool | sudo apt install libimage-exiftool-perl | exifdata.com, metadata2go.com |
| ดู entropy หาโซนแปลก | binwalk -E | - | - |
| เปลี่ยนไปดู LSB (PNG/BMP) | zsteg | gem install zsteg | stylesuxx.github.io/steganography |
| เปลี่ยนไปดู JPG มี passphrase | steghide, stegseek | apt install steghide; .deb ของ stegseek จาก GitHub | futureboy.us/stegano/decinput.html |
🚑 ถ้าตันสนิท ลองท่าถัดไป: zsteg ถ้าเป็น PNG/BMP (LSB), steghide ถ้าเป็น JPG/WAV และสงสัยว่ามี passphrase, exiftool/metadata ถ้ายังไม่เช็ค comment/EXIF, stego-png/stego-jpg สำหรับ workflow เฉพาะชนิดไฟล์ที่ครบกว่า — อย่าเสียเวลาวน binwalk ซ้ำถ้า entropy เรียบแล้ว
หัวข้อที่เชื่อมโยง
ExifToolอยู่ใน workflowMP3 Steganographyอยู่ใน workflowOutguessอยู่ใน workflowMetadata Analysisอยู่ใน workflowFirmware Analysisเครื่องมือเดียวกันPNG Steganographyอยู่ใน workflowWAV SteganographyเทคนิคเดียวกันzstegเทคนิคเดียวกันStringsเครื่องมือเดียวกันJPG Steganographyเครื่องมือเดียวกันSPI Flash Dumpเครื่องมือเดียวกันDisk Analysisเครื่องมือเดียวกัน
โน้ตของฉัน
ยังไม่มีโน้ตสำหรับหัวข้อนี้