本文转载介绍一个NFC卡制作的全部流程,并对制作过程中的读写原理进行探讨。在逆向分析中,我们会接触多种多样的工具,在使用工具的同时,希望大家思考一下原理,便于更深入的进行了解和学习。
目录:
0x1.工具及卡片介绍
0x2.卡片信息读取
0x3.卡片数据分析及修改
0x4.卡片信息写入
接下来步入正题,先从背景介绍开始。之前购得ACR122U之后闲置了一段时间,最近办理了一张餐饮消费会员卡,于是忍不住拿来分析一下。
0x1.工具及卡片介绍
先说一下会员卡,该卡片是M1卡。所谓的M1芯片,是指菲利浦下属子公司恩智浦出品的芯片缩写,全称为NXP Mifare1系列,常用的有S50及S70两种型号,截止到2013年11月4日,已经有国产芯片与其兼容,利用PVC封装M1芯片、感应天线,然后压制成型后而制作的卡即是智能卡行业所说的M1卡。
// 余额319.4
# 扇区10块1
01 00 01 00 00 05 FD 20 05 04 00 00 6D B7 00 51
# 扇区11块0及块1
17 10 30 00 00 00 00 00 00 00 00 00 00 00 00 57
00 00 00 26 00 00 7C C4 FF FF 83 3B 00 00 00 22
// 余额298.6
# 扇区10块1
01 00 01 00 00 05 FD 20 05 04 00 00 6D B7 00 51
# 扇区11块0及块1
17 10 30 00 00 00 00 00 00 00 00 00 00 00 00 57
00 00 00 27 00 00 74 A4 FF FF 8B 5B 00 00 00 23
根据数据结果,我们可以看出,在消费后,只有11扇区块1(块2相同)发生了变化。
// 余额298.6
# 扇区11块1
00 00 00 27 00 00 74 A4 FF FF 8B 5B 00 00 00 23
# 27和23为计数,每消费一次增加1
# 00 00 74 A4 为余额数据
# FF FF 8B 5B 为余额校验数据,为余额取反
我们继续看下扇区10块1
// 余额298.6
# 扇区10块1
01 00 01 00 00 05 FD 20 05 04 00 00 6D B7 00 51
#卡片上印刷的卡号为28087,对应十六进制为0x6DB7,恰好与扇区10块1对应
至此数据基本分析完毕,我们来尝试写入看结果如何。
0x4.卡片信息写入
我们把余额改为600,也就是60000分,十六进制为0xEA60,取反为0x159F,修改如下:
// 余额298.6修改为600
# 扇区11块1,修改前
00 00 00 27 00 00 74 A4 FF FF 8B 5B 00 00 00 23
# 扇区11块1,修改前
00 00 00 27 00 00 EA 60 FF FF 15 9F 00 00 00 23
修改后保存dump文件,使用MiFare Card Programming工具将其写入到卡中
需要注意的是,每个扇区需要有本身对应的密码才可以写入。