本文转载介绍一个NFC卡制作的全部流程,并对制作过程中的读写原理进行探讨。在逆向分析中,我们会接触多种多样的工具,在使用工具的同时,希望大家思考一下原理,便于更深入的进行了解和学习。
0x1.工具及卡片介绍
先说一下会员卡,该卡片是M1卡。所谓的M1芯片,是指菲利浦下属子公司恩智浦出品的芯片缩写,全称为NXP Mifare1系列,常用的有S50及S70两种型号,截止到2013年11月4日,已经有国产芯片与其兼容,利用PVC封装M1芯片、感应天线,然后压制成型后而制作的卡即是智能卡行业所说的M1卡。
工具是读写器硬件设备ACR122U以及配套的用于读写的PC软件。 ACR122U NFC读写器是一款基于13.56 MHz非接触(RFID)技术开发出来的连机非接触式智能卡读写器。它符合ISO/IEC18092近场通信(NFC)标准,支持Mifare®卡、ISO 14443 A类和B类卡、以及全部四种NFC标签。
为了确定该读写器的主芯片,将其拆解,确认读写的主芯片为NXP(恩智浦)的PN532:
0x2.卡片信息读取
0x2.1 卡片信息读取
该设备的提供的读取程序为M1卡服务程序:
电脑安装驱动以后,连接读卡器,卡片靠近读卡器,选择读卡器后,点击开始破解,即可等待破解完成。完成后我们就可以拿到M1卡的二进制文件信息,文件扩展名为dump,大小为1KB。下图为读取到的dump文件及分析结果标注:
我们先了解一下M1卡的存储结构,M1卡分为16个扇区,每个扇区由4块(块0、块1、块2、块3)组成,存储结构如图所示:
其中第0扇区用于存储卡片的UID信息以及厂商写入的信息,一般不需要我们分析修改;
每个扇区的块0、块1、块2为数据块,可以用于存储数据;
块3位控制块,由密码A、存取控制(控制字)、密码B组成,且每个扇区的密码和存取控制都是独立的,即 每个扇区都有自己的密码。
接下来我们看一下我们读取到的数据,将dump文件使用十六进制编辑器打开
第0扇区我们暂不理会,显然,数据基本存储在第10扇区与第11扇区,且两个扇区的控制块是相同的,后续我们着重分析这两个扇区。
0x2.2 PN532读写过程
对于PN532而言,读取过程又是怎样的呢?我们先来了解一下PN532。
PN532由NXP出品,是一款高度集成的载波的13.56MHz传输模块,基于80C51内核有40KROM、1KRAM。 使用不同的固件支持13.56MHz频段的无线协议。
这里我们介绍一下ACR122U对M1卡的读写卡流程:
PN532读写过程均已经介绍,卡片信息写入时仅介绍操作,不再赘述原理。
0x3.卡片数据分析及修改
分析过程我们需要取多组数据,进行分析来确认不同数据所代表的的意义,此处我们仅分析第10及第11两个扇区。
根据上图内容,我们可以看到,10扇区的块0没有数据,10扇区块2和11扇区块0相同,11扇区的块1和块2相同,所以我们仅仅分析10扇区块1,11扇区块0和块1。接下来我们对比不同余额时对应的数据:
根据数据结果,我们可以看出,在消费后,只有11扇区块1(块2相同)发生了变化。
其中余额319.4及298.6,以分为单位是31940和29860,转化为十六进制为 0x7CC4和0x74A4,恰好可以与11扇区中块1中的数据对应。我们继续看下扇区10块1
至此数据基本分析完毕,我们来尝试写入看结果如何。0x4.卡片信息写入
我们把余额改为600,也就是60000分,十六进制为0xEA60,取反为0x159F,修改如下: 修改后保存dump文件,使用MiFare Card Programming工具将其写入到卡中
需要注意的是,每个扇区需要有本身对应的密码才可以写入。
【补充】
写入更改后的余额后,测试可正常消费,为避免因卡号记录追溯到用户信息,可以更改卡号信息,即扇区10块1中的6DB7可以更改,更改后需要同时更改块1的末尾数据,因为末尾的数据51为校验位,是块1的前15位数据取和后获得的值,请大家根据情况自行理解分析,此处不作赘述。
感觉NFC的技术硬件原理讲述的还是挺详细,方便理解各种卡。目前类似的卡的金额等只存储用户名,余额都在他们PC里面。