· 綠糰子 · 門禁卡教學  · 8 分鐘閱讀

Mifare dump 檔怎麼看:block 0、Key A/B、存取條件逐段解釋

讀出來的 1024 個 byte 到底哪一段是什麼?本篇拆解 Mifare Classic dump 的結構,並說明哪三個 byte 改錯會讓整個 sector 永久鎖死。

先給結論

一張 Mifare Classic 1K 的 dump 就是 1024 個 byte,切成 16 個 sector,每個 sector 4 個 block,每個 block 16 個 byte

看 dump 只要記住三件事:

位置是什麼能不能改
第一個 block(block 0)UID、BCC、SAK、ATQA一般卡唯讀,只有 CUID/UID 卡寫得進去
每個 sector 的最後一個 blockKey A + 存取條件 + Key B可以改,但改錯會鎖死整個 sector
其他 block你的資料有金鑰就能改

想邊看邊改的話,可以直接開 Mifare 卡片編輯器,把 dump 拖進去就會幫你把上面這些段落標好顏色。


block 0:卡片的身分證

整張卡的第一個 block 長這樣(4-byte UID 的卡):

9E 4A DE 12 | 18 | 08 | 04 00 | 62 63 64 65 66 67 68 69
└── UID ──┘ BCC SAK ATQA └──── 廠商資料 ────┘
  • UID:卡號本身。讀卡機掃出來的那串數字就是從這裡來的,只是各家換算方式不同(詳見 卡號格式轉換器)。
  • BCC:UID 這 4 個 byte 的 XOR 校驗碼。上面的例子是 9E ^ 4A ^ DE ^ 12 = 18
  • SAK / ATQA:卡片回答「我是哪一種卡」用的。08 04 00 是標準 Mifare Classic 1K 的組合,說明見 SAK 值說明

改了 UID 一定要同步改 BCC。 這是實務上最常見的錯誤:客人自己用 hex editor 改掉 UID, BCC 沒跟著算,卡片刷上去讀卡機直接不理它。工具會自動檢查並提供一鍵修正。

7-byte UID 的卡沒有 BCC

7-byte UID(俗稱 CL2)的 Mifare Classic 排法不一樣,UID 結束後直接接 SAK,中間沒有校驗碼

04 A1 B2 C3 D4 E5 F6 | 08 | 44 00 | 00 00 00 00 00 00
└────── UID ──────┘ SAK ATQA └─ 廠商可用 ─┘

兩種卡最好認的差別在 ATQA:4-byte 的 1K 是 0004,7-byte 的 1K 是 0044(在 dump 裡低位在前,寫成 04 0044 00)。 所以拿 7-byte 的卡去套 4-byte 的排法,會誤以為第 5 個 byte 是 BCC 而且「算錯了」,其實那是 UID 的一部分。 Mifare 卡片編輯器 會自動用 SAK 與 ATQA 判斷是哪一種排法,判斷不出來就直說,不會硬算 BCC。


sector trailer:整個 sector 的門鎖

每個 sector 的最後一個 block 不是資料,是門鎖:

FF FF FF FF FF FF | FF 07 80 | 69 | FF FF FF FF FF FF
└──── Key A ────┘ └存取條件┘ 自由 └──── Key B ────┘

FF FF FF FF FF FF 是出廠預設金鑰,也是所有教學裡最常出現的那一串。Key A 永遠讀不出來, 你在 dump 裡看到的 Key A 是 MCT 之類的工具用它認證成功後幫你填回去的,不是從卡片讀出來的。


存取條件:改錯就回不去的三個 byte

FF 07 80 這三個 byte 決定這個 sector 的每個 block 誰能讀、誰能寫。它的編碼方式是同一份資料存正的也存反的

byte高 4 bit低 4 bit
6C2 的反相C1 的反相
7C1C3 的反相
8C3C2

卡片自己會檢查正反兩份對不對得上,對不上就整個 sector 拒絕存取。這代表兩件事:

  1. 隨手改一個 byte 幾乎一定是壞的,因為另外兩個 byte 沒跟著改。
  2. 就算改出一組合法的值,某些組合的意思是「這個 sector 從此不能再改設定」,寫下去就回不來了

出廠值 FF 07 80 解出來是:資料 block 用 Key A 或 B 都能讀寫,trailer 用 Key A 就能改金鑰與條件。這是最寬鬆、也最好救的狀態。

常見的幾種組合:

存取條件(C1 C2 C3)資料 block 的效果
000出廠預設,讀寫都不設限
010唯讀
110值區塊,加值要 Key B
111完全封鎖,任何金鑰都讀不到

Mifare 卡片編輯器 預設會鎖住這三個 byte 不讓你改,要動必須先勾選解鎖, 而且會即時把改完的結果翻成人話,包括「這個 sector 之後改不回來」這種警告。


值區塊:儲值卡常見的那一段

如果某個 block 長這樣,它是一個值區塊

64 00 00 00 | 9B FF FF FF | 64 00 00 00 | 05 FA 05 FA
└─ 數值 ─┘ └─ 補數 ──┘ └─ 數值 ─┘ 位址與補數

數值存了兩份、補數存了一份,位址存了四份。卡片自己會驗這個格式,所以手改數值必須三份一起改, 只改前面 4 個 byte 的話卡片會判定這是一個無效的值區塊。


MCT 匯出檔裡的那一堆 -

用手機 MCT App 讀卡時,如果某個 sector 的金鑰試不出來,匯出的檔案裡那幾行會是 32 個 -

+Sector: 5
--------------------------------
--------------------------------
--------------------------------
--------------------------------

這代表「沒讀到」,不是「內容是零」。把它當成 00 寫回卡片,等於用一堆假資料覆蓋原本的內容。 我們的工具會保留這個狀態、標成灰色,並且不讓你匯出成二進位檔,只能匯出回 MCT 格式。

金鑰試不出來的卡通常是半加密或全加密卡,需要 PN532 跑字典或攻擊才解得開, 做法見 門禁卡複製教學,或直接找我們代客解卡


改完之後寫回哪裡

改好的 dump 要寫回卡片,記得:原卡的 block 0 幾乎都是唯讀的。 所以複製一張卡不是把 dump 寫回原卡,而是寫進一張 block 0 可寫的空白卡:

  • CUID 白卡:block 0 可重複改寫,最常用的複製卡。
  • CUID 貼紙:想貼在手機或門禁扣上的話用這種。

寫入工具用手機的 MCT、電腦的 PN532 或 Proxmark 都可以。卡片種類分不清楚的話,先看 門禁卡晶片資料庫


延伸閱讀

支援服務

文件、帳務與聯絡方式