M1卡

浅谈 M1 卡（水卡、饭卡、开水卡和门禁卡等）的破解与复制 —— 理论知识篇

声明：破解卡片只为科学研究所用，并探讨数据加密升级的必要性。

本文只作技术研究、学习交流之用，切勿用于非法用途，否则后果自负！！！

前言
最近一直在研究单片机及硬件相关的知识（非本专业，纯属个人爱好），偶然间看到网友发了破解学校水卡相关的帖子。于是就想着研究（破解）一下学校的一卡通安全，顺便记录一下过程。

注：全文分为 6 个篇章，本文为 [理论知识篇]，后续我会持续更新。

由于篇幅较长，重点部分我已 [加粗标出]。

1. 概述
首先，在破解卡片之前，有必要先了解一下目前市面上常见卡片的相关知识，即 IC 卡与 ID 卡。

1）IC 卡（Integrated Circuit Card），也称智能卡 (Smart Card)、微芯片卡。常见的 IC 卡有二代身份证、手机 SIM 卡、校园一卡通等。分为非接触式 IC 卡与接触式 IC 卡。本文中 M1 卡为非接触式 IC 卡。

M1 卡

2）ID 卡（Integrated Circuit Card），即身份识别卡。ID 卡无法写入数据，只有固定的 ID 编号，无任何保密功能 。

总结：ID 卡是只读的，仅仅记录卡号，无法加密，故安全性低；IC 卡可以读写，可以加密，IC 卡数据的读取、写入等操作需相应的密码认证，卡片内每个区块有不同的密码保护（后文会详细讲解）。

2.IC 卡的分类
作为准备工作，首先需要确认卡片的类型，这关系到卡片是否能破解。

此处采用手机 App 查看卡片数据最为方便，前提是手机支持 NFC 功能。或者直接使用 PN532、ACR122u 读卡器（后续破解用到的设备）。当然，可以采取简单粗暴的方式 —— 通过观察卡片的外观来判断（方法请自行上网搜索，不再赘述），不过不一定准确。

通过 SAK，可以判断卡的类型，如下图所示：

红色方框内即为 SAK 信息
（使用 Mifare Classic Tool 软件查看，文末会给出下载链接）
其中：

SAK:08 为 M1 卡或 S50 卡 —— 通常可以破解

SAK:18 为 S70K 卡 —— 通常可以破解

SAK:20 为 CPU 卡 —— 无法破解

SAK:28 为 CPU 模拟卡 —— 模拟 M1 卡结构，极少部分可解

本文中所提到的 M1 卡，全称 NXP Mifare1 系列卡片，属于非接触式 IC 卡，常用于一卡通，公交等系统。常见的有卡式和钥匙扣式。如下图所示：

左为卡式，右为钥匙扣式
M1 卡的容量通常为 1KB（注意这里的单位是 bytes，而非 bit，换算为位的话应该是 8Kb）。虽然存储空间比较小，但 M1 卡的结构仍较为复杂。

3. 扇区与块
M1 卡共有 16 个扇区（0~15 扇区），每个扇区有 4 个块（0~3），每个块可以保存 16 字节的内容。即 16 (扇区)*4 (每个扇区有 4 个块)*16 (每块为 16 字节)=1024bytes=8192bits;

如下图所示：

某空白 M1 卡的第 4、5 扇区
其中第 0、1、2 个块用来存放数据，第 3 个块用来存放密钥。如上图所示，块的序号已用红色字体标注。密钥分为密钥 A 与密钥 B，密钥 A、B 中间的为控制位。

[控制位决定该块的访问权限，读者可自行查阅相关资料，本文不再赘述]

例如扇区 5 中块 3：其中”FF078069” 为控制位，左右侧密钥 A 与 B 相同，即”000000000000”（本例中所用的 M1 卡为空白卡，无任何数据和密钥）。

通常情况，只要知道了某扇区的块 3，就可以掌握本扇区的控制权限（读、写数据等）。同时，M1 卡的每个扇区都可以设置不同的密钥。

还有，每个 M1 卡都有唯一的序列号（UID），存放在 0 扇区 0 块中。其中，前 4 个字节为卡的 UID，第 5 个字节是校验位，剩下则为厂商数据，并且该块无法被修改（也有可修改的卡片，后文中将会提到）。

所以，若要读取和修改 M1 卡数据，首先必须先获得各个扇区的密钥，除非该卡片未加密。具体方法后文会详细阐述。

由此可见，能否破解 M1 卡密钥是破解整卡的关键因素。