吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 51632|回复: 113
收起左侧

[转贴] 【转】从NFC卡破解分析看ACR122U读写原理

    [复制链接]
涛之雨 发表于 2018-8-8 23:20
本帖最后由 涛之雨 于 2018-9-23 00:05 编辑

上一篇:传送门




《《《《《《《《《《《《《《《《《《《《《《《《《《《原文开始》》》》》》》》》》》》》》》》》》》》》》》》》》》


1.jpg
(此图片来自微信公众号)


本文介绍一个NFC卡简单破解的全部流程,并对破解过程中的读写原理进行探讨。在逆向分析中,我们会接触多种多样的工具,在使用工具的同时,希望大家思考一下原理,便于更深入的进行了解和学习。

注:本文内容仅做技术研究,请勿用于非法用途,否则后果自负



目录:



          0x1.工具及卡片介绍

        0x2.卡片信息读取

        0x3.卡片数据分析及修改

        0x4.卡片信息写入

接下来步入正题,先从背景介绍开始。之前购得ACR122U之后闲置了一段时间,最近办理了一张餐饮消费会员卡,于是忍不住拿来分析一下。

0x1.工具及卡片介绍

先说一下会员卡,该卡片是M1卡。所谓的M1芯片,是指菲利浦下属子公司恩智浦出品的芯片缩写,全称为NXP Mifare1系列,常用的有S50及S70两种型号,截止到2013年11月4日,已经有国产芯片与其兼容,利用PVC封装M1芯片、感应天线,然后压制成型后而制作的卡即是智能卡行业所说的M1卡。

2.png

工具是读写器硬件设备ACR122U以及配套的用于读写的PC软件。    ACR122U NFC读写器是一款基于13.56 MHz非接触(RFID)技术开发出来的连机非接触式智能卡读写器。它符合ISO/IEC18092近场通信(NFC)标准,支持Mifare®卡、ISO 14443 A类和B类卡、以及全部四种NFC标签。

3.jpg

为了确定该读写器的主芯片,将其拆解,确认读写的主芯片为NXP(恩智浦)的PN532:

4.png

0x2.卡片信息读取

    0x2.1  卡片信息读取

该设备的提供的读取程序为M1卡服务程序:

5.png

电脑安装驱动以后,连接读卡器,卡片靠近读卡器,选择读卡器后,点击开始破解,即可等待破解完成。完成后我们就可以拿到M1卡的二进制文件信息,文件扩展名为dump,大小为1KB。下图为读取到的dump文件及分析结果标注:

6.png

我们先了解一下M1卡的存储结构,M1卡分为16个扇区,每个扇区由4块(块0、块1、块2、块3)组成,存储结构如图所示:

7.png

其中第0扇区用于存储卡片的UID信息以及厂商写入的信息,一般不需要我们分析修改;
每个扇区的块0、块1、块2为数据块,可以用于存储数据;
块3位控制块,由密码A、存取控制(控制字)、密码B组成,且每个扇区的密码和存取控制都是独立的,即 每个扇区都有自己的密码。

[Bash shell] 纯文本查看 复制代码
FF FF FF FF FF FF FF 07 80 69 FF FF FF FF FF FF
//     密码A      |   存取控制    |    密码B


接下来我们看一下我们读取到的数据,将dump文件使用十六进制编辑器打开


7 (1).png

第0扇区我们暂不理会,显然,数据基本存储在第10扇区与第11扇区,且两个扇区的控制块是相同的,后续我们着重分析这两个扇区。

    0x2.2  PN532读写过程

对于PN532而言,读取过程又是怎样的呢?我们先来了解一下PN532。
         PN532由NXP出品,是一款高度集成的载波的13.56MHz传输模块,基于80C51内核有40KROM、1KRAM。 使用不同的固件支持13.56MHz频段的无线协议。
这里我们介绍一下ACR122U对M1卡的读写卡流程:

[PHP] 纯文本查看 复制代码
// 【初学者仅作了解】
 
//  1.唤醒PN532
 PC->PN532: 55 55 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF 03 FD D4 14 01 17 00
 PN532->PC: 00 00 FF 00 FF 00 00 00 FF 02 FE D5 15 16 00
//  唤醒的数据包头为固定格式
 
//  2.获取卡UID
PC->PN532: 00 00 FF 04 FC D4 4A 02 00 E0 00
 
//   析:
//   04 -> 代表有四个数据分别是 D4 4A 02 00
//   FC -> 这是04的补码 
//   4A -> 命令
//   02 -> 卡数量,0--2
//   00 -> 波特率 106K
//   E0 -> 校验位  D4+4A+02+00=0x0120  取后两位20的补码为E0
 
 PN532->PC:  00 00 FF 00 FF 00 
                       00 00 FF 0C F4 D5 4B 01 01 00 04 08 04 86 7D C9 56 06 00 
 
//    析:
//    00 00 FF 00 FF 00  -> ACK
//    00 00 FF 0C F4 
//    D5                -> PN532 到 MCU
//    4B                -> 响应命令
//    01                 -> 目标卡1
//    01                 -> 目标卡数量,最大为0x02,最小为0
//    00 04            -> ATQ
//    08                 -> 卡容量 08=1K
//    04                 -> 4个字节UID
//    86 7D C9 56 -> UID
//    06 00            -> DCS+POST
 
//  3.秘钥验证
 
PC->PN532:  00 00 FF 0F F1 D4 40 01 60 07 FF FF FF FF FF FF 86 7D C9 56 C2 00
 
//     析:
//     40   -> 命令
//     01   -> 卡1
//     60   -> 密钥验证命令
//     07   -> 块号
//     FF FF FF FF FF FF -> 密钥
//     86 7D C9 56   -> UID 
//     C2   -> 检验位
 
 PN532->PC: 00 00 FF 00 FF 00 
                      00 00 FF 03 FD D5 41 00 EA 00 
//    析: 41 00   -> 正确状态
 
//  4.开始读卡
 
PC->PN532: 00 00 FF 05 FB D4 40 01 30 06 B5 00 //读第6块
PC->PN532: 00 00 FF 05 FB D4 40 01 30 07 B4 00 //读第7块
PC->PN532: 00 00 FF 05 FB D4 40 01 30 08 B3 00 //读第8块 
//     析:   
//     40   -> 命令
//     01   -> 卡1
//     30   -> 读卡命令
//     06   -> 块号
       
PN532->PC: 00 00 FF 00 FF 00      //ACK
                     00 00 FF 13 ED D5 41 00 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 01 00  //7块
 
PN532->PC: 00 00 FF 00 FF 00 //ACK
                     00 00 FF 13 ED D5 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 EA 00     //6块
 
//        析:
//        41 00   -> 正确
//        41 03   -> 错误
 
//  5.写卡操作
PC->PN532: 00 00 ff 15 EB D4 40 01 A0 06 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F CD 00
 
//     析:
//     40   -> 命令
//     01   -> 卡1
//     A0   -> 写卡命令
//     06   -> 块号
//     00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F    -> 16字节数据
//     CD  -> 校验和
 
PN532->PC: 00 00 00 FF 00 FF 00 
                     00 00 FF 03 FD D5 41 00 EA 00
//        析:
//        41 00   -> 正确


PN532读写过程均已经介绍,卡片信息写入时仅介绍操作,不再赘述原理。

0x3.卡片数据分析及修改

分析过程我们需要取多组数据,进行分析来确认不同数据所代表的的意义,此处我们仅分析第10及第11两个扇区。

8.png

根据上图内容,我们可以看到,10扇区的块0没有数据,10扇区块2和11扇区块0相同,11扇区的块1和块2相同,所以我们仅仅分析10扇区块1,11扇区块0和块1。接下来我们对比不同余额时对应的数据:
[PHP] 纯文本查看 复制代码
//  余额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相同)发生了变化。
其中余额319.4及298.6,以分为单位是31940和29860,转化为十六进制为 0x7CC4和0x74A4,恰好可以与11扇区中块1中的数据对应。

[PHP] 纯文本查看 复制代码
//  余额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


[PHP] 纯文本查看 复制代码
//  余额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,修改如下:

[PHP] 纯文本查看 复制代码
//  余额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工具将其写入到卡中



需要注意的是,每个扇区需要有本身对应的密码才可以写入。

9.png

【补充】

写入更改后的余额后,测试可正常消费,为避免因卡号记录追溯到用户信息,可以更改卡号信息,即扇区10块1中的6DB7可以更改,更改后需要同时更改块1的末尾数据,因为末尾的数据51为校验位,是块1的前15位数据取和后获得的值,请大家根据情况自行理解分析,此处不作赘述。



PS: 相关问题已反馈商家,请大家在学习技术的同时,不要让利益污染了技术。



《《《《《《《《《《《《《《《《《《《《《《《《《《《原文结束》》》》》》》》》》》》》》》》》》》》》》》》》》》




ps:原地址:https://bbs.pediy.com/thread-230282.htm及https://mp.weixin.qq.com/s/S00S3QfomoYwSeAwxSoLUA

下一篇:传送门

虽然是转帖,但是还是恳求各位看过学过走过路过的同学同窗朋友好友点下下面的


【免费评分】


先谢过。。。。

我会继续努力滴。。。。

点评

转帖请把图片存在本地再上传  发表于 2018-8-9 00:40

免费评分

参与人数 33吾爱币 +29 热心值 +31 收起 理由
吾爱追心8 + 1 + 1 等我有时间了 试试南宁市民卡
爱念旭5211314 + 1 + 1 热心回复!
syjsu + 1 + 1 谢谢@Thanks!
fch + 1 不敢用啊
doywb + 1 热心回复!
kizzlepc + 1 + 1 谢谢@Thanks!
新手小渣渣 + 1 + 1 楼主辛苦了
oxygen + 1 + 1 热心回复!
F0rM + 1 + 1 很强,最好能专题系列化
她的天 + 1 + 1 用心讨论,共获提升!
TONGXI + 1 + 1 我很赞同!
胯下有股杀气 + 1 + 1 热心回复!
six90ds + 1 + 1 我很赞同!
chinaboy008 + 1 + 1 我很赞同!
chromeking + 1 + 1 谢谢@Thanks!
我有24对染色体 + 1 值得学习
壹贰叁_ + 1 用心讨论,共获提升!
MasterMirror + 1 + 1 谢谢@Thanks!
52ZJU + 1 + 1 我很赞同!
xiaofengjj + 1 我很赞同!
52Dave + 1 + 1 我很赞同!
ooxxoox + 1 + 1 看的我一愣一愣的!
xfdftyuyhijklkp + 1 + 1 我很赞同!
sunnylds7 + 1 + 1 热心回复!
文少vi + 1 + 1 热心回复!
茶城兄弟 + 1 + 1 我很赞同!
0230826 + 1 + 1 谢谢@Thanks!
Roxe + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
ljx2005sm + 1 谢谢@Thanks!
wangkai558 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
daishuacf + 1 + 1 我很赞同!
sun18704483 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
fnp902003 + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

imsnail 发表于 2018-11-10 12:36
现在的会员卡都是只存储用户名,余额都在他们PC里面
wsyss 发表于 2018-8-8 23:42
CPPKONONE 发表于 2018-8-8 23:59
本帖最后由 CPPKONONE 于 2018-8-9 00:09 编辑

技术流,感谢
图片看不了
chaizy1 发表于 2018-8-9 00:07

技术流,感谢
紫苏丶 发表于 2018-8-9 00:10
图片都挂了
acq1255 发表于 2018-8-9 00:51 来自手机
首先,谢谢楼主分享,可详细,再一个就是arc122不能写数据吧应该要用到比这个更高级的才能写,我写过写不了,只能复制,
ztm 发表于 2018-8-9 01:18
图片炸了,楼主。。。
灰丶机 发表于 2018-8-9 03:38
图片就别偷懒啊,下载下来在上传啊,防盗链的图片你转过来就GG了
 楼主| 涛之雨 发表于 2018-8-9 07:18
好吧。。。。本来想省事的。。。图片今天下午补上吧。。。现在没有电脑呢……
谢谢各位提醒@灰丶机 @Niay @ztm
 楼主| 涛之雨 发表于 2018-8-9 07:24
话说昨天晚上看的没事啊。。。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-3-28 21:57

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表