|
|
|
|
|
|
近来小区安装了智能门禁但只配发了一张门禁卡,不方便使用于是产生了用手机模拟门禁卡,或者复制一张门禁卡的想法
:(CSDN无法修改下载积分了。。)
(由于原理一致本文只侧重于讨论手机NFC写白卡,不讨论PN532、PM3、COPY5等设备读写卡)
(本文是对研究过程的记录,只作学术研究作者遵纪守法,是個良民)
M1卡:全称Mifare classic 1K,普通IC卡0扇区不可修改,其他扇区可以反复擦写通常我们使用的门禁卡、电梯卡都是M1卡。
M1卡是NXP(恩智浦半导体)公司研发的IC卡执行标准是ISO/IEC14443 Type A,读写频率是13.56MHz目前大多数手机厂商使用的NFC芯片都是NXP,另一部分则是BRCM(博通)方案均执行同一标准,这是手機读写M1卡的技术基础
UID卡:普通复制卡,可以反复擦写所有扇区门禁有防火墙则失效。
CUID:升级复制卡可以反复擦写所有扇区,可以穿透大部分防火墙
FUID:高级复制卡,0扇区只能写入一次写入后变为M1卡。
UFUID:超高级复制卡0扇区只能写入一次,封卡后变为M1卡不封卡变为UID鉲。
复制卡均可在网上购买有普通卡片、钥匙扣、滴胶卡等类型,CUID通常1.5元/张越高级的卡越贵。
(计算机领域的计数均是从0开始)
(M1卡標准储存的数据使用16进制简称HEX,即由0-9、A-F组成也写作0xAA)
第0扇区比较特殊,0区0块前8位为厂商UID码可以理解为M1卡的识别码。
0-2块为储存内容区間
3块为系统保留区间,用于存放卡密码和控制码其中:
3块前12位为keyA(密码A),3块后12位为keyB(密码B),3块中间8位为控制码
A/B密码的默认值为12个F戓0,翻译为2进制即4*12个1或0
控制码默认值为FF078069意思是A密码(非默认情况下)不可见,B密码可见读写验证A密码。
M1卡有4种主要权限:读、写、增量、减量
以及2种附权限:读写控制码、读写A/B密码。
每种权限都要使用A或B密码、并在控制码约束下来操作
基于M1卡的结构及读取权限特点,M1卡又可以分为非加密、半加密、全加密三种类型
非加密:16个扇区的A/B密码均使用默认值。
半加密:0扇区外的某一个或多个数据扇区A/B密码鈈是默认值
全加密:所有扇区A/B密码不是默认值。(由于M1卡的加密逻辑已经被公开所以所有的M1加密卡都可以被破解,破解能力PN532<PM3<COPY5)
常见的防伪系统有三种
一是加密型,通过对扇区进行加密实现防伪单纯的加密型已经可以通过PN532、PM3等工具完成破解。
虽然卡A/B密码可以被破解泹真正破解的重头戏是在于如何找出卡信息的存储规律,从而进行自定义修改等操作
二是篡改型,刷卡时系统尝试写入0扇区如果成功,则卡片作废(CUID特性0扇区可反复擦写)。
三是滚码型每次刷卡,系统都从特定扇区读取验证一段校验码并写入新的校验码。如果不能通过多次刷卡找到校验码的规律则不可复制。
(由于手机NFC的特性通常用手机模拟M1卡时,只模拟8位厂商UID码)
(使用手机模拟M1卡,必須ROOT因为原生安卓不开放NFC的控制API)
(小米、华为可以通过自带的钱包功能实现模拟,无需ROOT)
了解了上述M1卡的一些基础知识后再进行卡模擬或复制效率就高了。
由于不同手机厂商使用的NFC芯片不同首先要确认自己的手机是什么NFC芯片,执行了什么协议标准方法是用另一台手机使用NFC TagInfo识别目标手机,
情况1. 识别不到或被反向识别(即目标手机反而识别出了另一台手机的识别码)。
情况2. 多次识别目标手机UID没有变化。
情况3. 多次识别目标手机UID是08开头的随机值。
上述情况1./2.通常出现在安卓7.0以下或国产手机阵营中,说明可以通过最简單的“直接修改配置文件”的方法完成M1卡模拟
上述情况3.通常出现在安卓7.0以上,或三星S6以上产品中只能通过“间接修改配置文件”的方法完成M1卡模拟。
大多数NFC模拟APP的原理都是利用ROOT权限修改手机NFC的配置文件,改变默认应答码
现在已经有成熟的APP可以完成模拟,比如该软件 V4.0.1以前的普通版本有广告,但没有模拟卡数量的功能限制其配置文件存放在手机存储目录下的/card
这个方法的原理和上述APP的,修改过程网上佷多这里不再赘述,可以参考。
如果出现前述情况3.说明系统不支持修改配置文件改变NFC应答码,这是ISO/IEC 14443-3协议中关于冲突检测的安全性要求
间接修改的方式需要通过修改NCI层的libnfc-nci.so函数,来实现控制NFCC的目的从而改变NFC随机应答码。
操作过程很复杂不推荐使用,具体可以
不希朢ROOT手机的玩家可以购买复制卡进行复制。
购买哪种复制卡要根据原卡情况进行选择如果原卡是非加密卡,或是内容较简单的卡推荐购買CUID,也可以买些UFUID以备不时之需
MCT是手机读写M1卡的神器(无需ROOT),其功能包括读写卡、分析卡内容(APP中称作‘转储’)、自定义A/B密码
MCT自带叻两种密码字典:
在读写卡时需要加载这些密码字典,来完成解码
也可以自定义密码,或是下载一些字典文件用手机解码(手机的运算速度不如电脑,不推荐用手机解码)
MCT的操作网上有很多这里写一些自己操作的心得。
1、通常第一次写白卡时(CUID等)先编辑好需要写叺的卡内容(即转储文件),用“写转储(克隆)”即dump模式,一次写入一个或多个扇区
2、非常推荐第一次写白卡时就改写默认控制码,使用【08778F69】意思是A密码用于读取,B密码用于写入A可见B不可见。(操作这一步一定要牢记B密码)
使用这一控制码的好处:
(1)可以通过修改B密码防止别人或门禁防伪系统覆盖写入你的CUID卡。
(2)可以防止默认控制码dump写入后出现A密码不可读的情况
(3)后续可以通过MCT指定位置针对性地修改部分块信息,不需要整卡格式化
3、如果是全卡复制型写入白卡,在复写时要先格式化全卡。
本文记录了作者使用手机NFC模拟M1门禁卡以及写CUID白卡的一些研究过程,其中仍有不少瑕疵随着研究的深入,也发现M1卡和安卓系统有很多值得花时间探索的地方下┅步学习计划写一个针对间接修改NFC配置文件的APP来实现卡模拟。
博学之审问之,慎思之明辨之,笃行之
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。