M1卡破解密码控制位及控制规则

发布时间:2014-11-23 14:57:00   来源:文档文库   
字号:

一、主要指标

l 容量为8KEEPROM

l 分为16个扇区,每个扇区为4块,每块16个字节,以块为存取单位

l 每个扇区有独立的一组密码及访问控制

l 每张卡有唯一序列号,为32

l 具有防冲突机制,支持多卡操作

l 无电源,自带天线,内含加密控制逻辑和通讯逻辑电路

l 数据保存期为10年,可改写10万次,读无限次

l 工作温度:-20~50

l 工作频率:13.56MHZ

l 通信速率:106KBPS

l 读写距离:10mm以内(与读写器有关)

二、存储结构

1M1卡分为16个扇区,每个扇区由4块(块0、块1、块2、块3)组成,(我们也将16个扇区的64个块按绝对地址编号为0~63,存贮结构如下图所示:

0

数据块

0

扇区0

1

数据块

1

2

数据块

2

3

密码A 存取控制 密码B

控制块

3

0

数据块

4

扇区1

1

数据块

5

2

数据块

6

3

密码A 存取控制 密码B

控制块

7

    ∶

    ∶

0

数据块

60

扇区15

1

数据块

61

2

数据块

62

3

密码A 存取控制 密码B

控制块

63

2、第0扇区的块0(即绝对地址0块),它用于存放厂商代码,已经固化,不可更改。

3、每个扇区的块0、块1、块2数据块,可用于存贮数据。

数据块可作两种应用:

用作一般的数据保存,可以进行操作。

用作数据值,可以进行初始化值、加值、减值、读值操作。

4、每个扇区的块3控制块,包括了密码A、存取控制、密码B。具体结构如下:

A0 A1 A2 A3 A4 A5 FF 07 80 69 B0 B1 B2 B3 B4 B5

密码A6字节) 存取控制(4字节) 密码B6字节)

5、每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取控制。存取控制为4个字节,共32位,扇区中的每个块(包括数据块和控制块)的存取条件是由密码和存取控制共同决定的,在存取控制中每个块都有相应的三个控制位,定义如下:

0 C10 C20 C30

1 C11 C21 C31

2 C12 C22 C32

3 C13 C23 C33

三个控制位以正和反两种形式存在于存取控制字节中,决定了该块的访问权限(如

进行减值操作必须验证KEY A,进行加值操作必须验证KEY B,等等)。三个控制

位在存取控制字节中的位置,以块0为例:

对块0的控制:

bit 7 6 5 4 3 2 1 0

字节6

C20_b

C10_b

字节7

C10

C30_b

字节8

C30

C20

字节9

( 注: C10_b表示C10取反 )

存取控制(4字节,其中字节9为备用字节)结构如下所示:

bit 7 6 5 4 3 2 1 0

字节6

C23_b

C22_b

C21_b

C20_b

C13_b

C12_b

C11_b

C10_b

字节7

C13

C12

C11

C10

C33_b

C32_b

C31_b

C30_b

字节8

C33

C32

C31

C30

C23

C22

C21

C20

字节9

( 注: _b表示取反 )

6数据块(块0、块1、块2)的存取控制如下:

控制位(X=0.1.2

访 (对数据块 012

C1X

C2X

C3X

Read

Write

Increment

Decrement, transfer,

Restore

0

0

0

KeyA|B

KeyA|B

KeyA|B

KeyA|B

0

1

0

KeyA|B

Never

Never

Never

1

0

0

KeyA|B

KeyB

Never

Never

1

1

0

KeyA|B

KeyB

KeyB

KeyA|B

0

0

1

KeyA|B

Never

Never

KeyA|B

0

1

1

KeyB

KeyB

Never

Never

1

0

1

KeyB

Never

Never

Never

1

1

1

Never

Never

Never

Never

KeyA|B 表示密码A或密码BNever表示任何条件下不能实现)

例如:当块0的存取控制位C10 C20 C30= 0 0 1时,验证密码A或密码B正确后可读

验证密码B正确后可写;不能进行加值、减值操作。

7控制块3的存取控制与数据块(块012)不同,它的存取控制如下:

密码A

存取控制

密码B

C13

C23

C33

Read

Write

Read

Write

Read

Write

0

0

0

Never

KeyA|B

KeyA|B

Never

KeyA|B

KeyA|B

0

1

0

Never

Never

KeyA|B

Never

KeyA|B

Never

1

0

0

Never

KeyB

KeyA|B

Never

Never

KeyB

1

1

0

Never

Never

KeyA|B

Never

Never

Never

0

0

1

Never

KeyA|B

KeyA|B

KeyA|B

KeyA|B

KeyA|B

0

1

1

Never

KeyB

KeyA|B

KeyB

Never

KeyB

1

0

1

Never

Never

KeyA|B

KeyB

Never

Never

1

1

1

Never

Never

KeyA|B

Never

Never

Never

例如:当块3的存取控制位C13 C23 C33= 0 0 1时,表示:

密码A:不可读,验证KEYAKEYB正确后,可写(更改)。

存取控制:验证KEYAKEYB正确后,可读、可写。

密码B:验证KEYAKEYB正确后,可读、可写。

新卡片中的控制字(FF 07 80 69)密码A可用,密码B不可用;

推荐的控制字

方案一:7F 07 88 69

此控制字说明:

数据块:用密码AB都可以读写;

控制块

密码A:由密码B来写,不可读;

密码B:由密码B来写,不可读;

控制字:用密码AB都可读,由密码B写;

方案二:08 77 8F 69

此控制字说明:

数据块

用密码A读,由密码B读写;

控制块

密码A:由密码B来写,不可读;

密码B:由密码B来写,不可读;

控制字:用密码AB都可读,由密码B写;

三、卡片

卡片的电气部分只由一个天线和ASIC组成。

天线:卡片的天线是只有几组绕线的线圈,很适于封装到IS0卡片中。

ASIC:卡片的ASIC由一个高速(106KB波特率)的RF接口,一个控制单元和一个

8KEEPROM组成。

四、对数据块的操作

(Read):读一个块;

(Write):写一个块;

Increment):对数值块进行加值;

Decrement):对数值块进行减值;

存储Restore):将块中的内容存到数据寄存器中;

传输Transfer):将数据寄存器中的内容写入块中;

中止Halt):将卡置于暂停工作状态;

对于电脑周边编程,主要有两种思路(应该没有第三种了)。【详细说明见我博文永和豆浆管理系统基础工作总结

一、利用windows系统本身dll库。

二、利用硬件产家提供的dll

本篇对M1卡的编程是利用上述第二种方法。

M1卡最为重要的优点是可读可写并且安全性高的多功能卡。这些优点与其自身的结构密不可分。

M1结构:

M1卡分为16个扇区,每个扇区4(块03),共64块,按块号编址为063。第0扇区的块0(即绝对地址0块)用于存放厂商代码,已经固化,不可更改。其他各扇区的块0、块1、块2数据块,用于存贮数据;块3控制块,存放密码A、存取控制、密码B。每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取控制。

M1卡运作机理:

连接读写器寻卡识别卡(获取卡序列号)从多卡中选一张卡向卡中缓冲区装载密码验证密码进行读写关闭连接

即(代码说明)

Open_USBrf_requestrf_anticollrf_selectrf_load_keyrf_authentication(/a_hex)rf_read/rf_write(hex_a)Close_USB

如果概括来说的话,主要也就四部分 开关连接、寻卡、验证密码、读取

(至于详细程序代码,相信大家自己看过dll说明文档后,自己会明白的,这里就不写了,因为内容多)

M1卡功能模式:

1.寻卡模式:

寻卡模式分三种情况:IDLE模式、ALL模式及指定卡模式(012 均是int类型,是方法参数,下同)。

0——表示IDLE模式,一次只对一张卡操作;

1——表示ALL模式,一次可对多张卡操作;

2——表示指定卡模式,只对序列号等于snr的卡操作(高级函数才有)【不常用】

也就是说,我们一次也可以同时操作多张卡。

对于多卡操作,其实际真正执行操作的还是一张卡。读写器能识别多张卡的序列号(但注意识别出的顺序是不定的,并且最多也就能识别4张卡,因为卡叠放的厚度太厚,会超出读写器的识别范围),并一一进行操作。

所以由此看出,多卡操作的意义并不大。但我建议大家还是设置为1好了(原因不说了,自己感受吧,其实无所谓)。

2.密码验证模式:

0——KEYSET0KEYA

4——KEYSET0KEYB

M1卡可以在验证密码时选择密码类型(A/B)。【其实M1卡有3套密码(KEYSET0KEYSET1KEYSET2),共6个密码(用0246来表示这六个密码),目的是为了适应不同读写器。而这里我们用的是KEYSET02个密码】

M1卡密码机制:

这可以说是M1卡的精髓了,也是M1卡最为复杂的地方,希望大家耐心看完。

(请先看明白M1卡结构)如上所说,在存取控制中每个块都有相应的三个控制位,它们的定义如下:

0 C10 C20 C30

1 C11 C21 C31

2 C12 C22 C32

3 C13 C23 C33

一个扇区的三个数据块,我们可以利用密码机制对它们分别进行权限控制。数据块(块0、块1、块2)的存取控制如下:

例如:当块0的存取控制位C10 C20 C30=100时,验证密码A或密码B正确后可读;验证密码B正确后可写;不能进行加值、减值操作。

那么M1卡修改密码的方法是rf_changeb3

参数:

icdev:通讯设备标识符

_SecNr:扇区号(015

KeyA:密码A

_B0:块0控制字,低3位(D2D1D0)对应C10C20C30

_B1:块1控制字,低3位(D2D1D0)对应C11C21C31

_B2:块2控制字,低3位(D2D1D0)对应C12C22C32

_B3:块3控制字,低3位(D2D1D0)对应C13C23C33

_Bk:保留参数,取值为0

_KeyB:密码B

由上我们看出_B0_B1_B2_B3分别控制块0、块1、块2、块3

由图我们可知_B0_B1_B2的可取值为 010100110111101111

这里大家一定要注意一点:

不能装载密码到M1卡某一扇区后再更改那扇区的密码(最好连接完读写器后直接更改密码),否则更改密码会失败而冻结扇区。如果不慎这样了,解决的办法是完成一次读写操作,再更改密码。

控制块(块3)的存取控制与数据块(块012)不同,它的存取控制如下:

_B3的取值与_B0相同。

目前m1卡已经可以成功解密,没有安全保密可言,已经有软件可以测试出密码,也有空白m1卡可以写uid号码

本文来源:https://www.2haoxitong.net/k/doc/76afde36312b3169a451a4e6.html

《M1卡破解密码控制位及控制规则.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式