文章分为三章来讲解。
第一章 基本原理及结构,公开资料,已阅读过的可以跳过
第二章 为自己整理后的浅谈
一、S50存储结构及扇区、块原理
- M1 卡分为 16 个扇区,每个扇区由 4 块(块 0、块 1、块 2、块 3)组成,(我们也
将 16 个扇区的 64 个块按绝对地址编号为 0~63,存贮结构如下图所示: - 第 0 扇区的块 0(即绝对地址 0 块),它用于存放厂商代码,已经固化,不可更改。
- 每个扇区的块 0、块 1、块 2 为 数据块,可用于存贮数据。数据块可作两种应用:
(1) 用作一般的数据保存,可以进行 读、写 写操作。
(2) 用作数据值,可以进行 初始化值、加值、减值、读值操作。 - 每个扇区的块 3 为 控制块,包括了密码 A、存取控制、密码 B。具体结构如下:
- 每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取
控制。存取控制为 4 个字节,共 32 位,扇区中的每个块(包括数据块和控制块)的
存取条件是由密码和存取控制共同决定的,在存取控制中每个块都有相应的 三个控
制位。控制位定义如下:
块 0: C10 C20 C30
块 1: C11 C21 C31
块 2: C12 C22 C32
块 3: C13 C23 C33 - 三个控制位以正和反两种形式存在于存取控制字节中,决定了该块的访问权限(如
进行减值操作必须验证 KEY A,进行加值操作必须验证 KEY B,等等)。如下两图说明了三个控制
位在存取控制字节中的位置。(注:控制位为4 字节,但字节 9 为备用字节)
对块 0 的存储控制结构如下所示:完整的存取控制结构如下所示:
- 数据块(块 0、块 1、块 2)的存取控制如下:
例如:当块 0 的存取控制位 C10 C20 C30 = 1 0 0 时,表示:
验证密码 A 或密码 B 正确后可读。
验证密码 B 正确后可写。
不能进行加值、减值操作。
- 控制块块 3 的存取控制与 数据块(块 0、1、2)不同,它的存取控制如下:
例如:当块 3 的存取控制位 C13 C23 C33=0 0 1 时,表示:
密码 A:不可读,验证 KEYA 或 KEYB 正确后,可写(更改)。
存取控制:验证 KEYA 或 KEYB 正确后,可读、可写。
密码 B:验证 KEYA 或 KEYB 正确后,可读、可写。
二、存储控制浅谈
我相信刚接触S50的人,看完存储控制这部分应该是很懵的。当然也包括我,现在说一下自己的浅谈,给刚学习的同学一些指引。技术有限,也刚接触,如浅谈有错误、有问题的地方请指出。
1. 首先定义一份演示数据
看图可以了解到,数据样本扇区6的控制块,KEYA:000000000000,控制位:FF078069,KEYB:000000000000。
2. 开始分析
(1)首先把控制位的Hex(十六进制)转Bin(二进制),下方表格中的字节表示数据在控制块中的第几字节。虽然控制位为4字节,但是字节9为备用字节,并没有参与到控制中,这里就不再分析以防混乱。(不理解的同学请看本文第一章,先看理论)
字节 | Hex | Bin |
字节6 | FF | 1 1 1 1 1 1 1 1 |
字节7 | 07 | 0 0 0 0 0 1 1 1 |
字节8 | 80 | 1 0 0 0 0 0 0 0 |
那么将以上数据套入第一章第6节的图完整的存取控制结构(尖括号内为以上的数据,方括号内为控制位,带_b的为控制位取反,对于控制位不理解请看第一章5,6节):
结构 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
字节6 | <1>[C23_b] | <1>[C22_b] | <1>[C21_b] | <1>[C20_b] | <1>[C13_b] | <1>[C12_b] | <1>[C11_b] | <1>[C10_b] |
字节7 | <0>[C13] | <0>[C12] | <0>[C11] | <0>[C10] | <0>[C33_b] | <1>[C32_b] | <1>[C31_b] | <1>[C30_b] |
字节8 | <1>[C33] | <0>[C32] | <0>[C31] | <0>[C30] | <0>[C23] | <0>[C22] | <0>[C21] | <0>[C20] |
再次整理数据后得到(不理解的看第一章第5,6,7,8节):
块0 存储控制为 : C10 | C20 | C30,控制码为>000
块0说明:验证KeyA或KeyB后,可读可写,可做增减值操作
块1 存储控制为:C11 | C21 | C31,控制码为>000
块1说明:验证KeyA或KeyB后,可读可写,可做增减值操作
块2 存储控制为:C12 | C22 | C32,控制码为>000
块2说明:验证KeyA或KeyB后,可读可写,可做增减值操作
块3 存储控制为:C13 | C23 | C33,控制码为>001
块3说明:(1)前6字节,KeyA不可读,验证KeyA或KeyB后可写。
(2)中间4字节,存取控制:验证 KEYA 或 KEYB 正确后,可读、可写。
(3)后6字节,KeyB:验证 KEYA 或 KEYB 正确后,可读、可写。
三、结尾
写得比较仓促,有时间后再进行补充。