在SIM数据交互之-C0(GET RESPONSE)里面已经有列出一些fcp的数据,但是没有解析fcp里面具体的数据格式和内容,这边再进行一些补充
对于FCP的格式分成两种
- MF,DF,或者ADF的FCP
- EF的FCP
1.MF,DF,或者ADF的FCP
序号 | 描述 | 标签 | 状态 |
---|---|---|---|
1 | FCP模板标签 | '62' | M |
2 | 文件描述符 | '82' | M |
3 | 文件标识符 | '83' | C1 |
4 | DF 名称(AID) | '84' | C2 |
5 | 专有信息 | 'A5' | C3 |
6 | 生存周期 | '8A' | M |
7 | 安全特性 | '86', '8B', '8C' 或 'AB' | C4 |
8 | PIN状态模板DO | 'C6' | M |
9 | 总文件大小 | '81' | O |
字母 | 含义 |
---|---|
M | 必须。 |
O | 可选。 |
C1 | 对于DF或MF,必选。对于ADF,可选。 |
C2 | DF名称只对ADF是必须的。 |
C3 | 对于MF,专有信息是必须的,对于DF/ADF,是可选的。 |
C4 | 有,且只有一个标签必须有。 |
对上面的文件描述符进行简要说明,其他描述的还没理解透,以后有进展接着更新
1.1 文件描述符 82
在《3-SIM文件结构及文件操作指令》里面有讲到文件的结构,其实就是MF/DF/EF/ADF。MF/DF/ADF目录下只有FCP文件,EF下面除了有FCP外还有有BO或B2文件。
可是我们怎么知道一个文件对应的是什么类型的文件,所以文件描述符的作用就体现出来了,该文件可以让我们判断上面的所有类型。
如下表格定义:
b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | 含义 |
---|---|---|---|---|---|---|---|---|
0 | X | - | - | - | - | - | - | 文件访问属性 |
0 | 0 | - | - | - | - | - | - | 非共享文件 |
0 | 1 | - | - | - | - | - | - | 共享文件 |
0 | - | X | X | X | - | - | - | 文件类型 |
0 | - | 0 | 0 | 0 | - | - | - | 工作EF |
0 | - | 0 | 0 | 1 | - | - | - | 内部EF |
0 | - | 0 | 1 | 0 | - | - | - | RFU |
0 | - | 0 | 1 | 1 | - | - | - | |
0 | - | 1 | 0 | 0 | - | - | - | |
0 | - | 1 | 0 | 1 | - | - | - | |
0 | - | 1 | 1 | 0 | - | - | - | |
0 | - | 1 | 1 | 1 | - | - | - | DF 或 ADF |
0 | - | - | - | - | X | X | X | EF结构 |
0 | - | - | - | - | 0 | 0 | 0 | 无参考信息 |
0 | - | - | - | - | 0 | 0 | 1 | 透明文件(二进制) |
0 | - | - | - | - | 0 | 1 | 0 | 线性固定文件 |
0 | - | - | - | - | 0 | 1 | 1 | RFU |
0 | - | - | - | - | 1 | 0 | 0 | |
0 | - | - | - | - | 1 | 0 | 1 | |
0 | - | - | - | - | 1 | 1 | 0 | 循环文件 |
0 | - | - | - | - | 1 | 1 | 1 | RFU |
1 | X | X | X | X | X | X | X | RFU |
下面我们取几个常用的文件描述符进行说明:
文件描述符 | 内容分析 |
---|---|
41 | 共享文件 工作EF 透明文件(二进制)B0 |
42 | 共享文件 工作EF 线性固定文件 B2 |
46 | 共享文件 工作EF 循环文件 B2 |
78 | 共享文件 DF 或 ADF C0/F2 |
1.2 举例说明
上面表中可以很清楚的看到每个字段的含义,而且FCP的内容也都是按照上面的顺序排列,我们下面看几个例子就会比较清楚。
文件1:MF(3F00)
FCP内容如下:62278202782183023F00A507800171C00200018A01058B032F0602C60C90016083010183018183010A
我们将其按上面的表格进行类型分解可得:
描述 | 标签 | 状态 | 内容 |
---|---|---|---|
FCP模板标签 | '62' | M | 62 27 |
文件描述符 | '82' | M | 82027821 |
文件标识符 | '83' | C1 | 83023F00 |
DF 名称(AID) | '84' | C2 | 只对ADF是必须的 |
专有信息 | 'A5' | C3 | A507800171C0020001 |
生存周期 | '8A' | M | 8A0105 |
安全特性 | '86', '8B', '8C' 或 'AB' | C4 | 8B032F0602 |
PIN状态模板DO | 'C6' | M | C60C90016083010183018183010A |
总文件大小 | '81' | O | 可选 |
上表就可以比较直观的看到各标签对应的状态了,下表再做一个具体的数据分析
所属字节 | 原始内容 | 内容分析 |
---|---|---|
1 | 62 | FCP模块标签 |
2 | 27 | FCP模块的长度(十进制:30) |
3 | 82 | 文件描述符标签 |
4 | 02 | 文件描述符长度(十进制:2) |
5 | 78 | 文件描述符(DF 共享文件) |
6 | 21 | 文件描述符数据编码 |
7 | 83 | 文件识别符标签 |
8 | 02 | 文件识别符长度(十进制:32) |
9-10 | 3F00 | 文件识别符 |
11 | A5 | 专有信息标签 |
12 | 07 | 专有信息长度(十进制:7) |
13 | 80 | UICC特性标签 |
14 | 01 | UICC特性长度(十进制:1) |
15 | 71 | UICC特性(允许时钟停止,无优先级别 支持电压级别A、B、C) |
16 | 8A | 生命周期标签 |
17 | 01 | 生命周期长度(十进制:1) |
18 | 05 | 生命周期(操作状态-激活) |
19 | 8B | 安全特性标签 |
20 | 03 | 安全特性长度(十进制:3) |
21-22 | 2F06 | EF_ARR的文件标识符 |
23 | 02 | EF_ARR中对应的记录数(十进制:2) |
24 | C6 | PIN状态模块标签 |
25 | 0C | PIN状态模块(十进制:12) |
26 | 90 | PS_DO标签 |
27 | 01 | PS_DO长度(十进制:1) |
28 | 60 | PS_DO |
29 | 83 | 密钥索引标签 |
30 | 01 | 密钥索引长度(十进制:1) |
31 | 01 | 密钥索引(PIN Appl 1) |
32 | 83 | 密钥索引标签 |
33 | 01 | 密钥索引长度(十进制:1) |
34 | 81 | 密钥索引(Second PIN Appl 1) |
35 | 83 | 密钥索引标签 |
36 | 01 | 密钥索引长度(十进制:1) |
37 | 0A | 密钥索引(ADM1) |
文件2:DF(7F10)
FCP内容如下:621E8202782183027F108A01058B032F0602C60C90016083010183018183010A
所属字节 | 原始内容 | 内容分析 |
---|---|---|
1 | 62 | FCP模块标签 |
2 | 1E | FCP模块的长度(十进制:30) |
3 | 82 | 文件描述符标签 |
4 | 02 | 文件描述符长度(十进制:2) |
5 | 78 | 文件描述符(DF 共享文件) |
6 | 21 | 文件描述符数据编码 |
7 | 83 | 文件识别符标签 |
8 | 02 | 文件识别符长度(十进制:2) |
9-10 | 7F10 | 文件识别符 |
11 | 8A | 生命周期标签 |
12 | 01 | 生命周期长度(十进制:1) |
13 | 05 | 生命周期(操作状态-激活) |
14 | 8B | 安全特性标签 |
15 | 03 | 安全特性长度(十进制:3) |
16-17 | 2F06 | EF_ARR的文件标识符 |
18 | 02 | EF_ARR中对应的记录数(十进制:2) |
19 | C6 | PIN状态模块标签 |
20 | 0C | PIN状态模块(十进制:12) |
21 | 90 | PS_DO标签 |
22 | 01 | PS_DO长度(十进制:1) |
23 | 60 | PS_DO |
24 | 83 | 密钥索引标签 |
25 | 01 | 密钥索引长度(十进制:1) |
26 | 01 | 密钥索引(PIN Appl 1) |
27 | 83 | 密钥索引标签 |
28 | 01 | 密钥索引长度(十进制:1) |
29 | 81 | 密钥索引(Second PIN Appl 1) |
30 | 83 | 密钥索引标签 |
31 | 01 | 密钥索引长度(十进制:1) |
32 | 0A | 密钥索引(ADM1) |
文件3:ADF(7FF0/A0000000871002FF86FFFF89FFFFFFFF)
FCP内容如下:622C820278218410A0000000871002FF86FFFF89FFFFFFFF8A01058B032F0602C60C90016083010183018183010A
所属字节 | 原始内容 | 内容分析 |
---|---|---|
1 | 62 | FCP模块标签 |
2 | 2C | FCP模块的长度(十进制:44) |
3 | 82 | 文件描述符标签 |
4 | 02 | 文件描述符长度(十进制:2) |
5 | 78 | 文件描述符(DF 共享文件) |
6 | 21 | 文件描述符数据编码 |
7 | 84 | DF名称标签 |
8 | 10 | DF名称长度(十进制:16) |
9-24 | A0000000871002FF86FFFF89FFFFFFFF | DF名称 |
25 | 8A | 生命周期标签 |
26 | 01 | 生命周期长度(十进制:1) |
27 | 05 | 生命周期(操作状态-激活) |
28 | 8B | 安全特性标签 |
29 | 03 | 安全特性长度(十进制:3) |
30-31 | 2F06 | EF_ARR的文件标识符 |
32 | 02 | EF_ARR中对应的记录数(十进制:2) |
33 | C6 | PIN状态模块标签 |
34 | 0C | PIN状态模块(十进制:12) |
35 | 90 | PS_DO标签 |
36 | 01 | PS_DO长度(十进制:1) |
37 | 60 | PS_DO |
38 | 83 | 密钥索引标签 |
39 | 01 | 密钥索引长度(十进制:1) |
40 | 01 | 密钥索引(PIN Appl 1) |
41 | 83 | 密钥索引标签 |
42 | 01 | 密钥索引长度(十进制:1) |
43 | 81 | 密钥索引(Second PIN Appl 1) |
44 | 83 | 密钥索引标签 |
45 | 01 | 密钥索引长度(十进制:1) |
46 | 0A | 密钥索引(ADM1) |
2.EF的FCP
序号 | 描述 | 标签 | 状态 |
---|---|---|---|
1 | FCP模板标签 | '62' | M |
2 | 文件描述符 | '82' | M |
3 | 文件标识符 | '83' | M |
4 | 专有信息 | 'A5' | O |
5 | 身存周期 | '8A' | M |
6 | 安全特性 | '86', '8B', '8C', 或 'AB' | C1 |
7 | 文件大小 | '80' | M |
8 | 总文件大小 | '81' | O |
9 | 短标识符(SFI) | '88' | O |
字母 | 含义 |
---|---|
M | 必须。 |
O | 可选。 |
C1 | 有,且只有一个标签必须有。 |
在我们知道该文件是EF文件之后,我们就会对该文件下面的内容BO/B2进行读取,不过再读取之前,我们需要知道该文件内容的个数和长度。
2.1 文件大小 83和80
由于EF下面有两种文件,一种binary(B0),一种record(B2)。
对于B0来说只有一个文件,我们直接通过80字段的数据获取,对于B2的我们则需要通过80字段获取总长度,83字段获得一共有多少个B2,每个B2有多长。
2.2 举例说明
文件1:2FE2
FCP内容如下:62178202412183022FE28A01058B032F06018002000A880110
同样的我们也将EF的文件按上面的表格进行类型分解可得:
描述 | 标签 | 状态 | |
---|---|---|---|
FCP模板标签 | '62' | M | 6217 |
文件描述符 | '82' | M | 82024121 |
文件标识符 | '83' | M | 83022FE2 |
专有信息 | 'A5' | O | 可选 |
身存周期 | '8A' | M | 8A0105 |
安全特性 | '86', '8B', '8C', 或 'AB' | C1 | 8B032F0601 |
文件大小 | '80' | M | 8002000A |
总文件大小 | '81' | O | 可选 |
短标识符(SFI) | '88' | O | 880110 |
上表就可以比较直观的看到各标签对应的状态了,下表再做一个具体的数据分析
所属字节 | 原始内容 | 内容分析 |
---|---|---|
1 | 62 | FCP模块标签 |
2 | 17 | FCP模块的长度(十进制:23) |
3 | 82 | 文件描述符标签 |
4 | 02 | 文件描述符长度(十进制:2) |
5 | 41 | 文件描述符(工作EF 透明文件 共享文件) |
6 | 21 | 文件描述符数据编码 |
7 | 83 | 文件标识符标签 |
8 | 02 | 文件标识符长度(十进制:2) |
9-10 | 2FE2 | 文件标识符 |
11 | 8A | 生命周期标签 |
12 | 01 | 生命周期长度(十进制:1) |
13 | 05 | 生命周期(操作状态-激活) |
14 | 8B | 安全特性标签 |
15 | 03 | 安全特性长度(十进制:3) |
16-17 | 2F06 | EF_ARR的文件标识符 |
18 | 04 | EF_ARR中对应的记录数(十进制:4) |
19 | 80 | 文件大小标签 |
20 | 02 | 文件大小长度(十进制:2) |
21-22 | 000A | 文件大小(十进制:10) |
23 | 88 | 短文件标识符标签 |
24 | 01 | 短文件标识符长度(十进制:1) |
25 | 10 | 短文件标识符 |
说明:从83字段的数据可知文件描述符为41,所以改文件为B0,那就直接看80字段的文件大小为000A,即该B0长度为10个字节。
文件2:EF(6F06)
FCP内容如下:62198205422100370783026F068A01058B036F0601800201818800
同样的我们也将EF的文件按上面的表格进行类型分解可得:
描述 | 标签 | 状态 | |
---|---|---|---|
FCP模板标签 | '62' | M | 6219 |
文件描述符 | '82' | M | 82054221003707 |
文件标识符 | '83' | M | 83026F06 |
专有信息 | 'A5' | O | 可选 |
身存周期 | '8A' | M | 8A0105 |
安全特性 | '86', '8B', '8C', 或 'AB' | C1 | 8B036F0601 |
文件大小 | '80' | M | 80020181 |
总文件大小 | '81' | O | 可选 |
短标识符(SFI) | '88' | O | 8800 |
上表就可以比较直观的看到各标签对应的状态了,下表再做一个具体的数据分析
所属字节 | 原始内容 | 内容分析 |
---|---|---|
1 | 62 | FCP模块标签 |
2 | 19 | FCP模块的长度(十进制:25) |
3 | 82 | 文件描述符标签 |
4 | 05 | 文件描述符长度(十进制:5) |
5 | 42 | 文件描述符(工作EF 线性固定文件 共享文件) |
6 | 21 | 文件描述符数据编码 |
7-8 | 0037 | 记录长度(十进制:55) |
9 | 07 | 记录个数(十进制:7) |
10 | 83 | 文件标识符标签 |
11 | 02 | 文件标识符长度(十进制:2) |
12-13 | 6F06 | 文件标识符 |
14 | 8A | 生命周期标签 |
15 | 01 | 生命周期长度(十进制:1) |
16 | 05 | 生命周期(操作状态-激活) |
17 | 8B | 安全特性标签 |
18 | 03 | 安全特性长度(十进制:3) |
19-20 | 6F06 | EF_ARR的文件标识符 |
21 | 01 | EF_ARR中对应的记录数(十进制:4) |
22 | 80 | 文件大小标签 |
23 | 02 | 文件大小长度(十进制:2) |
24-25 | 0181 | 文件大小(十进制:385) |
26 | 88 | 短文件标识符标签 |
27 | 00 | 短文件标识符长度(不支持SPI) |
说明:从83字段的数据可知文件描述符为42,所以改文件为B2,所以接着看下面的记录长度和记录个数,一个记录长度为0x37,记录个数为7个。我们可以通过80字段的文件总大小进行验证是否一样,总文件大小为0x0181。(验证正确:0x37 * 0x07 = 0x0181)
参考文献:3GPP,ISO7816,百度百科等
网友评论