一次对路边饮用水RFID供应机的跑路玩法
"如何成为一个合格的硬件白帽子? 答案: 一个有聪明大脑的你 要有归纳类比和善于用GOOGLE的能力(百度?放弃吧) 善于翻阅和查询相关开发文档和强大的跑路能力。"
WARNING!!! 本文具有相当的攻击性以及复现性,仅供技术参考与教学用途研究,切勿用于非法用途,参考此文进行犯罪的相关人员与本人无关。
——免责声明。参考刑法修正案:构成非法提供控制计算机信息系统的程序、工具罪,两罪量刑都是三年以下有期徒刑或者拘役,并处或者单处罚金,情节严重的,处三年以上七年以下有期徒刑,并处罚金。非法获取计算机信息系统数据罪
这次我们要用到的工具:ProxMark3 镇楼宝图在此:
No.2开始搞事。
为了打发漫长而炎热的假期,回到了祖父家避暑,结果发现原本破败荒芜的家属大院内多了一台纯净水供应设备,而祖父也刚好办了一张卡,华山这几天温度热的要死,我竟然神奇的把黑色连到从北京坑到了华山美其名曰避暑然而,连续五天温度过了42度,无形装逼最为致命。现在家里面无聊到爆,于是总是再找点事情做,048 049玩烂了。于是拿出了随身携带的战术包中的Proxmark3 hackrf 等工具 玩烂了RTL8187 HACKRF出问题 于是在一个炎热的午后去打水,发现了那张水卡。踏破铁鞋无觅处得来全不费工夫,不要怂,就是干。征得物业同意之后开始测试这个水机的认证系统。
过程· 首先拿出手电筒对着M1卡片照射看其中线圈结构。结果发现是正方形线圈,按照经验是13.56MHZ的高频卡,于是话不多说直接上工具,是经proxmark3的检测,结果印证了是Mifare Classic 1k的卡
上手过程按照国际惯例先扫了扫默认密码区,结果发现密码区防护做的相当的好,每个M1卡都有一个唯一的序列号,我们称为“UID”,是32位的,也就是4个字节。
注:其中每个data 数据区为一个“块”。这样我们可以计算一下:16b* 4(块)*16(扇区)=1024B 就是1K。
第0扇区的块0(即绝对地址0块),它用于存放厂商代码,已经固化锁死,不可更改。原来在实验室见过一个厂商代码没有锁死的M1 被我玩了好久。。。。。
在全扇区加密时,通常用前三个“块”(0,1,2号块)存放数据,用最后一个”块“(3号块)存放密码。
其中密码分为A密码和B密码:前6个字节存放A密码,中间4字节为控制字段,后6字节存放B密码。
· M1卡是典型的高频卡,工作频率为13.56MHz,一般调频(FM)收音机接收的广播频率在87MHz到108MHz之间。而我们常说的路由器工作在2.4GHZ中。这个时候注意一个小科普,很多人分不清5G路由和5GLTE。导致很多人认为5G路由就是5G通讯技术的路由,这里进行一个更正
.一般路由是工作在2.4GHZ 频段下面的通讯信号,而所谓的5G路由是工作频率在5.8GHZ下的路由器。而5GLTE指的是第五代通讯技术,而逆向工程最好的方法就是了解他的基础结构,我们来看一下M1卡的工作通讯机制
言归正传,来看看M1卡的通讯通信速率:106KBPS,也就是说可以在10毫秒的时间内完成读写内容。
工作半径:100mm。大约在100mm以内的距离,可以使用读卡器对m1卡进行操作(一般写距离小于读距离)。
在使用proxmark3对M1卡进行破解时 ,我先用了默认密码扫描,结果发现卡的安全是很好的,没有默认密码
于是使用了有卡嗅探,网上很多人都在用proxmark3去暴力破解或者RPNG漏洞利用,对于proxmark3来说真的是大材小用。Proxmark3可以通过抓取卡与读卡器之间的通讯来解开相应的密码
准备1个充电宝 和1跟 双头usb供电线数据线淘宝一大把
和原来一样正常连接电脑。打开窗口(下图)
一切正常之后 你输入 hf 14a snoop这时主板会亮一个灯
再拨了主机上的USB口
到电梯那里去刷卡.(把 PM3天线 放 卡片 和 卡机 之间)
让天线 夹到卡与读卡器之间
不同角度的刷卡 多刷几次
刷到主板上的灯全灭了
拿 回来直接连接上电脑
打开软件
再输入 hf list 14a
查看监听数据
如果监听到完整数据后
通过软件直接算出来就可以了
这就是完整的数据
这是激卡 04 00
9320 是要卡返回卡号
93 70 是选择卡号
这三个就是 密码了 (当然是加密的) 通过软件可以算出密码
破解中间我们可以看下M1卡的通讯工作流程图以更加好的了解工作原理:
破解M1卡的破解算法已经烂大街了,我们可以利用M1卡已知的PRNG 漏洞来爆破出其他几个扇区的密码最后读出数据。保存数据后后我又过去进行了一次消费,用来进行数据对比(卡中金额有变动
· 的话数据也有变动。)对比数据:然后发现数据存储在14块、15块。16块有数据但是没有变动,初步猜测是用户识别信息。其他区块都是空的。也是够了。
上手逆向在上手逆向之前我们要认识一下CRC冗余校验和奇偶校验以及异或校验,累加校验等
举个例子:循环冗余码CRC(Cyclic Redundancy Code)又称多项式码.
任何一个由二进制数位串组成的代码,都可以惟一地与一个只含有0和1两个系数的多项式建立一一对应的关系.例如,代码1010111对应的多项式为X6+X4+X2+X+1,多项式X5+X3+X2+X+1对应的代码为10111.
CRC码在发送端编码和接收端检验时,都可以利用事先约定的生成多项式G(X)来得到.设G(X)中最高位X的次方为Xr,信息位为K(X);则CRC码=Xr乘以K(X)再除以G(X).
比如:信息位K(X)=X6+X4+X3+1既1011001,生成多项式G(X)=11001既X4+X3+1(可得Xr=X4)
则CRC码=X4* (X6+X4+X3+1)/(X4+X3+1)=X10+X8+X7+X4/(X4+X3+1)=10110010000/11001
得到的余数就是CRC码
注:以上除法用的是模2除法,是一种不考虑减法借位的运算.既0-0=0,0-1=1,1-0=1,1-1=0
每个块的前八组HEX和后八组HEX中,数据基本相同 ,而变动数据是红框部位,后面的因为相同忽略不计。然后经过详细的观察和运算发现:
当方框中划出的数据用FF做异或运算后,得出的数值刚好与箭头所指数据相同
A4异或FF 等于5B
答案很明显了 使用的是异或校验运算。我刷掉了1.5元而校验值是箭头指向的数据减去金额,而M1卡数据写入机制是倒序的。也就是说金额数据是14 A4/14 08 我们用校验位减去相应金额再转化为十六进制即我们想要的数据:
e31400001cebff ffe314000014eb14eb
爆破原理深源揭秘不法分子爆破M1卡的方式。
使用技术手段完成M1卡破解的方式有4种:
1.暴力破解
即便是暴力破解,也需要先得到确切的明文和对应的码流。这大约要进行1536次认证过程,用时在一秒钟之内。不过还要进行离线暴力破解,估计在36分钟可完成。但是需要专用的硬件设备。
2.以读卡器的挑战值做变量
这里说的读卡器实际上指的是用来模拟读卡器的攻击工具,下个攻击亦如此。这种攻击又可称选择密文攻击,想法用工具控制被攻击的卡每次在认证时产生同一挑战值,而读卡端则回应不同值。这种攻击需要大约28500次的认证过程,用时约15分钟,然后计算密钥,用时约一分钟。
3.卡的挑战值做变量
第三种攻击与攻击2类似,但需要使自己的工具的挑战值为常数,而令卡的挑战值数不断变化。需要预制一个384 GB的状态表。要进行4096次认证。大约用时2分钟。
4.嵌套认证攻击
第四种攻击假设攻击者已知了至少一个扇区的密钥,他可以根据漏洞得到其它密钥的32位,然后对其它16位进行穷举攻击。只需3次认证(时间可以忽略不计)。离线攻击计算时间约为一秒。
M1卡的存储器组织 M1卡存储详细解说。1024 x 8 bit EEPROM存储器分为16区,每区4块,每块16字节。
在擦处后的状态下,EEPROM的单元读为逻辑“0”,写后的状态下读为“1”。
块内字节编号 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
扇区 | 块 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | 说明 | ||
15 | 3 | KEY A | 控制位 | KEY B | 扇区15尾块 | |||||||||||||||
2 | 数据 | |||||||||||||||||||
1 | 数据 | |||||||||||||||||||
0 | 数据 | |||||||||||||||||||
14 | 3 | KEY A | 控制位 | KEY B | 扇区14尾块 | |||||||||||||||
2 | 数据 | |||||||||||||||||||
1 | 数据 | |||||||||||||||||||
0 | 数据 | |||||||||||||||||||
::: | ::: | |||||||||||||||||||
1 | 3 | KEY A | 控制位 | KEY B | 扇区1尾块 | |||||||||||||||
2 | 数据 | |||||||||||||||||||
1 | 数据 | |||||||||||||||||||
0 | 数据 | |||||||||||||||||||
0 | 3 | KEY A | 控制位 | KEY B | 扇区0尾块 | |||||||||||||||
2 | 数据 | |||||||||||||||||||
1 | 数据 | |||||||||||||||||||
0 | 制造商占用块 |
3.6.1 厂商代码块
这是第1区的第1块(块0)。它含有集成电路制造商数据。出于安全和系统需求,此块是制造商在生产过程中编程后写保护的。
3.6.2 数据块
各区均有3个16字节的块用于存储数据(区0只有两个数据块以及一个只读的厂商代码块)。
数据块可以通过读写控制位设置为:
· 读写块,例如用于非接触门禁管理
· 数值块,例如用于电子钱包,另有可直接控制存储值的命令,如增值、减值。
在任何存储器操作之前必须执行认证命令。
3.6.2.1数值块
数值块具有电子钱包功能(有效命令:read, write, increment,decrement, restore, transfer)。
数值块有固定的数据格式,以便于错误检测、纠错和备份管理。
数值块只能通过以数值块格式的写操作生成:
· 数值:有符号4字节数值。数值的最低字节存储在最低地址字节。负值以标准的2的补码形式存储。出于数据完整性和安全原因,数值存储三次,两次不取反,一次取反。
· 地址(Adr):1字节地址,当进行备份管理时,可用于保存块的地址。地址保存四次。两次取反,两次不取反。在increment、decrement、restore和transfer 操作中,地址保持不变。它只能通过write命令更改。
字节号 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
说明 | 数值 | 数值 | 数值 | Adr | Adr | Adr | Adr |
3.6.3 尾块(块3)
各区均有一个尾块,存有:
· 密钥A和B(可选),读时返回逻辑“0”。
· 该区四个块的读写条件,存储在字节6至9 。读写控制位也指定了数据块的类型(读写块或数值块)。
如果不需要密钥B,块3的最后6字节可以用作数据字节。
尾块的字节9可用于用户数据。因为此字节享有与字节6、7、8相同的读写权限。
字节号 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
说明 | 密钥A | 读写条件 | 密钥B(可选) |
3.7 存储器读写
必须如前所述,先选定卡并通过认证,才能执行存储器操作。
存储器操作 | ||
---|---|---|
操作 | 说明 | 使用块型 |
读 | 读存储器块 | 读写、数值和尾块 |
写 | 写存储器块 | 读写、数值和尾块 |
增值 | 增加块的内容,并将结果存入内部寄存器 | 数值 |
减值 | 减少块的内容,并将结果存入内部寄存器 | 数值 |
转存 | 将内部寄存器内容写入块中 | 数值 |
恢复 | 将块中内容写入内部寄存器 | 数值 |
对指定块可以执行的存储器操作取决于所用的密钥和存储在相应尾块中的读写条件。
3.7.1 读写条件
每个数据块和尾块的读写条件均由3个bit定义,并以非取反和取反形式保存在各个区的尾块中。
读写控制位管理着使用密钥A和B读写存储器的权限。如果知道相关的密钥,并且当前读写条件允许,读写条件是可以更改的。
读写控制位 | 有效命令 | 块 | 说明 | |
---|---|---|---|---|
C13 C23 C33 | read, write | ® | 3 | 尾块 |
C12 C22 C32 | read, write, increment, decrement, transfer, restore | ® | 2 | 数据块 |
C11 C21 C31 | read, write, increment, decrement, transfer, restore | ® | 1 | 数据块 |
C10 C20 C30 | read, write, increment, decrement, transfer, restore | ® | 0 | 数据块 |
注意:在每一次存储器读写时,内部逻辑会验证存储条件的格式。如果发现个是错误,这个区将被永久性锁死。
注意:在下列说明中,读写控制位是仅以非取反形式表述的。
MF1的内部逻辑保证了命令只有在通过认证后才被执行。
3.7.2 尾块的读写条件
对密钥和控制位的读写取决于尾块(块3)的访问控制位,分为“禁止”、“KEY A”、“KEY B”和“KEY A|B”( KEY A或KEY B)。
访问控制位 | 所控制的访问对象 | 注释 | |||||||
---|---|---|---|---|---|---|---|---|---|
KEY A | 访问控制位 | KEY B | |||||||
C1 | C2 | C3 | 读 | 写 | 读 | 写 | 读 | 写 | |
0 | 0 | 0 | 禁止 | Key A | Key A | Key B | Key A | Key A | Key B可读 |
0 | 1 | 0 | 禁止 | 禁止 | Key A | 禁止 | Key A | 禁止 | Key B可读 |
1 | 0 | 0 | 禁止 | Key B | Key A|B | 禁止 | 禁止 | Key B | |
1 | 1 | 0 | 禁止 | 禁止 | Key A|B | 禁止 | 禁止 | 禁止 | |
0 | 0 | 1 | 禁止 | Key A | Key A | Key A | Key A | Key A | Key B可读传输配置状态 |
0 | 1 | 1 | 禁止 | Key B | Key A|B | Key B | 禁止 | Key B | |
1 | 0 | 1 | 禁止 | 禁止 | Key A|B | Key B | 禁止 | 禁止 | |
1 | 1 | 1 | 禁止 | 禁止 | Key A|B | 禁止 | 禁止 | 禁止 |
注:灰色行为key B可读并可用于存储数据的访问控制条件。
尾块和key A被预定义为传输配置状态。因为在传输配置状态下key B可读,新卡必须用key A认证。
因为访问控制位本身也可以禁止访问,所以个人化时应当特别小心。
3.7.3 数据块的访问控制条件
对数据块(块0至2)的读写访问取决于其访问控制位,分为“禁止”、“KEY A”、“KEY B”和“kEY A|B”( KEY A或KEY B)。相关访问控制位的设置确定了其用途以及相应的可用命令。
· 读写块:允许读、写操作。
· 数值块:运行另外的数值操作——加值、减值、转存和恢复。在用于非充值卡的一种情况(‘001’)下,只能够读和减值。在另一种情况(‘110‘)下,可以用key B充值。
· 制造厂商块:只读,不受访位控制位设置的影响!
· 密钥管理:在传输配置状态下,必须用key A 认证。
访问控制位 | 所控制的访问操作 | 用途 | |||||
---|---|---|---|---|---|---|---|
C1 | C2 | C3 | 读 | 写 | 加值 | 减值转存恢复 | |
0 | 0 | 0 | key A|B1 | key A|B1 | key A|B1 | key A|B1 | 传输配置状态 |
0 | 1 | 0 | key A|B1 | key B1 | 禁止 | 禁止 | 读写块 |
1 | 0 | 0 | key A|B1 | key B1 | 禁止 | 禁止 | 读写块 |
1 | 1 | 0 | key A|B1 | key B1 | key B1 | key A|B1 | 数值块 |
0 | 0 | 1 | key A|B1 | 禁止 | 禁止 | key A|B1 | 数值块 |
0 | 1 | 1 | key B1 | key B1 | 禁止 | 禁止 | 读写块 |
1 | 0 | 1 | key B1 | 禁止 | 禁止 | 禁止 | 读写块 |
1 | 1 | 1 | 禁止 | 禁止 | 禁止 | 禁止 | 读写块 |
1 如果相应扇区尾块Key B可读,则不得用作认证(前表中所有灰色行)。
后果:如果读写器试图用灰色行的访问控制条件以Key B认证任何扇区的任何块,卡将在认证后拒绝所有后续存储器访问。
Ps:突发奇想可以用M1卡当数据存储解密玩。
一次对路边饮用水RFID供应机的跑路玩法的更多相关文章
- 启动第一个 KVM 虚机 - 每天5分钟玩转 OpenStack(4)
本节演示如何使用 virt-manager 启动 KVM 虚机. 首先通过命令 virt-manager 启动图形界面 # virt-manager 点上面的图标创建虚机 给虚机命名为 kvm1,这里 ...
- 远程管理 KVM 虚机 - 每天5分钟玩转 OpenStack(5)
上一节我们通过 virt-manager 在本地主机上创建并管理 KVM 虚机.其实 virt-manager 也可以管理其他宿主机上的虚机.只需要简单的将宿主机添加进来 填入宿主机的相关信息,确定即 ...
- 浅谈NFC、RFID、红外、蓝牙的区别
很多朋友对NFC和RFID这两个词感到陌生,但是手机经常会出现支持NFC支付,又没太在意,NFC与RFID其实是手机支付的种方式(手机支付也被称作移动支付,是一种允许移动用户使用其移动终端对所消费的商 ...
- Atitit. 常用街机系统and 模拟器总结 snk neo geo cps mame sfc smc
Atitit. 常用街机系统and 模拟器总结 snk neo geo cps mame sfc smc 1. #-------常用 游戏类型 1 2. 街机的历史 2 3. #=========== ...
- Android源码浅析(三)——Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机
Android源码浅析(三)--Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机 最近比较忙,而且又要维护自己的博客,视频和公众号,也就没 ...
- flash 视频 死机(转贴)
http://zhidao.baidu.com/question/120464366 打开有关flash的网站就定屏死机 打开flash的网站经常定屏死机,打开酷狗,看土豆网遇到旁边那些广告也一样死机 ...
- 低成本安全硬件(二):RFID on PN532
引言 鉴于硬件安全对于大多数新人是较少接触的,而这方面又非常吸引我,但是部分专业安全研究设备较高的价格使人望而却步.在该系列中,笔者希望对此感兴趣的读者在花费较少金钱的情况下体会到硬件安全的魅力所在. ...
- 启动第一个 KVM 虚机
本节演示如何使用 virt-manager 启动 KVM 虚机. 首先通过命令 virt-manager 启动图形界面 1 # virt-manager 点上面的图标创建虚机 给虚机命名为 kvm1, ...
- mtk刷机错误汇总
MTK常见错误解读与解决方法: 1.刷机过了红条,到了紫色条卡住.(错误代码4008) 解决方法:这种情况出现的话,大家可以把电池拿下来,然后重新安装上,进入REC后选择关机.然后重新刷. 2.驱动安 ...
随机推荐
- TabControl中显示和隐藏TabPage页
在使用TabControl控件时,希望隐藏其中某个选项卡(即TabPage).TabPage类明明提供了一个Hide方法,用在代码中却没有任何效果,甚是奇怪.无奈之余,只好考虑另辟途径 方法一: 设置 ...
- go基础知识之变量,类型,常量,函数
3 变量 变量是什么 变量指定了某存储单元(Memory Location)的名称,该存储单元会存储特定类型的值.在 Go 中,有多种语法用于声明变量. 声明单个变量 var name type 是声 ...
- 【转】Centos yum 换源
[1] 首先备份/etc/yum.repos.d/CentOS-Base.repo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/Cent ...
- 2018.12.17 ural1132 Square Root(二次剩余)
传送门 MD写一道二次剩余的板题差点写自闭了. 我用的是cipollacipollacipolla算法. 利用的是欧拉准则来找寻一个二次非剩余类来求根. 注意这题有两个等根和模数为2的情况. 代码: ...
- poj-1195(二维树状数组)
题目链接:传送门 题意:给出操作,按照操作进行. 思路:将树状数组设置为二维的就行了. 注意: (1)每次求出的面积是S(x2,y2)-S(x1-1,y2)-S(x2,y1-1)+S(x1-1,y1- ...
- UOJ 117 欧拉回路(套圈法+欧拉回路路径输出+骚操作)
题目链接:http://uoj.ac/problem/117 题目大意: 解题思路:先判断度数: 若G为有向图,欧拉回路的点的出度等于入度. 若G为无向图,欧拉回路的点的度数位偶数. 然后判断连通性, ...
- Java的背景、影响及前景
一.背景 詹姆斯·高斯林出生于加拿大,是一位计算机编程天才.在卡内基·梅隆大学攻读计算机博士学位时,他编写了多处理器版本的Unix操作系统,是JAVA编程语言的创始人. 高斯林生于1955年,已婚,育 ...
- iframe父子元素获取
jquery.js调用iframe父窗口与子窗口元素的方法 1. jquery在iframe子页面获取父页面元素代码如下: $("#objid",parent.document) ...
- 利用JDK自带的keytool生成SSL证书然后导入到SpringBoot
一:生成命令如下(这一步生成的暂不知道干嘛用的) E:\Desktop\Documents\证书>keytool -genkey -alias tomcat -keypass - -validi ...
- 微信小程序之画布
canvas 标签默认宽度300px.高度225px 同一页面中的 canvas-id 不可重复,如果使用一个已经出现过的 canvas-id,该 canvas 标签对应的画布将被隐藏并不再正常工作 ...