教學 › 五秒看穿一個檔案

五秒看穿一個檔案

這是自己動手逆向的第一課,也是最有用的一課: 看檔案開頭幾個位元組,就知道它是什麼。 學會之後,遇到任何陌生的遊戲檔案都不會再瞎猜。

難度

★★☆ 需要一點好奇心

時間

約 10 分鐘

會改到檔案嗎

不會,全程唯讀

先講一個教訓:副檔名會騙人

這個遊戲裡叫 .dat 的檔案,好幾個根本不是二進位資料, 而是純文字 CSV。曾經有人(包括本站作者)憑副檔名猜格式, 連續四個檔案全部猜錯

而檢查的方法只需要五秒鐘。

🛟 動手之前:先完整備份整個遊戲資料夾

把整個遊戲資料夾複製一份到別的地方包括裡面存放紀錄的資料夾。不要挑檔案,整包複製最省事也最保險。

「紀錄」是指這些(它們跟遊戲檔混在同一個資料夾裡):

dir /s /b "〔你的遊戲資料夾〕\*.sav"
find "〔你的遊戲資料夾〕" -name "*.sav"

上面第一行 Windows、第二行 Mac。 本站每一支工具都會自己備份它要動的那一個檔, 但那只保得住那一個檔 —— 整包備份保的是「你玩到現在的一切」。 完整做法看備份與還原 SOP

⚡ 只想趕快做完?照這四步

  1. 開終端機(Mac)或 PowerShell(Windows:按住 ⊞ Win 再按 R,輸入 powershellEnter不要用命令提示字元)。終端機、路徑拖曳這些基本功在第 0 課。這一課不需要 Python。
  2. Mac 用內建的 xxd 看檔案開頭 32 個位元組。路徑可以用拖曳的,不用手打
    xxd -l 32 "檔案路徑"
  3. Windows 沒有 xxd,用 PowerShell 內建的 Format-HexWindows 內建的 PowerShell(5.1)用這行
    Get-Content -Path "檔案路徑" -Encoding Byte -TotalCount 32 | Format-Hex
    自己另外裝的 PowerShell 7 用這行
    Format-Hex -Path "檔案路徑" -Count 32
    ⚠️ 這兩行本站還沒在 Windows 上實測(依微軟官方文件寫的;這台測試機是 Mac)。跑不動請走回報,本站會補。
  4. 照開頭判斷: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 有,命令提示字元沒有。全程唯讀,不會改到任何檔案。 想知道為什麼,往下讀;只想複習,跳到📌 重點整理

前置

步驟

1
學會看檔案開頭

我們要把檔案的前幾個位元組,同時用「十六進位」和「文字」兩種方式顯示出來。

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 課操作二),不用手打。

2
拿 ingame.big 練第一次

先看一個已知答案的檔案,確認你的指令有效。

a打上面的指令,路徑拖 data\frontend\ingame.big 進去。

bEnter

你會看到(下面把位元組拆開對齊給你看;實際輸出是兩個位元組一組、一行 16 個)
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 那一行
3
認識三種常見開頭

遊戲裡的檔案幾乎都落在這三類,認得就夠用了。

開頭看起來像是什麼怎麼處理
42 49 47 46BIGFEA 封裝檔用 BIGF 格式打開
10 FB··QFS 壓縮先解壓
7F 45 4C 46·ELF編譯後的資料(動畫、模型)需要專門工具
看得懂的英數字DATE,Time,純文字直接用編輯器改
4
親手驗證「副檔名會騙人」

現在看幾個名字叫 .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 看起來很神秘,內容單純得很。

5
自己去挖

現在你有工具了,去看看還有什麼。

a隨便挑幾個你好奇的檔案,看它們的開頭。

b對照上面的表判斷類型。

c如果是純文字,恭喜 —— 那個檔案你已經可以改了。

建議的練習對象:data\database\ 裡的其他 .datdata\audio\ 裡各種索引檔。

成功標準

為什麼這一課值得花十分鐘

逆向一個未知格式,最貴的成本是往錯的方向鑽。 以為是二進位,於是花好幾小時寫解析器 —— 結果它根本是 CSV,用記事本就能改。

五秒鐘的檢查,可以省下好幾小時。先看,再動手。

📋 挖到有趣的東西?

如果你發現了本站還沒寫到的格式,歡迎分享:

檔案路徑:data\___\___
開頭 32 bytes:(把 xxd / Format-Hex 的輸出貼上)
你的判斷:純文字 / BIGF / QFS / ELF / 不確定
檔案大小:___ bytes

📋 回報範本

卡住或做成了,複製下面這段填一填:

看穿檔案 status: ✅ / ❌
我看的檔案: ___
開頭四個位元組: ___
我判斷它是什麼: ___
跟站上的對照表對得上嗎: 對得上 / 對不上
卡在哪一步: ___

📌 重點整理

接下來