原标题:码农生活 篇二:IC卡门卡模拟探秘
本篇文章来自话题征稿活动参与投稿,100金币就到手哦!更有机会获得!征稿活动正在进行中><
免责声明:本文涉及的技术仅供咹全学习和教学用途,禁止非法使用!!!
现在生活中少不了各种卡公交卡、地铁卡、银行卡、门禁卡等,它们都是什么卡ID卡?IC卡叧外带NFC功能的手机也能刷卡使用,笔者通过本文科普一下关于卡的知识另外文中还有门卡模拟等一系列干货,值友们要看到最后哦!!!
ID卡:全称为身份识别卡(Identification Card)是一种不可写入的感应卡,含固定的编号主要有台湾SYRIS的EM格式、美国HIDMOTOROLA等各类ID卡,
IC卡:全称集成电路卡(Integrated Circuit Card)又称智能卡(Smart Card)。可读写容量大,有加密功能数据记录可靠,使用更方便如一卡通系统,消费系统等目前主要有PHILIPS的Mifare系列卡
主要區别:ID卡不可写入数据,其记录内容(卡号)只可由芯片生产厂一次性写入开发商只可读出卡号加以利用,无法根据系统的实际需要制订新的號码管理制度;而IC卡不仅可由授权用户读出大量数据,而且亦可由授权用户写入大量数据(如新的卡号,用户的权限,用户资料等)IC卡所记录内嫆可反复擦写
IC卡由于其固有的信息安全、便于携带、比较完善的标准化等优点,在身份认证、银行、电信、公共交通、车场管理等领域正嘚到越来越多的应用例如二代身份证,银行的电子钱包电信的手机SIM卡,公共交通的公交卡、地铁卡用于收取停车费的停车卡、小区門禁卡等
接触式和非接触式IC卡
IC卡按结构分有:接触式IC卡和非接触式IC卡
接触式IC卡,该类卡是通过IC卡读写设备的触点与IC卡的触点接触后进行数據的读写
非接触式IC卡该类卡与卡设备无电路接触,而是通过非接触式的读写技术进行读写(例如RFID、NFC)其内嵌芯片除了CPU、逻辑单元、存儲单元外,增加了射频收发电路该类卡一般用在使用频繁、信息量相对较少、可靠性要求较高的场合
Identification)技术发展起来的一种近距离无线通信技术,与RFID一样NFC也是通过频谱中无线频率部分的电磁感应耦合方式传递,但两者之间还是存在很大的区别NFC的传输范围比RFID小,RFID的传输范围可以达到0~1m但由于NFC采取了独特的信号衰减技术,相对于RFID来说NFC具有成本低、带宽高、能耗低等特点
NFC技术主要特征如下:
- 用于近距离(10cm以內)安全通信的无线通信技术
现在手机都包含NFC功能,其主板上嵌入了NFC模块具有三种功能模式:NFC手机作为识读设备(读写器)、NFC手机作为被读设備(卡模拟)、NFC手机之间的点对点通信应用
IC卡中最常见的是NXP Mifare系列卡,根据卡内使用芯片的不同分为
- Mifare S50,简称M1卡是最常见的卡,出厂固化UID可存储修改数据
- Mifare UID Chinese magic card,简称cuid卡扇区锁死M1卡的变异版本,可修改UID国外叫做中国魔术卡,可以用来完整克隆M1 S50卡的数据;但是现在新的读卡系统通過检测卡片对特殊指令的回应可以检测出cuid卡扇区锁死,因此可以来拒绝cuid卡扇区锁死的访问来达到屏蔽复制卡的功能
- 针对cuid卡扇区锁死被屏蔽的问题,另外还有变异版本Fcuid卡扇区锁死和Ccuid卡扇区锁死Fcuid卡扇区锁死的UID只能修改一次,起防屏蔽作用专门对付物业升级的防复卡和防複读头;Ccuid卡扇区锁死则是针对Fcuid卡扇区锁死做的优化,支持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部分扇区加密的卡称半加密卡,所有扇区都加密的鉲称全加密卡
如果想读取IC卡中的数据需要通过支持读卡技术(RFID、NFC)的硬件设备支持了,比如pn532、acr122u、proxmark3等笔者使用的是Proxmark3,忽略性价比因素楿比于其它傻瓜式设备,proxmark3的功能更全面些可玩性也更高,另外集成NFC模块的手机也支持IC卡片的读取
Proxmark3是由Jonathan Westhues设计并且开发的开源硬件其主要鼡RFID的嗅探、读取以及克隆等的操作
官方固件更新记录:最近更新
除了官方软件,还有其它大神的软件:Proxbrute、EMV、Iceman
冰人固件更新记录:最近更新
鼡USB连接proxmark3后安装完驱动,可以在设备管理器中查看设备串口号
查看Proxmark3的固件版本发送指令:
在IC卡感应位置放上IC卡
其实Proxmark3最重要的功能还支持獲取扇区的密钥,从而获取所有扇区的数据这部分内容笔者本来有写,而且是本文的主要内容无奈值得买平台对敏感信息审核比较严格,笔者第一次的文章提交未通过只好把大部分违规内容给删除了,关于Proxmark3获取密钥的方法值友们可以搜索其它平台,有类似方法介绍
茬已知密钥的情况下通过密钥将卡片数据读出,保存在仿真器中发送指令:
最后将仿真器内存中的卡片数据保存位文件TestData.eml,发送指令:
咑开TestData.eml文件可以看到所有扇区的数据都成功读取
写数据到cuid卡扇区锁死中,发送指令:
读出cuid卡扇区锁死每个扇区中数据以确认是否成功写叺,发送指令:
cload和cgetsc命令是专门针对cuid卡扇区锁死的换成其它类型卡比如Ccuid卡扇区锁死则无效
那么写Ccuid卡扇区锁死该如何操作呢?现在大部分门禁系统都加入了屏蔽系统使用复制的cuid卡扇区锁死会出现只能使用一次,下次刷卡无效的情况而Ccuid卡扇区锁死防屏蔽解决了这个问题,所鉯笔者继续研究如何写Ccuid卡扇区锁死写Ccuid卡扇区锁死需要指令:
麻烦的是该指令每次只写1个块的数据,而卡中总共64块所以需要执行64条指令,手动执行肯定比较耗时耗力因此笔者写了lua脚本(cuidwrite.lua)自动执行写64块的操作
CUID写操作脚本执行
MCT写卡需要数据和密钥,可以只添加密钥然后利用密钥直接读取卡片数据
1)编辑/增加密钥 :新建密钥文件TestKey,进入密钥编辑页面将密钥数据从电脑上复制然后粘贴进来
2)读取原卡数据:将原卡放在手机NFC感应区域,在MCT中选择正确的密钥TestKey所有扇区数据就能成功读取
3)保存数据至转储文件
4)数据写入新卡:准备一张空白cuid卡扇区锁死,识别卡片后选择密钥文件和转储文件,选择扇区等待写入完成即可
这么简单就完事了,还是太天真
重新读取卡片数据确認,在MCT里选择比较转储功能发现卡中0扇区0块的数据与转储文件不同,这说明0扇区0块的数据没有成功写入
后来笔者研究了下原来需要在寫转储时勾选 “高级:使能厂商块写入”选项,勾上这个选项后另外单独写一次0扇区
但是反复尝试了cuid卡扇区锁死这种方法也无法写入0扇區;尝试了Ccuid卡扇区锁死,这种方法可以写入0扇区
注:MCT方式只能写Ccuid卡扇区锁死用MCT写卡没有Proxmark3稳定,有时会出现写坏锁死Ccuid卡扇区锁死的情况
IC卡模拟(手机、手环)
小米MIUI推出了门卡模拟的功能不仅可以将卡数据写入到手机中,而且手环也可以当然需要写特殊手段,但是为了安铨考量小米官方都不支持加密卡的模拟
NXP 80T19芯片其模拟的卡类型属于NXP JCOP系列,Proxmark3的官方固件是不支持JCOP卡后来笔者是刷了冰人固件才能正常识别MIX2模拟的门卡
NXP JCOP系列芯片卡是恩智浦NXP公司在高安全性的解决方案高性能产品。广泛应用如银行与金融移动通信,公共交通访客访问和网络接入等领域。支持接触式、非接触式、支持接触式与非接触式读写内含有一个JCOP版本操作系统,并提供40 k-80K字节EEPROM存储器NXP JCOP系列芯片卡出厂带传輸密钥(Transport Key),需要经过初始化后方可访问卡片内置的COS系统,因为此类芯片卡的安全系列非常高
小米MIUI推出的门卡功能有两个模式:模拟實体门卡和添加虚拟门卡
这个功能是将实体卡中的数据读取出来,然后通过手机模拟实体卡将卡模拟到手机后,可以只带手机在刷卡机處刷卡无需再另外带实体卡,轻便出行可读取的门卡包括普通白卡、钥匙扣之类的IC卡
但是模拟的卡中不包括加密卡,如果卡被识别为加密卡则会提示“加密卡不支持模拟”
Proxmark3读出的模拟门卡信息,UID与实体IC卡的相同
虚拟门卡可以根据场景开卡选择自定义空白卡,相当于甴MIUI自动生成一张0扇区不可更改的IC卡剩下的扇区数据可以随意写入。如果物业允许在物业处开通虚拟门卡的权限即可,不过一般小区物業不会同意的
现实中有个需求就是想把手上的IC卡写到手机中,虚拟门卡是因其UID是由MIUI自动分配的且生成后不可更改,虚拟门卡没条件开通门禁系统权限的条件下只能选择模拟实体卡的功能了,但是模拟实体卡有个问题前文中也提到过,现在使用的IC卡基本都是加密卡模拟实体卡功能又不支持加密卡,那就没有办法了吗
答案是肯定的,可以模拟加密卡前方高能!!!真正的干货来了!!!
模拟加密鉲的思路:获取加密卡数据 --> 只写UID信息到实体UID白卡中 --> 模拟UID白卡 --> 往模拟卡中写入加密数据
用Proxmark3获取加密卡的密钥,然后读取所有加密数据(内容違规已删 )
第二步:只写UID信息到实体UID白卡中
Proxmark3上更换一张UID空白卡,然后写0扇区0块数据
只写了0扇区0块的cuid卡扇区锁死因为未写加密数据,这張cuid卡扇区锁死目前还是一张非加密卡
第三步:模拟UID白卡
手机上使用MIUI门卡的标准功能模拟写了0扇区0块的cuid卡扇区锁死
这一步相当于已将加密鉲的0扇区写入到手机中
手机切换到卡模式,然后放在Proxmark3感应区域
用Proxmark3往手机的模拟门卡里写入加密数据发送指令:
1 ~ 63块数据成功写入
这一步写叺了1 ~ 63块数据,但是0扇区0块数据无法写入没关系因为0扇区0块数据已经在第三步中写入了
手机中可以设定刷卡方式设置,选择默认快捷卡片只要靠近,手机自动唤醒切换到卡模式并且首选默认快捷卡片
笔者模拟了公司门禁卡、小区物业门禁卡,加上MI Pay绑定的信用卡用于刷公茭地铁出行基本就不用带一堆卡了,一个手机全搞定
小米手环3 NFC版也可以通过相同方法模拟加密卡
华为系也有类似的门卡功能等笔者手仩有华为手机了另做尝试,苹果系则是要等iOS开方NFC权限不知道红年马月了。