教學 › 五秒看穿一個檔案
五秒看穿一個檔案
這是自己動手逆向的第一課,也是最有用的一課: 看檔案開頭幾個位元組,就知道它是什麼。 學會之後,遇到任何陌生的遊戲檔案都不會再瞎猜。
難度
★★☆ 需要一點好奇心
時間
約 10 分鐘
會改到檔案嗎
不會,全程唯讀
先講一個教訓:副檔名會騙人
這個遊戲裡叫 .dat 的檔案,好幾個根本不是二進位資料,
而是純文字 CSV。曾經有人(包括本站作者)憑副檔名猜格式,
連續四個檔案全部猜錯。
而檢查的方法只需要五秒鐘。
🛟 動手之前:先完整備份整個遊戲資料夾
把整個遊戲資料夾複製一份到別的地方, 包括裡面存放紀錄的資料夾。不要挑檔案,整包複製最省事也最保險。
「紀錄」是指這些(它們跟遊戲檔混在同一個資料夾裡):
Support\MVP Baseball 2005\—— 遊戲自己建的, 裡面是設定(MVPOptions_Options.sav)與手把設定 (controller.cfg)。剛安裝好時沒有這個資料夾,玩過才出現。- 王朝、老闆模式、名單與玩家檔案的存檔(
*_Franchise.sav、*_Owner Mode.sav、*_Rosters.sav、*_Profile.sav)—— 沒有固定的資料夾名,你或你裝的模組包叫它什麼它就叫什麼。找不到就用這一行找:
dir /s /b "〔你的遊戲資料夾〕\*.sav"
find "〔你的遊戲資料夾〕" -name "*.sav"
上面第一行 Windows、第二行 Mac。 本站每一支工具都會自己備份它要動的那一個檔, 但那只保得住那一個檔 —— 整包備份保的是「你玩到現在的一切」。 完整做法看備份與還原 SOP。
⚡ 只想趕快做完?照這四步
- 開終端機(Mac)或 PowerShell(Windows:按住 ⊞ Win 再按 R,輸入
powershell按 Enter;不要用命令提示字元)。終端機、路徑拖曳這些基本功在第 0 課。這一課不需要 Python。 - Mac 用內建的
xxd看檔案開頭 32 個位元組。路徑可以用拖曳的,不用手打
xxd -l 32 "檔案路徑" - Windows 沒有
xxd,用 PowerShell 內建的Format-Hex。Windows 內建的 PowerShell(5.1)用這行
自己另外裝的 PowerShell 7 用這行Get-Content -Path "檔案路徑" -Encoding Byte -TotalCount 32 | Format-Hex
⚠️ 這兩行本站還沒在 Windows 上實測(依微軟官方文件寫的;這台測試機是 Mac)。跑不動請走回報,本站會補。Format-Hex -Path "檔案路徑" -Count 32 - 照開頭判斷:
42 49 47 46(BIGF)是 EA 封裝檔、10 FB是 QFS 壓縮要先解、7F 45 4C 46(ELF)是編譯後的資料要專門工具、看得懂的英數字就是純文字,直接用編輯器改。
Mac 顯示 command not found 就改用 hexdump -C -n 32 "路徑";Format-Hex 只在 PowerShell 有,命令提示字元沒有。全程唯讀,不會改到任何檔案。
想知道為什麼,往下讀;只想複習,跳到📌 重點整理。
前置
- 會開終端機(Mac)或 PowerShell(Windows)—— 終端機與命令提示字元的開法在 第 0 課,PowerShell 的開法在下面步驟 1。
Windows 一定要用 PowerShell:這一課用到的
Format-Hex在「命令提示字元」裡沒有。 - 不需要 Python,用系統內建指令就好。
步驟
我們要把檔案的前幾個位元組,同時用「十六進位」和「文字」兩種方式顯示出來。
Mac終端機內建 xxd,直接用:
xxd -l 32 "檔案路徑"
WinWindows 沒有 xxd,用 PowerShell 內建的 Format-Hex
(在開始選單搜尋「PowerShell」開啟)。兩種 PowerShell 的寫法不一樣,先看你開的是哪一種。
Windows 10 / 11 內建的那個叫「Windows PowerShell」,版本是 5.1。
它的 Format-Hex 沒有 -Count 這個參數
(-Count 與 -Offset 是 PowerShell 6.2 才加進去的),
所以要先讀出 32 個位元組,再把它們送給 Format-Hex:
Get-Content -Path "檔案路徑" -Encoding Byte -TotalCount 32 | Format-Hex
自己另外裝過 PowerShell 7(指令名字是 pwsh)的話,
7.x 已經拿掉 -Encoding Byte,改用這行:
Format-Hex -Path "檔案路徑" -Count 32
不確定自己開的是哪一種,先打這行看版本,開頭是 5 就是 Windows 內建的那個:
$PSVersionTable.PSVersion
⚠️ 上面兩行寫法還沒在 Windows 上實測,
版本差異依據的是微軟官方的 Format-Hex 說明文件。
路徑一樣可以用拖曳的(第 0 課操作二),不用手打。
先看一個已知答案的檔案,確認你的指令有效。
a打上面的指令,路徑拖 data\frontend\ingame.big 進去。
b按 Enter。
42 49 47 46 5a ac 28 00 ← 十六進位
B I G F Z . ( . ← 對應的文字
前四個位元組是 BIGF —— 這就是 EA 封裝檔的標記。
- Mac 顯示
command not found→ 改用hexdump -C -n 32 "路徑" - Windows 用了「命令提示字元」而不是 PowerShell →
Format-Hex只在 PowerShell 有 - Windows 說
A parameter cannot be found that matches parameter name 'Count'→ 你開的是 Windows 內建的 PowerShell 5.1,改用步驟 1 的Get-Content … | Format-Hex那一行
遊戲裡的檔案幾乎都落在這三類,認得就夠用了。
| 開頭 | 看起來像 | 是什麼 | 怎麼處理 |
|---|---|---|---|
| 42 49 47 46 | BIGF | EA 封裝檔 | 用 BIGF 格式打開 |
| 10 FB | ·· | QFS 壓縮 | 先解壓 |
| 7F 45 4C 46 | ·ELF | 編譯後的資料(動畫、模型) | 需要專門工具 |
| 看得懂的英數字 | DATE,Time, | 純文字 | 直接用編輯器改 |
現在看幾個名字叫 .dat 和 .off 的檔案,
它們聽起來都像二進位資料。
a看球員屬性檔 data\database\attrib.dat:
30 20 66 69 72 73 74 5f
0 f i r s t _ →「0 first_name,1 l...」
是純文字 CSV,而且第一欄的內容就叫 first_name。
它自己把欄位名寫在裡面了。
b看播報索引 data\audio\spch_pbp\pbpdat.off:
30 2c 31 35 33 36 30 2c
0 , 1 5 3 6 0 , →「0,15360,」
也是純文字,每行是「位置,長度」的 CSV。
副檔名 .off 看起來很神秘,內容單純得很。
現在你有工具了,去看看還有什麼。
a隨便挑幾個你好奇的檔案,看它們的開頭。
b對照上面的表判斷類型。
c如果是純文字,恭喜 —— 那個檔案你已經可以改了。
建議的練習對象:data\database\ 裡的其他 .dat、
data\audio\ 裡各種索引檔。
成功標準
- 能對任何檔案跑出十六進位開頭。
- 看到
BIGF知道是封裝檔、看到10 FB知道要先解壓。 - 能分辨「純文字」與「二進位」——這是最重要的一項。
為什麼這一課值得花十分鐘
逆向一個未知格式,最貴的成本是往錯的方向鑽。 以為是二進位,於是花好幾小時寫解析器 —— 結果它根本是 CSV,用記事本就能改。
五秒鐘的檢查,可以省下好幾小時。先看,再動手。
📋 挖到有趣的東西?
如果你發現了本站還沒寫到的格式,歡迎分享:
檔案路徑:data\___\___
開頭 32 bytes:(把 xxd / Format-Hex 的輸出貼上)
你的判斷:純文字 / BIGF / QFS / ELF / 不確定
檔案大小:___ bytes
📋 回報範本
卡住或做成了,複製下面這段填一填:
看穿檔案 status: ✅ / ❌
我看的檔案: ___
開頭四個位元組: ___
我判斷它是什麼: ___
跟站上的對照表對得上嗎: 對得上 / 對不上
卡在哪一步: ___
📌 重點整理
- 一句話 副檔名會騙人,檔案開頭不會。五秒鐘的檢查,可以省下往錯方向鑽的好幾小時。
- 指令就這幾行 Mac 是
xxd -l 32 "檔案路徑";Windows 內建的 PowerShell(5.1)是Get-Content -Path "檔案路徑" -Encoding Byte -TotalCount 32 | Format-Hex,自己另外裝的 PowerShell 7 是Format-Hex -Path "檔案路徑" -Count 32(-Count是 PowerShell 6.2 才加進去的參數,5.1 照抄會說找不到這個參數)。三種寫法都把前 32 個位元組同時用十六進位與文字顯示出來。 - 三種常見開頭,加上純文字
42 49 47 46是 BIGF 封裝檔、10 FB是 QFS 壓縮要先解壓、7F 45 4C 46是 ELF 編譯後的資料(動畫、模型)需要專門工具;對照表還多標了一行,開頭是看得懂的英數字就是純文字。 - 最重要的一項是分辨純文字與二進位 只要開頭是看得懂的字,那個檔你現在就已經可以改了,不必花好幾小時寫解析器。
- 最容易踩的雷 憑副檔名猜格式。
data\database\attrib.dat開頭是30 20 66 69 72 73 74 5f,讀出來是「0 first_name」,純文字 CSV 而且自己把欄位名寫在裡面;data\audio\spch_pbp\pbpdat.off開頭是「0,15360,」,也是純文字。本站作者曾經連續四個檔案全部猜錯。 - 指令不認得的時候 Mac 出現
command not found改用hexdump -C -n 32 "路徑";Windows 如果開的是命令提示字元而不是 PowerShell,Format-Hex不存在,而開的是 Windows 內建的 PowerShell 5.1 則會說找不到-Count這個參數。 - 安全網 這一課全程唯讀,不修改任何檔案。練習對象建議挑
data\database\裡其他的.dat與data\audio\裡各種索引檔。 - 本站沒驗的 那張對照表的說法是「遊戲裡的檔案幾乎都落在這三類」,不是全部。本頁自己開了回報管道收「本站還沒寫到的格式」,代表這份清單本來就沒有掃遍全部的檔。Windows 那兩行 PowerShell 寫法也還沒在 Windows 上實測,版本差異依據的是微軟官方文件。