在 CTF 競賽中,「數位鑑識(Digital Forensics)」就像是扮演網路世界的刑事偵探。攻擊者或出題者經常會把敏感資訊、密碼甚至是 Flag 隱藏在看似平凡無奇的照片、圖片或文件檔案中。
今天我們就來揭開檔案隱藏術的兩大核心原理:Magic Bytes(檔案標頭魔術位元組) 與 Exif / Metadata(詮釋資料),並學習如何利用工具將藏在檔案深處的秘密給挖出來!
透過概念分析與實戰指令,掌握以下 Forensics 核心技能:
在 Windows 系統中,我們習慣透過 .png、.jpg 或 .zip 等副檔名來判斷檔案類型;但對作業系統與程式而言,真正決定檔案結構的是檔案開頭的前幾個位元組,稱為 Magic Bytes(魔術位元組 / 標頭)。
| 檔案類型 | Hex (十六進位標頭) | ASCII 呈現 |
|---|---|---|
| PNG | 89 50 4E 47 0D 0A 1A 0A |
.PNG.... |
| JPEG / JPG | FF D8 FF |
ÿØÿ |
| GIF | 47 49 46 38 |
GIF8 |
| ZIP / PK | 50 4B 03 04 |
PK.. |
25 50 44 46 |
%PDF |
.zip 改名為 .png。雖然點擊無法開啟圖片,但透過 Linux file 指令就能立馬戳破真相。00 00 00 00,導致相片檢視器提示「檔案已損毀」,攻擊者必須手動透過 Hex Editor 填補回 89 50 4E 47 才能修復。當我們用手機或相機拍照時,裝置除了記錄影像像素外,還會自動寫入許多「詮釋資料(Metadata / Exif)」,例如:拍攝時間、GPS 座標、相機型號、繪圖軟體版本等。
在 CTF 題目中,出題者非常喜歡把 Flag 或提示藏在以下欄位:
Comment / UserComment(備註)Artist / By-line(作者)Copyright(版權宣告)XPComment 或經過 Base64 編碼的隱密字串cat.jpg,要求我們在不破壞檔案的情況下尋找隱藏在檔案內部的秘密 Flag。在 WSL 環境中先切換至 Windows 的下載目錄(/mnt/c/Users/acer/Downloads),並使用 file 指令確認 cat.jpg 的真實格式:
cd /mnt/c/Users/acer/Downloads
file cat.jpg
cat.jpg: JPEG image data, JFIF standard 1.02, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 2560x1598, components 3

分析: 系統明確回傳 JPEG image data,代表這是一張真實且標頭結構完整的 JPEG 圖片,並未遭偽裝或損毀。
接著使用exiftool傾印圖片中所有的詮釋資料:
exiftool cat.jpg
ExifTool Version Number : 12.76
File Name : cat.jpg
File Type : JPEG
Copyright Notice : PicoCTF
License : cGljb0NURnt0aGVfbTN0YWRhdGFfMXNfbW9kaWZpZWR9
Image Size : 2560x1598

分析: 在 License 欄位發現一串非常可疑的字串 cGljb0NURnt0aGVfbTN0YWRhdGFfMXNfbW9kaWZpZWR9。以cGlj開頭是標準 picoCTF Flag 經過 Base64 編碼後的特徵。
在 Terminal 中使用echo搭配base64 -d指令對該字串進行解密:
echo "cGljb0NURnt0aGVfbTN0YWRhdGFfMXNfbW9kaWZpZWR9" | base64 -d
解密結果:
picoCTF{the_m3tadata_1s_modified}
Flag: picoCTF{the_m3tadata_1s_modified}