码农的悲催日常生活(码农生活IC卡门卡模拟探秘)
本文作者:Hoki87
免责声明:本文涉及的技术仅供安全学习和教学用途,禁止非法使用!!!
前言
现在生活中少不了各种卡,公交卡、地铁卡、银行卡、门禁卡等,它们都是什么卡?ID卡?IC卡?另外带NFC功能的手机也能刷卡使用,笔者通过本文科普一下关于卡的知识,另外文中还有门卡模拟等一系列干货,值友们要看到最后哦!!!
ID和IC
ID卡:全称为身份识别卡(Identification Card),是一种不可写入的感应卡,含固定的编号,主要有台湾SYRIS的EM格式、美国HIDMOTOROLA等各类ID卡,
IC卡:全称集成电路卡(Integrated Circuit Card),又称智能卡(Smart Card)。可读写,容量大,有加密功能,数据记录可靠,使用更方便,如一卡通系统,消费系统等,目前主要有PHILIPS的Mifare系列卡
主要区别:ID卡不可写入数据,其记录内容(卡号)只可由芯片生产厂一次性写入,开发商只可读出卡号加以利用,无法根据系统的实际需要制订新的号码管理制度;而IC卡不仅可由授权用户读出大量数据,而且亦可由授权用户写入大量数据(如新的卡号,用户的权限,用户资料等),IC卡所记录内容可反复擦写
接触式IC卡和读卡机
非接触式IC卡,该类卡与卡设备无电路接触,而是通过非接触式的读写技术进行读写(例如RFID、NFC),其内嵌芯片除了CPU、逻辑单元、存储单元外,增加了射频收发电路。该类卡一般用在使用频繁、信息量相对较少、可靠性要求较高的场合
IC 白卡
IC钥匙扣
IC滴胶卡
IC手机贴
NFC是现在主流的非接触式IC卡的读卡技术,其全称是近场通信(near field communication),是基于无线射频识别RFID(Radio Frequency Identification)技术发展起来的一种近距离无线通信技术,与RFID一样,NFC也是通过频谱中无线频率部分的电磁感应耦合方式传递,但两者之间还是存在很大的区别。NFC的传输范围比RFID小,RFID的传输范围可以达到0~1m,但由于NFC采取了独特的信号衰减技术,相对于RFID来说NFC具有成本低、带宽高、能耗低等特点。
NFC技术主要特征如下:
- 用于近距离(10cm以内)安全通信的无线通信技术
- 射频频率:13.56MHz
- 射频兼容:ISO 14443,ISO 15693,Felica标准
- 数据传输速度:106kbit/s,212 kbit/s,424kbit/s
现在手机都包含NFC功能,其主板上嵌入了NFC模块,具有三种功能模式:NFC手机作为识读设备(读写器)、NFC手机作为被读设备(卡模拟)、NFC手机之间的点对点通信应用
IC卡基础知识
IC卡中最常见的是NXP Mifare系列卡,根据卡内使用芯片的不同,分为
- Mifare S50,简称M1卡,是最常见的卡,出厂固化UID,可存储修改数据
- Mifare UltraLight,简称M0卡,低成本卡,出厂固化UID,可存储修改数据
- Mifare UID Chinese magic card,简称UID卡,M1卡的变异版本,可修改UID,国外叫做中国魔术卡,可以用来完整克隆M1 S50卡的数据;但是现在新的读卡系统通过检测卡片对特殊指令的回应,可以检测出UID卡,因此可以来拒绝UID卡的访问,来达到屏蔽复制卡的功能
- 针对UID卡被屏蔽的问题,另外还有变异版本FUID卡和CUID卡,FUID卡的UID只能修改一次,起防屏蔽作用,专门对付物业升级的防复卡和防复读头;CUID卡则是针对FUID卡做的优化,支持UID号重复擦写,无需锁卡自动起防屏蔽作用
以标准M1卡为例,其容量为1K字节,总共分为16个扇区,每个扇区分为4个数据块,每个数据块16个字节
每个扇区中的块按照0 ~ 3编号,第3个块中包含KEYA(密钥A)、控制位、KEYB(密钥B),每个扇区可以通过它包含的密钥A或者密钥B单独加密
0扇区0块是特殊的数据块,用于存放制造商代码,包括芯片序列号UID,ATQA和SAK
非加密卡和加密卡的区别就是,非加密卡中所有扇区的KEYA和KEYB数值都是默认值FFFFFFFFFFFF;而加密卡中,其中有扇区的KEYA和KEYB不等于FFFFFFFFFFFF,部分扇区加密的卡称半加密卡,所有扇区都加密的卡称全加密卡
M1卡数据结构
IC卡读写
设备
如果想读取IC卡中的数据,需要通过支持读卡技术(RFID、NFC)的硬件设备支持了,比如pn532、acr122u、proxmark3等,笔者使用的是Proxmark3,忽略性价比因素,相比于其它傻瓜式设备,proxmark3的功能更全面些,可玩性也更高,另外集成NFC模块的手机也支持IC卡片的读取
Proxmark3
读取IC卡
Proxmark3是由Jonathan Westhues设计并且开发的开源硬件,其主要用RFID的嗅探、读取以及克隆等的操作
官方固件更新记录:最近更新2019/03/15
除了官方软件,还有其它大神的软件:Proxbrute、EMV、Iceman
笔者用的是冰人(iceman)固件
冰人固件更新记录:最近更新2019/03/06
读卡方法:
用USB连接proxmark3后,安装完驱动,可以在设备管理器中查看设备串口号
串口识别COM4
打开PM3 Universal GUI软件,选择 COM4 连接proxmark3
查看Proxmark3的固件版本,发送指令:
- hw version
已刷冰人固件
在IC卡感应位置放上IC卡
然后读取卡片信息,发送指令:
- hf 14a info
其实Proxmark3最重要的功能还支持获取扇区的密钥,从而获取所有扇区的数据,这部分内容笔者本来有写,而且是本文的主要内容,无奈值得买平台对敏感信息审核比较严格,笔者第一次的文章提交未通过,只好把大部分违规内容给删除了,关于Proxmark3获取密钥的方法,值友们可以搜索其它平台,有类似方法介绍
在已知密钥的情况下,通过密钥将卡片数据读出,保存在仿真器内存中,发送指令:
- hf mf ecfill A 1
最后将仿真器内存中的卡片数据保存位文件TestData.eml,发送指令:
- hf mf esave 1 TestData
打开TestData.eml文件,可以看到所有扇区的数据都成功读取
写卡方法:
写UID卡:
准备一张UID卡,读取卡片信息,其中Answers to magic commands: Yes表示这张卡是中国魔术卡(UID卡)
写数据到UID卡中,发送指令:
- hf mf cload TestData
读出UID卡每个扇区中数据,以确认是否成功写入,发送指令:
- hf mf cgetsc n
cload和cgetsc命令是专门针对UID卡的,换成其它类型卡比如CUID卡则无效
写CUID卡:
那么写CUID卡该如何操作呢?现在大部分门禁系统都加入了屏蔽系统,使用复制的UID卡会出现只能使用一次,下次刷卡无效的情况,而CUID卡防屏蔽解决了这个问题,所以笔者继续研究如何写CUID卡,写CUID卡需要指令:
- hf mf wrbl blknum A/B KEYA/KEYB 000102030405060708090A0B0C0D0E0F
麻烦的是该指令每次只写1个块的数据,而卡中总共64块,所以需要执行64条指令,手动执行肯定比较耗时耗力,因此笔者写了lua脚本(cuidwrite.lua)自动执行写64块的操作
...
CUID写操作脚本执行
读取CUID卡片信息,其中Answers to magic commands: NO,只有UID卡才会返回YES
手机NFC读写卡
手机中安装MCT(mifare classic tool),无需root,可读取mifare系列IC卡的数据
MCT读取的数据
MCT写卡需要数据和密钥,可以只添加密钥,然后利用密钥直接读取卡片数据
1)编辑/增加密钥 :新建密钥文件TestKey,进入密钥编辑页面,将密钥数据从电脑上复制然后粘贴进来
2)读取原卡数据:将原卡放在手机NFC感应区域,在MCT中选择正确的密钥TestKey,所有扇区数据就能成功读取
如果选择不正确的密钥,则无法读取完整数据
3)保存数据至转储文件
4)数据写入新卡:准备一张空白UID卡,识别卡片后,选择密钥文件和转储文件,选择扇区,等待写入完成即可
这么简单就完事了,还是太天真?
重新读取卡片数据确认,在MCT里选择比较转储功能,发现卡中0扇区0块的数据与转储文件不同,这说明0扇区0块的数据没有成功写入
后来笔者研究了下,原来需要在写转储时勾选 “高级:使能厂商块写入”选项,勾上这个选项后另外单独写一次0扇区
但是反复尝试了UID卡,这种方法也无法写入0扇区;尝试了CUID卡,这种方法可以写入0扇区
注:MCT方式只能写CUID卡,用MCT写卡没有Proxmark3稳定,有时会出现写坏锁死CUID卡的情况
IC卡模拟(手机、手环)
MIUI门卡
小米MIUI推出了门卡模拟的功能,不仅可以将卡数据写入到手机中,而且手环也可以,当然需要写特殊手段,但是为了安全考量,小米官方都不支持加密卡的模拟
笔者的小米MIX2板载NFC芯片是NXP 80T19
NXP 80T19芯片其模拟的卡类型属于NXP JCOP系列,Proxmark3的官方固件是不支持JCOP卡,后来笔者是刷了冰人固件才能正常识别MIX2模拟的门卡
NXP JCOP系列芯片卡是恩智浦NXP公司在高安全性的解决方案高性能产品。广泛应用如银行与金融,移动通信,公共交通,访客访问和网络接入等领域。支持接触式、非接触式、支持接触式与非接触式读写,内含有一个JCOP版本操作系统,并提供40 k-80K字节EEPROM存储器。NXP JCOP系列芯片卡出厂带传输密钥(Transport Key),需要经过初始化后,方可访问卡片内置的COS系统,因为此类芯片卡的安全系列非常高。
小米MIUI推出的门卡功能有两个模式:模拟实体门卡和添加虚拟门卡
模拟实体门卡
这个功能是将实体卡中的数据读取出来,然后通过手机模拟实体卡,将卡模拟到手机后,可以只带手机在刷卡机处刷卡,无需再另外带实体卡,轻便出行。可读取的门卡包括普通白卡、钥匙扣之类的IC卡
但是模拟的卡中不包括加密卡,如果卡被识别为加密卡,则会提示“加密卡不支持模拟”
非加密卡,可以成功模拟,模拟过程中需要证件和密码认证,这功能必须进行安全因素的考量
手机放在IC卡感应器
Proxmark3读出的模拟门卡信息,UID与实体IC卡的相同
添加虚拟门卡
虚拟门卡可以根据场景开卡,选择自定义空白卡,相当于由MIUI自动生成一张0扇区不可更改的IC卡,剩下的扇区数据可以随意写入。如果物业允许,在物业处开通虚拟门卡的权限即可,不过一般小区物业不会同意的
虚拟门卡开卡
Proxmark3读取到的虚拟门卡信息,UID由MIUI自动分配
模拟加密卡
现实中有个需求就是,想把手上的IC卡写到手机中,虚拟门卡是因其UID是由MIUI自动分配的,且生成后不可更改,虚拟门卡没条件开通门禁系统权限的条件下,只能选择模拟实体卡的功能了,但是模拟实体卡有个问题,前文中也提到过,现在使用的IC卡基本都是加密卡,模拟实体卡功能又不支持加密卡,那就没有办法了吗?
答案是肯定的,可以模拟加密卡,前方高能!!!真正的干货来了!!!
模拟加密卡的思路:获取加密卡数据 --> 只写UID信息到实体UID白卡中 --> 模拟UID白卡 --> 往模拟卡中写入加密数据
第一步:获取加密卡数据
用Proxmark3获取加密卡的密钥,然后读取所有加密数据(内容违规,已删
)
第二步:只写UID信息到实体UID白卡中
Proxmark3上更换一张UID空白卡,然后写0扇区0块数据
发送指令:
- hf mf csetblk 0 7295B829760804000214F34CBDBE2F1D
只写了0扇区0块的UID卡,因为未写加密数据,这张UID卡目前还是一张非加密卡
第三步:模拟UID白卡
手机上使用MIUI门卡的标准功能,模拟写了0扇区0块的UID卡
这一步相当于已将加密卡的0扇区写入到手机中
第四步:往模拟卡中写入加密数据
手机切换到卡模式,然后放在Proxmark3感应区域
用Proxmark3往手机的模拟门卡里写入加密数据,发送指令:
- hf mf restore 1 u 7295B829
. . .
1 ~ 63块数据成功写入
这一步写入了1 ~ 63块数据,但是0扇区0块数据无法写入,没关系因为0扇区0块数据已经在第三步中写入了
至此,所有扇区数据已写入到手机中,加密卡模拟成功完成
手机中可以设定刷卡方式设置,选择默认快捷卡片,只要靠近读卡器,手机自动唤醒切换到卡模式,并且首选默认快捷卡片
笔者模拟了公司门禁卡、小区物业门禁卡,加上MI Pay绑定的信用卡用于刷公交地铁,出行基本就不用带一堆卡了,一个手机全搞定
手环模拟
小米手环3 NFC版也可以通过相同方法模拟加密卡
总结
关于模拟加密卡功能,科技方便生活,笔者只尝试了小米系产品,另外华为系也有类似的门卡功能,等笔者手上有华为手机了另做尝试,苹果系则是要等iOS开方NFC权限,不知道红年马月了。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com