背景

搬家之后,进出小区以及地下停车场需要使用门禁卡,现在这年代除了手机外,要一直随身带个门禁卡并不容易,而现在的手机手环基本都有NFC功能,如果能用手机的NFC功能将小区门禁卡拷贝到手机手环上,那么将方便很多。

购买了一个NFC版本的华为手环,手环自带门禁卡拷贝功能,但在拷贝时,提示门禁卡有加密,只能拷贝卡号,拷贝后的门禁卡可能无效。后面尝试后果然无效,遂网上查了一些资料,将门禁卡拷贝的相关逻辑研究了清楚,最终实现了手环进出小区的功能。

在说明如何复制门禁卡前,先对门禁卡的一些基本知识进行说明。

基本知识

目前世面上的门禁卡大体分为两类,ID卡和IC卡。

百度百科对ID卡的介绍如下。

ID卡全称为身份识别卡(Identification Card),是一种不可写入的感应卡,含固定的编号,主要有台湾SYRIS的EM格式、美国HIDMOTOROLA等各类ID卡。ID卡与磁卡一样,都仅仅使用了“卡的号码”而已,卡内除了卡号外,无任何保密功能,其“卡号”是公开、裸露的。

由于ID卡只使用卡号,且无加密机制,因此安全性较低,目前越来越多的门禁系统已经不再使用ID卡。

IC卡相较于ID卡,其内部集成了一块芯片,并提供一定量的存储空间,支持数据读写以及加密功能。

IC卡 (Integrated Circuit Card,集成电路卡),也称智能卡(Smart card)、智慧卡(Intelligent card)、微电路卡(Microcircuit card)或微芯片卡等。它是将一个微电子芯片嵌入符合ISO 7816标准的卡基中,做成卡片形式。IC卡与读写器之间的通讯方式可以是接触式也可以是非接触式。由于IC卡具有体积小便于携带、存储容量大、可靠性高、使用寿命长、保密性强安全性高等特点。

相较于ID卡,IC卡的安全性、可靠性远大于ID卡,目前大部门门禁卡系统基本都是使用IC卡。

在使用手机手环模拟门禁卡之前,我们首先需要知道我们使用的门禁卡是ID还是IC卡。

ID卡使用125KHz的频率进行数据传输,IC卡则使用13.56MHz的频率进行数据传输。手机手环的NFC在13.56 MHz的射频范围内进行数据传输,因此,NFC只能模拟IC卡,无法模拟ID卡。如果小区门禁使用的是ID卡,那么就可以放弃模拟了。

那么该如何辨别自己使用的是ID卡还是IC卡呢?淘宝上相关产品的说明里给了几种方法。

卡片类型判断

个人认为比较靠谱的是第三种方法,打开安卓手机的NFC功能后,直接将门禁卡放在手机后的NFC感应区,如果手机有反应(弹窗或是声音提示),那么基本上就可以断定是IC,否则大概率就是ID卡了。

有的安卓手机的NFC功能可能不会自动检测卡片,这种情况下可以下载NFC Tools或MIFARE Classic Tool等软件,打开软件后,再进行识别检测。

如果使用的是苹果手机,在苹果手机中打开快捷指令,在自动化这里找到NFC,点击扫描后将门禁卡放在手机后方,如果手机提示识别到NFC标签并让命名,那么说明是IC卡,否则则是ID卡。

苹果手机判断卡片类型

由于小区使用的门禁卡是IC卡,没有ID卡进行测试,因此后面的内容都基于IC卡进行介绍。

MIFARE Classic 1K卡

IC卡有很多种类型,在门禁卡系统中,最常用的就是MIFARE Classic 1K卡,常称为M1卡。

其中的1K表示这类卡有1KB的存储空间,这1KB的存储空间被分为16个扇区,每个扇区有64字节,而这64字节又被分为4个块,每个块是16字节。

M1卡数据格式总览

其中第一个扇区的第一个块存储着卡片以及厂商的信息,卡片出厂初始化后,这部分的内容将无法修改。第二、三个块都是数据块,用于存储一些数据,最后一个块是控制块,里面存有密钥以及控制位信息。

M1 0扇区格式

  • 卡号:IC卡的卡号。
  • 异或值:基于卡号计算出的异或值,用于校验。
  • SAK:可以理解为卡片类型,不同的卡片类型有不同的值。
  • ATQA:卡片应答类别。
  • 厂商信息:厂商的信息。
  • KEY A、B:数据的两个加密密钥。
  • 控制位:决定密钥A、B分别对该扇区不同区域的读写权限。

下面是不同类型卡片的SAK和ATQA值。一般来说SAK为08时是M1卡,20是CPU卡,28是CPU模拟卡。

不同卡片的SAK和ATQA值

其他扇区的前三个块都用来存储数据,具体数据内容由厂商自定定义,而每个扇区的最后一个块是该扇区的控制块。

数据块格式

控制块存储着A、B两个密钥以及控制位信息,如果密钥为0xFFFFFFFFFFFF,说明该扇区没有加密。

控制位用于说明密钥A和密钥B对该扇区不同区域的读写权限信息,常见的控制位是0xFF078069。它说明。

  • 数据块区域,密钥A、密钥B均可读写。
  • 密钥A数据区域,使用密钥A可以写,但不能读;使用密钥B无法读写。
  • 控制位区域,使用密钥A可读写;使用密钥B无法读写。
  • 密钥B数据区域,使用密钥A可以读写;使用密钥B无法读写。

由于每个扇区都有着自己的密钥和控制块,因此可以分为这几种情况。

  1. 非加密卡,即所有的扇区都使用了默认密钥,这种卡可以通过设备或是手机NFC直接读取数据。
  2. 半加密卡,即部分扇区使用了自定义密钥进行了加密,而另一部分扇区没有加密。对于加密扇区的数据需要解密后才能读取。
  3. 全加密卡,即所有的扇区都使用了自定义密钥进行了加密,这种情况下,解密难度比较大。

对于IC类的门禁卡来说,其需要使用的数据并不多,大部分情况下,厂商都使用了部分扇区,也只对这些扇区进行了加密,我所在小区的门禁卡只使用了2、3两个扇区,其他扇区都使用了默认密钥,数据也都为空。

M1卡的变种和对抗

在M1的规范中,第一个扇区的第一个块在在初始化后是无法被修改,理论上来说,你无法拿另外一张M1卡完全复制已有的M1卡(卡号无法复制),这样也就保证了M1卡的唯一性。

但国人在M1的基础上进行了魔改,开发出了UID卡。UID卡通过后门指令可以在无需密钥的情况下读写所有的扇区,这样,就可以拿UID卡完全复制已有的M1卡。

之后门禁卡系统厂商对芯片的后门指令进行了检测,若发现门禁卡可以使用后门指令,那么说明是复制卡,之后便直接进行封杀。这个检测也就是俗称的防火墙。

UID卡之后则开发出了CUID卡,CUID卡与UID一样,可以读写所有的扇区,但取消了后门指令,需要使用密钥才能读写所有的扇区,这样就绕过了系统对后门指令的检测。压力再次给到了门禁系统厂商侧。

既然UID卡、CUID卡的0扇区0区块既然都可以写,那么直接写写试试不就行了?如果写成功那么就说明是复制卡了。

针对这个问题,则开发出了FUID、UFUID卡。FUID卡的0扇区0区块允许写一次,写完后就锁定无法再读写了。这样可以进行一次复制,之后就与正常的M1卡无异,规避门禁系统对0扇区0区块写入的尝试。但只能写一次也比较麻烦,万一不小心复制错误,这张卡就直接废了。因此又有了UFUID卡,它的0扇区0区块可以锁定、解锁定。锁定后与M1卡无异,如果需要重新拷贝复制,那么再解锁就可以了,堪称最完美的复制卡。

简单总结下。

  • M1卡,0扇区0区块不可修改,其他扇区可以读写。
  • UID卡,所有扇区可读写,但有后门指令,无法绕过防火墙。
  • CUID卡,所有扇区可读写,可绕过大部分的防火墙。
  • FUID卡,0扇区0区块可以写一次,其他扇区可重复读写。写一次后与标准的M1卡没有区别。
  • UFUID卡,0扇区0区块可以手动控制是否锁卡,不锁卡所有扇区都可读写,锁卡0扇区0区块无法写,与标准M1卡相同。

那门禁厂商是不是没办法了?显然不是,他们又推出了滚动码技术。

所谓滚动码,简单来说就是在门禁卡的数据中有个数字用来标识刷卡的次数,每刷一次卡,都会对这个值+1。

假如当前门禁卡是的滚动码是10,刷了一次卡后,这个值就会变成11。如果这时我们复制了门禁卡,我们的复制卡的滚动码也是11。

这种情况下,如果我们刷原始卡或是复制卡,都是没问题的。但刷了这一次后,假如这次刷的是门禁卡,那么门禁卡的滚动码是12,而复制卡的滚动码是11。如果这个时候再去刷复制卡,系统就会发现最新的滚动码的值(12)与当前的值(11)不符,进而认定该卡存在复制。

不同的门禁系统有不同的处理方案,有的门禁系统会直接拉黑原始卡和复制卡,使得两张卡都不可用;有的系统则只校验但不拉黑,但这种情况下,虽然我们有两张卡,但还是只有一张可以使用(滚动码正确的卡可以用),另外一张卡无法使用。

针对滚动码,有的系统设计存在漏洞,可以通过漏洞保证复制卡和原始卡同时可用,但如果是没漏洞的系统,基本就无解了。

手机手环NFC模拟

手环直接模拟

既然了解了IC门禁卡的基本知识,接下来就可以使用手机手环进行模拟了。这里先回到背景中提到的直接使用手机无法模拟的问题。

我所在的小区使用的门禁卡是普通的M1半加密卡,而目前基本所有的手机手环都不支持对加密M1卡的解密。

这里使用华为手环8直接模拟门禁卡,手机上会提示卡片是加密卡,可能模拟不全。

手环复制门禁卡

直接继续模拟,同时与原始的加密卡的内容比对一下。下图中左侧内容是手环直接模拟的卡片数据,而右侧则是原始的卡片数据。我们可以看到,手环只是把卡号模拟了出来。除此之外,所有扇区的数据都为空,且未加密。

数据对比

显然门禁系统并不会只基于卡号就进行身份验证,因此直接复制出的门禁卡是无法使用的。

借助PCR532设备

要想让手机手环复制门禁卡,就需要借助外部设备了。

我这里使用的是普通款的复制设备(淘宝关键词:pcr532),淘宝大概40多块钱,送两张贴纸uid卡。它的功能比较简单,只支持普通M1卡的读写、破解。不支持ID卡以及CPU卡的读写。

PCR532

这个设备配套有PC和安卓端的软件,可以通过软件对门禁卡进行破解和读写。

PC端的软件界面如下,其提供VIP、SVIP服务用来使用高级功能,对于常规半加密的M1门禁卡的手机手环拷贝来说,免费用户就够用了。

PCR532软件

使用该工具复制门禁卡到手机手环很方便,在图中画框的区域直接给出了复制门禁卡的步骤。

确认门禁卡类型

但在正式按步骤操作前,我们需要先确认下小区的门禁卡能否解密以及是否使用了滚动码技术。

直接将门禁卡放在设备上,并点击开始解卡操作,之后工具会对尝试解密门禁卡的数据,然后自动分析卡片的数据。以我所在的小区为例,可以直接解密,解密后卡片数据在表格A中,对应的分析结果在表格B中。

解密结果

在表格B中,我们可以看到这张门禁卡是富士门禁,其中的数据含义是【到期时间】,位置在第2个扇区0区块的8-10字节,对应的值是500730,即到期时间是 2050年7月30号。

理论上说,如果系统没有其他校验的话,那么修改这个值就可以修改该门禁卡的到期时间了,不过这里距离还远,也就不做尝试了。

除此之外,我们也可以看到其说明【本系统非滚动系统,直接复制原卡】,说明这张门禁卡没有采用滚动码技术,直接复制就行。当然,稳妥起见,也可以先将卡片的数据保存下来,然后再刷一次门禁卡,之后再次解析数据并进行比对,如果数据完全一致,那么就石锤说明没用使用滚动码技术。

如果门禁卡是安全性更高的CPU卡(SAK是20),或是全加密的M1卡,那么该设备就无法将数据破解出来,由于自己这里不涉及,因此也就不再赘述。

模拟

确认数据可以解密,且没用使用滚动码技术后,我们就可以继续门禁卡的复制了。在软件的手机/手环操作区域列出来复制门禁卡复制到手机/手环的步骤,我们直接按对应的步骤操作就行了。

模拟步骤

首先我们需要将门禁卡解卡,并读取相应的信息,这个前面我们已经操作过了。将卡片放在设备上,直接点击第二步的按钮【读取卡号】。

之后,我们需要一张空白的UID卡作为中介卡,将中介卡放在设备上并点击【第三步】写入卡号。

下图中,左侧是写入卡号的中介卡,而右侧则是原始的门禁卡数据。红色的部分表示两边数据不一致。

中介卡数据对比

通过对比我们可以看到,中介卡的卡号和原始卡片完全一致(厂商信息不同,门禁测试不影响),除此之外,所有扇区的密钥都是0xFFFFFFFFFFFFFF。这说明中介卡是一张没有数据的未加密卡。

接下来打开手机,在钱包中打开模拟门禁卡功能,并将我们刚刚得到的中介卡给到手环进行模拟。由于是未加密卡,因此这次直接模拟成功。

下图中,左侧是中介卡数据,而右侧则是手环模拟后的数据,我们可以看到手环的卡号与中介卡一致,也与原始的门禁卡一致。

手环模拟中介卡

之后执行最后一步,将刚刚创建的门禁卡设为默认卡,然后将手环放在设备上,此时点击软件上的【第五步】,软件就会将原始的门禁卡数据全部写到手环里。

写卡

在写入成功后,软件的日志部分会提示有一个扇区没有写成功,这个是正常的,没有写成功的就是0扇区的0块数据,这点前面已经提到了,M1卡的0扇区是无法修改的。

此时再对比手环和原始的门禁卡数据,左侧是手环模拟的数据,而右侧则是原始门禁卡的数据。可以看到除了设备厂商不一样外,其他所有的数据都一样。

手环模拟结果对比

接下来拿着手环模拟的门禁卡去小区门口测试,果然可以了😁。

举一反三

一开始我们有试过直接用手环模拟门禁卡,当时只模拟了卡号,但这一步从结果上来看与PCR532软件上写的第4步已经一致了。

数据对比

那么接下来理论上直接让设备读取原始门禁卡并往手环里写数据就可以了。让设备读取门禁卡数据,然后将手环放在设备上,直接执行【第5步】进行写卡,提示成功。

写入卡片

再重新读取手环模拟卡的数据并与门禁卡进行对比,除了厂商信息有区别外,其他信息完全一致。楼下测试也完全可行。

模拟卡数据对比

因此,实际上使用华为手环模拟时,可以将过程分为三步,且不需要中介卡。

  1. 解卡,确保卡片可以解密。
  2. 直接用手环复制门禁卡,此时手环会将卡号(卡号等信息无需密钥可直接获取)等信息模拟出来。
  3. 直接用设备写手环,此时设备会将数据扇区和所有扇区的密钥写入到手环中。

软件步骤中之所以需要中介卡,我猜可能是有些手机、手环在发现要模拟的卡片是加密卡时,直接拒绝模拟,因此不得不使用完全不加密的中介卡使手机、手环进行卡号模拟。而华为手环直接模拟了卡号,因此实际可以将过程简化。

当然,由于没有其他设备做测试,这里暂无法验证了。

苹果设备解决方案

如果用的是苹果手机以及苹果手表,由于苹果没有开放NFC的相关接口,因此没有办法模拟门禁卡。基于网上的资料来看,有两个折衷的办法。

  1. 使用苹果手机开通一张公交卡,然后到物业那里,将这张公交卡的信息录入到门禁系统中,这样刷这张公交卡就相当于刷门禁卡了。
  2. 购买UID卡卡贴,复制门禁卡后,贴到手机壳上;如果是applewatch,那么可以购买含IC卡芯片的表带,这样可以将门禁卡复制到表带里。

iWatch IC卡表带

最后

使用手环复制门禁卡,再配合智能门锁,出门彻底不用带钥匙了😁。

这里需要注意,在了解IC卡的知识后,只复制自己所在小区的门禁卡就够了,切忌不要尝试去修改与金钱相关的饭卡、公交卡等IC卡的数据,这是违法行为。我在查找相关资料时,已经看到了很多因修改IC卡金钱等数据被抓的案例了。

最后,文中IC门禁卡相关的知识都是网络查询以及个人实践而来,由于自己并非相关专业,如有错误欢迎指正。

参考资料

  1. 【教程】手把手教你玩转IC卡
  2. 各种IC卡和ID卡详解
  3. MF1S50YYX_V1
  4. ISO14443-A
  5. PCR532软件网站
  6. NFC Tool 官方网站