<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Soul Of Free Loop &#187; MIFARE</title>
	<atom:link href="https://zohead.com/archives/tag/mifare/feed" rel="self" type="application/rss+xml" />
	<link>https://zohead.com</link>
	<description>Uranus Zhou&#039;s Blog</description>
	<lastBuildDate>Sat, 19 Jul 2025 15:42:46 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.8</generator>
	<item>
		<title>复制MIFARE Classic小区门禁卡记录</title>
		<link>https://zohead.com/archives/copy-mifare-classic/</link>
		<comments>https://zohead.com/archives/copy-mifare-classic/#comments</comments>
		<pubDate>Fri, 23 Jun 2017 16:12:32 +0000</pubDate>
		<dc:creator><![CDATA[Uranus Zhou]]></dc:creator>
				<category><![CDATA[NFC]]></category>
		<category><![CDATA[Classic]]></category>
		<category><![CDATA[CUID]]></category>
		<category><![CDATA[M1]]></category>
		<category><![CDATA[mfcuk]]></category>
		<category><![CDATA[mfoc]]></category>
		<category><![CDATA[MIFARE]]></category>
		<category><![CDATA[NXP]]></category>
		<category><![CDATA[PL-2303]]></category>
		<category><![CDATA[PN532]]></category>
		<category><![CDATA[UID]]></category>
		<category><![CDATA[门禁卡]]></category>

		<guid isPermaLink="false">https://zohead.com/?p=1455</guid>
		<description><![CDATA[上个月忙着找房搬家换新住处，住进去发现新小区除了稍有点远的大门，平时方便行人出入的侧门都是必须刷门禁卡的，而房东那只有一张 IC 门禁卡，小区物业也无法办理新卡了，因此想着是不是能用手机模拟或者复制门禁卡的方式自己解决。 尝试手机模拟 由于我使用的华硕 Zenfone 2 手机是支持 NFC 功能的，首先可以用手机读取现有的门禁卡信息，这里我使用的是 NXP 官方推出的 NFC TagInfo App： 从 IC Info 里可以看到小区 IC 门禁卡是最常见的 MIFARE Classic EV1 S50 也就是 M1 1k 卡。 另外 App 下方还提示我的手机不兼容此卡，我们可以在 FU [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>上个月忙着找房搬家换新住处，住进去发现新小区除了稍有点远的大门，平时方便行人出入的侧门都是必须刷门禁卡的，而房东那只有一张 IC 门禁卡，小区物业也无法办理新卡了，因此想着是不是能用手机模拟或者复制门禁卡的方式自己解决。</p>
<h2 id="尝试手机模拟">尝试手机模拟</h2>
<p>由于我使用的华硕 Zenfone 2 手机是支持 NFC 功能的，首先可以用手机读取现有的门禁卡信息，这里我使用的是 NXP 官方推出的 <a href="https://play.google.com/store/apps/details?id=com.nxp.taginfolite" target="_blank">NFC TagInfo</a> App：</p>
<p><img src="http://res.cloudinary.com/digwht2y0/image/upload/v1737369839/android-nxp-m1-info.jpg" alt="IC 卡类型" title="IC 卡类型"></p>
<p>从 <code>IC Info</code> 里可以看到小区 IC 门禁卡是最常见的 MIFARE Classic EV1 S50 也就是 M1 1k 卡。</p>
<p>另外 App 下方还提示我的手机不兼容此卡，我们可以在 <code>FULL SCAN</code> 标签里查询详细信息：</p>
<p><img src="http://res.cloudinary.com/digwht2y0/image/upload/v1737369839/android-nxp-m1-detail.jpg" alt="IC 卡详细信息" title="IC 卡详细信息"></p>
<p>这里可以读到 M1 卡的 4 个字节 UID，但由于我的 Zenfone 2 手机使用的是 Broadcom 的 BCM20795 NFC 芯片，此芯片并不兼容国内常用的 M1 卡，NFC TagInfo App 读不到卡中的数据。</p>
<p>虽然也有网友分享了通过修改 Android 系统文件固定手机 NFC ID 的方法来模拟门禁卡，但现在的小区门禁并不只单纯验证卡 ID，因此想用手机来模拟门禁卡就行不通了。</p>
<h2 id="准备-nfc-读卡器和-uid-卡">准备 NFC 读卡器和 UID 卡</h2>
<h3 id="nfc-读卡器">NFC 读卡器</h3>
<p>如果为了省事，大家可以选择 <a href="http://www.acs.com.hk/en/products/3/acr122u-usb-nfc-reader/" target="_blank">ACR122U</a> 这种现成的 USB NFC 读卡器，ACR122U 不仅有配套的软件，而且很多 IC 卡商家对其支持也比较好。</p>
<p>不过出于练（省）练（银）手（子）的考虑，我用的还是 NXP 自家产的 <a href="http://www.nxp.com/products/identification-and-security/nfc-and-reader-ics/nfc-controller-solutions/nfc-integrated-solution:PN5321A3HN" target="_blank">PN532</a> NFC/RFID v3 模块 + <a href="http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=8&amp;pcid=41" target="_blank">PL-2303HX</a> USB 转 TTL 模块，毕竟这一套从淘宝买下来也才 30 多大洋。</p>
<p>收到的 PN532 NFC/RFID 模块和配件：</p>
<p><img src="http://res.cloudinary.com/digwht2y0/image/upload/v1737442873/PN532-front.jpg" alt="PN532 NFC/RFID 模块" title="PN532 NFC/RFID 模块"></p>
<p>需要注意模块背面的 <code>GND</code>、<code>VCC</code>、<code>TXD</code> 和 <code>RXD</code> 4 个引脚：</p>
<p><img src="http://res.cloudinary.com/digwht2y0/image/upload/v1737442872/PN532-back.jpg" alt="PN532 背面引脚" title="PN532 背面引脚"></p>
<p>PL-2303HX USB 转 TTL 模块就更简单了，背面依次是 <code>3.3V</code>、<code>5.0V</code>、<code>TXD</code>、<code>RXD</code> 和 <code>GND</code> 5 个引脚：</p>
<p><img src="http://res.cloudinary.com/digwht2y0/image/upload/v1737442872/PL2303HX.jpg" alt="PL-2303HX 背面引脚" title="PL-2303HX 背面引脚"></p>
<p>将引脚针焊接到 PN532 的 4 个引脚，然后按下面的顺序和 PL-2303HX 模块连接起来即可：</p>
<ul>
<li>PN532 的 <code>VCC</code> &lt;-&gt; PL-2303HX 的 <code>5.0V</code>；</li>
<li>PN532 的 <code>GND</code> &lt;-&gt; PL-2303HX 的 <code>GND</code>；</li>
<li>PN532 的 <code>RXD</code> &lt;-&gt; PL-2303HX 的 <code>TXD</code>；</li>
<li>PN532 的 <code>TXD</code> &lt;-&gt; PL-2303HX 的 <code>RXD</code>。</li>
</ul>
<p>完成之后就可以插在电脑的 USB 接口上使用了：</p>
<p><img src="http://res.cloudinary.com/digwht2y0/image/upload/v1737442876/PN532-TTL.jpg" alt="NFC 读卡器" title="NFC 读卡器"></p>
<h3 id="关于-uid-卡">关于 UID 卡</h3>
<p>M1 1k 卡有 16 个数据存储区（扇区），编号是 0 到 15，每个扇区都有独立的加密 key，每个扇区又分为 4 个存储单元（块）。在 M1 卡中数据存储的最小单位就是“块”，每一块有 16 字节用来存放数据。</p>
<p>由于一般的 M1 卡（例如 NFC 读卡器模块商家赠送的两张白卡）的 0 扇区 0 块为制造商使用，其中包括的 UID 值等数据并不能随意修改，这样即使复制下来也没什么意义了。</p>
<p>这里我使用的是被称为 <code>Chinese Magic Card</code> 的 0 扇区 0 块可写的 CUID 卡，相对于普通 UID 卡其好处在于可以被反复擦写，而且还支持使用兼容 M1 卡的 Android 手机（一般都是采用 NXP NFC 芯片的手机）来进行读写。</p>
<h2 id="使用-mfoc-工具复制门禁卡">使用 mfoc 工具复制门禁卡</h2>
<p><a href="https://github.com/nfc-tools/mfoc" target="_blank">MFOC</a>（Mifare Classic Offline Cracker）是一款基于 nested authentication 验证漏洞破解含有默认 key 的M1卡的开源软件，mfoc 软件自带了一些常用的默认 key 来进行破解，用户也可以通过参数添加自定义的 key。</p>
<h3 id="安装-libnfc">安装 libnfc</h3>
<p>为了方便我就直接在 Chromebook 上安装使用了，插上自制的 USB NFC 读卡器之后，我们可以使用 <code>lsusb</code> 命令检查是否找到了 PL-2303HX 设备：</p>
<pre class="brush: bash; title: ; notranslate">
(trusty)zzm@localhost:~$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 041: ID 0cf3:e003 Atheros Communications, Inc. 
Bus 001 Device 039: ID 0bda:575a Realtek Semiconductor Corp. 
Bus 001 Device 043: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
</pre>
<p>首先必须安装 mfoc 依赖的 libnfc 包：</p>
<pre class="brush: bash; title: ; notranslate">
(trusty)zzm@localhost:~$ sudo apt-get install libnfc-bin libnfc-dev libnfc-examples
</pre>
<p>对于 PL-2303HX 上的 PN532 模块，我们需要修改 libnfc 配置文件开启自动扫描，否则将无法正确识别到 NFC 设备：</p>
<pre class="brush: bash; title: ; notranslate">
(trusty)zzm@localhost:~$ sudo mkdir -p /etc/nfc/devices.d
(trusty)zzm@localhost:~$ cat &gt; /etc/nfc/libnfc.conf
allow_autoscan = true
allow_intrusive_scan = true
</pre>
<p>此时将门禁卡放到 PN532 模块上，以 root 用户身份运行 <code>nfc-list</code> 命令，没什么意外的话就可以识别到 NFC 设备，并能读取到门禁卡 UID 信息了：</p>
<pre class="brush: bash; title: ; notranslate">
(trusty)zzm@localhost:~$ sudo nfc-list
nfc-list uses libnfc 1.7.0
NFC device: pn532_uart:/dev/ttyUSB0 opened
1 ISO14443A passive target(s) found:
ISO/IEC 14443A (106 kbps) target:
    ATQA (SENS_RES): 00  04
       UID (NFCID1): 8e  f3  7c  de
      SAK (SEL_RES): 08
</pre>
<h3 id="安装和使用-mfoc">安装和使用 mfoc</h3>
<p>最好自行编译安装 GitHub 上最新版本的 mfoc：</p>
<pre class="brush: bash; title: ; notranslate">
(trusty)zzm@localhost:~/Downloads/src$ wget https://github.com/nfc-tools/mfoc/archive/mfoc-0.10.7.tar.gz
(trusty)zzm@localhost:~/Downloads/src/mfoc-mfoc-0.10.7$ autoreconf -vis
(trusty)zzm@localhost:~/Downloads/src/mfoc-mfoc-0.10.7$ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
(trusty)zzm@localhost:~/Downloads/src/mfoc-mfoc-0.10.7$ sudo make
(trusty)zzm@localhost:~/Downloads/src/mfoc-mfoc-0.10.7$ sudo make install
</pre>
<p>安装成功之后就可以运行 mfoc 命令尝试破解读取门禁卡数据了，参数为需要导出的备份文件名：</p>
<pre class="brush: bash; title: ; notranslate">
(trusty)zzm@localhost:~/Downloads$ sudo mfoc -O bak.dmp
ISO/IEC 14443A (106 kbps) target:
    ATQA (SENS_RES): 00  04
* UID size: single
* bit frame anticollision supported
       UID (NFCID1): 8e  f3  7c  de
      SAK (SEL_RES): 08
* Not compliant with ISO/IEC 14443-4
* Not compliant with ISO/IEC 18092

Fingerprinting based on MIFARE type Identification Procedure:
* MIFARE Classic 1K
* MIFARE Plus (4 Byte UID or 4 Byte RID) 2K, Security level 1
* SmartMX with MIFARE 1K emulation
Other possible matches based on ATQA &amp; SAK values:

Try to authenticate to all sectors with default keys...
Symbols: '.' no key found, '/' A key found, '\' B key found, 'x' both keys found
[Key: ffffffffffff] -&gt; [................]
[Key: a0a1a2a3a4a5] -&gt; [................]
[Key: d3f7d3f7d3f7] -&gt; [................]
[Key: 000000000000] -&gt; [................]
[Key: b0b1b2b3b4b5] -&gt; [................]
[Key: 4d3a99c351dd] -&gt; [................]
[Key: 1a982c7e459a] -&gt; [................]
[Key: aabbccddeeff] -&gt; [................]
[Key: 714c5c886e97] -&gt; [................]
[Key: 587ee5f9350f] -&gt; [................]
[Key: a0478cc39091] -&gt; [................]
[Key: 533cb6c723f6] -&gt; [................]
[Key: 8fd0a4f256e9] -&gt; [................]

Sector 00 -  UNKNOWN_KEY [A]  Sector 00 -  UNKNOWN_KEY [B]  
Sector 01 -  UNKNOWN_KEY [A]  Sector 01 -  UNKNOWN_KEY [B]  
Sector 02 -  UNKNOWN_KEY [A]  Sector 02 -  UNKNOWN_KEY [B]  
Sector 03 -  UNKNOWN_KEY [A]  Sector 03 -  UNKNOWN_KEY [B]  
Sector 04 -  UNKNOWN_KEY [A]  Sector 04 -  UNKNOWN_KEY [B]  
Sector 05 -  UNKNOWN_KEY [A]  Sector 05 -  UNKNOWN_KEY [B]  
Sector 06 -  UNKNOWN_KEY [A]  Sector 06 -  UNKNOWN_KEY [B]  
Sector 07 -  UNKNOWN_KEY [A]  Sector 07 -  UNKNOWN_KEY [B]  
Sector 08 -  UNKNOWN_KEY [A]  Sector 08 -  UNKNOWN_KEY [B]  
Sector 09 -  UNKNOWN_KEY [A]  Sector 09 -  UNKNOWN_KEY [B]  
Sector 10 -  UNKNOWN_KEY [A]  Sector 10 -  UNKNOWN_KEY [B]  
Sector 11 -  UNKNOWN_KEY [A]  Sector 11 -  UNKNOWN_KEY [B]  
Sector 12 -  UNKNOWN_KEY [A]  Sector 12 -  UNKNOWN_KEY [B]  
Sector 13 -  UNKNOWN_KEY [A]  Sector 13 -  UNKNOWN_KEY [B]  
Sector 14 -  UNKNOWN_KEY [A]  Sector 14 -  UNKNOWN_KEY [B]  
Sector 15 -  UNKNOWN_KEY [A]  Sector 15 -  UNKNOWN_KEY [B]  
mfoc: ERROR: 

No sector encrypted with the default key has been found, exiting..
</pre>
<p>如果运行正常没有报错的话，那么恭喜你，mfoc 工具会将整个 M1 卡备份为指定的文件。你可以跳过下面这一步接着就将备份文件写入新卡了。</p>
<p>如果你也遇到我贴在上面的错误输出，说明你的门禁卡并没有使用这些默认 key，此时就要请出 mfcuk 工具了。</p>
<h2 id="使用-mfcuk-工具">使用 mfcuk 工具</h2>
<p><a href="https://github.com/nfc-tools/mfcuk" target="_blank">MFCUK</a>（MiFare Classic Universal toolKit） 是一款基于 dackside 攻击原理破解全加密 M1 卡的开源软件，mfcuk 通过算法的漏洞破解出第一个 key，如果某个扇区的 key 被破解出来，就可以再使用 mfoc 工具使用 nested authentication 攻击破解其他扇区的密码。</p>
<p>首先从 GitHub 上下载代码并编译安装：</p>
<pre class="brush: bash; title: ; notranslate">
(trusty)zzm@localhost:~/Downloads/src$ wget https://github.com/nfc-tools/mfcuk/archive/mfcuk-0.3.8.tar.gz
(trusty)zzm@localhost:~/Downloads/src/mfcuk-mfcuk-0.3.8$ autoreconf -vis
(trusty)zzm@localhost:~/Downloads/src/mfcuk-mfcuk-0.3.8$ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
(trusty)zzm@localhost:~/Downloads/src/mfcuk-mfcuk-0.3.8$ sudo make
(trusty)zzm@localhost:~/Downloads/src/mfcuk-mfcuk-0.3.8$ sudo make install
</pre>
<p>接着就可以用 mfcuk 进行破解了，我这边破解第一个 key 用了近半个小时的时间：</p>
<pre class="brush: bash; title: ; notranslate">
(trusty)zzm@localhost:~/Downloads$ sudo mfcuk -C -R 0:A -s 250 -S 250 -v 3
</pre>
<p>如果破解顺利的话，mfcuk 命令输出中会显示类似下面的 key 信息：</p>
<pre class="brush: plain; title: ; notranslate">
INFO: block 4 recovered KEY: XXXXXXXXXXXX
</pre>
<p>得到第一个 key 之后，我们就可以按 <kbd>Ctrl-C</kbd> 键退出 mfcuk 命令。</p>
<p>此时我们就可以把破解出来的 key 添加到 mfoc 命令的自定义参数中：</p>
<pre class="brush: bash; title: ; notranslate">
(trusty)zzm@localhost:~/Downloads$ sudo mfoc -O bak.dmp -k XXXXXXXXXXXX
</pre>
<p>如果 mfcuk 破解得到的第一个 key 是正确的，mfoc 命令一般会在几分钟之内完成整个 M1 卡所有扇区的破解，最终将成功生成导出备份文件。</p>
<h2 id="写入新-uid-卡">写入新 UID 卡</h2>
<p>通过 mfoc 和 mfcuk 工具成功导出原门禁卡数据之后，我们就可以将备份文件写入新的 UID 卡了。</p>
<h3 id="linux-系统写-uid-卡">Linux 系统写 UID 卡</h3>
<p>Linux 系统下我们可以使用 libnfc 软件包自带的 <code>nfc-mfclassic</code> 工具来写新的 UID 卡：</p>
<pre class="brush: bash; title: ; notranslate">
(trusty)zzm@localhost:~/Downloads$ sudo nfc-mfclassic W a bak.dump bak.dump f
</pre>
<p><code>nfc-mfclassic</code> 命令的 <code>W</code> 参数表示以 unlocked write 方式写入包含 0 扇区 0 块的数据（必须是 0 扇区 0 块国产魔卡）。</p>
<p>不过可惜的是我使用 <code>nfc-mfclassic</code> 工具写购买的 CUID 卡始终会报 0 块写入失败，无奈只能在 Windows 系统上使用其它工具写卡。</p>
<h3 id="windows-系统写-uid-卡">Windows 系统写 UID 卡</h3>
<p>Windows 上我使用专门适配 PN532 NFC 读卡器设备的 MiFare Offline Cracker GUI（MFOC GUI）工具来写新的 UID 卡，软件界面如下：</p>
<p><img src="http://res.cloudinary.com/digwht2y0/image/upload/v1737442840/mfocgui-pn532-win.jpg" alt="Windows MFOC GUI" title="Windows MFOC GUI"></p>
<p>打开软件之后，首先需要确认 Reader 处能正确识别到 USB 转 TTL 设备（我的是 PN532 COM3 设备），放上新的 UID 卡之后，点击 <code>Read data (Reader)</code> 按钮将会从读卡器读取卡的类型和 UID 值等信息。</p>
<p>选中 <code>Write keys</code> 和 <code>Non-OV Card</code> 复选框，然后点击 <code>Write data (Reader)</code> 按钮，软件会提示你选择之前导出的备份文件，确认之后就会开始将数据写入新卡。</p>
<p>一切运行正常的话，你可以再次点击 <code>Read data (Reader)</code> 按钮读取新卡的 UID 值，如果和原来的门禁卡  UID 一致那就表示写入成功咯。</p>
<blockquote>
<p><strong>提示</strong></p>
<p>如果你使用的其它软件导出的备份文件大小是 1kb 而不是 4kb，那么需要先使用 <code>fixdump</code> 工具修复备份文件，然后再使用 MFOC GUI 写入新卡。</p>
<p>Windows 上的 MFOC GUI 工具、<code>fixdump</code> 还有 MFCUK 软件我已经上传到百度网盘了，有需要的朋友可以通过下面的分享链接下载：</p>
<p><a href="https://pan.baidu.com/s/1kV7MOg3" target="_blank">https://pan.baidu.com/s/1kV7MOg3</a></p>
</blockquote>
<h2 id="改装到手机">改装到手机</h2>
<p>上面的复制及写入步骤都完成之后，我就拿着新复制的两张 UID 卡到小区门禁那测试，不出意外都成功地刷开了两边侧门的门禁。</p>
<p>为了不用外出时还专门带张门禁卡，我决定稍微小改一下 UID 卡装到手机上，首先拆开 UID 卡取出内部的 M1 电子标签，这里就要提醒大家最好购买方便拆装的钥匙扣样式的卡了：</p>
<p><img src="http://res.cloudinary.com/digwht2y0/image/upload/v1737372135/M1-CUID.jpg" alt="M1 电子标签" title="M1 电子标签"></p>
<p>然后将取出的 M1 电子标签用 NFC 贴纸之类的东西贴到手机后盖或者手机壳上，由于我的华硕 Zenfone 2 手机后盖上有 NFC 线圈，因此只能贴到手机壳上，另外 M1 电子标签最好能远离手机后盖上的 NFC 线圈：</p>
<p><img src="http://res.cloudinary.com/digwht2y0/image/upload/v1737372293/M1-sticker-phone-case.jpg" alt="手机后盖 M1 标签" title="手机后盖 M1 标签"></p>
<p>搞定之后就能很方便地用手机直接刷小区门禁了，最后祝大家玩的开心，本文中使用的工具和方法还请勿用于非法用途哦。</p>
]]></content:encoded>
			<wfw:commentRss>https://zohead.com/archives/copy-mifare-classic/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
	</channel>
</rss>
