C0-GET RESPONSE
C0即獲取fcp(File Control Parameters 文件控制參數)里面的值,該指令一般在A4之后執行,執行A4選擇文件夾時,SIM卡會返回該文件下fcp的長度,如:61 29,該值即為C0需要讀的字節長度
C0指令比較固定,00 C0 00 00 XX(XX代表要讀取的長度)
1.正常讀取
SIM卡返回的數據以C0開始,以9000結束,長度為傳入的XX(fcp文件的內容長度)。
=>00 A4 00 04 02
<=A4
=>3F 00
<=61 29 //返回長度0x29
=>00 C0 00 00 29 //讀取0x29的fcp數據
<=C0 62278202782183023F00A507800171C00200018A01058B032F0602C60C90016083010183018183010A 9000 //90 00正常結束
2.讀取少于/00原有數據
當讀C0時,如果A4選擇時,返回61 29,但是沒有讀取完全,如0x00 0xc0 0x00 0x00 0x20,則只會返回0x16個字節回來,并且返回剩余的字節數61開始(要讀取00字節時,則以6C開始)這時你需要再次讀取。
=>00 A4 00 04 02
<=A4
=>3F 00
<=61 29 //返回長度0x29
=>00 C0 00 00 20 //只讀取0x20的fcp數據
<=C0 62278202782183023F00A507800171C00200018A01058B032F0602C60C900160 6109 //返回結束符為61 09,告訴你還有0x09個字節需要讀取
=>00 C0 00 00 20 //這時候必須去讀取0x09個字節,不然還是會報錯
<=61 09 //返回剩余字節數,61開始
=>00 C0 00 00 00 //這時候必須去讀取0x09個字節,不然還是會報錯
<=6C 09 //返回剩余字節數,6C開始
=>00 C0 00 00 09
<=83010183018183010A 9000 //當用0x09讀取時,則返回剩余的fcp數據,并90 00結束
3.讀取多于原有數據
當讀C0時,如果A4選擇時,返回61 29,但是卻想讀取更多的內容,如0x00 0xc0 0x00 0x00 0x30,則會返回該文件的剩余大小6C開始,需要以實際大小來讀取
=>00 A4 00 04 02
<=A4
=>3F 00
<=61 29 //返回長度0x29
=>00 C0 00 00 30 //讀取0x30的fcp數據,超過0x29
<=6C 29 //返回剩余字節數
=>00 C0 00 00 29 //讀取0x29的fcp數據
<=C0 62278202782183023F00A507800171C00200018A01058B032F0602C60C90016083010183018183010A 9000 //90 00正常結束
4.已經讀取完C0,卻要再讀C0
當C0的數據已經被讀取完成,此時再發C0指令進行內容的讀取,則會返回6F00。如果想再次讀取數據,只能用A4再選擇一次該文件才可以。
=>00 A4 00 04 02
<=A4
=>3F 00
<=61 29 //返回長度0x29
=>00 C0 00 00 30 //讀取0x30的fcp數據,超過0x29
<=6C 29 //返回剩余字節數
=>00 C0 00 00 29 //讀取0x29的fcp數據
<=C0 62278202782183023F00A507800171C00200018A01058B032F0602C60C90016083010183018183010A 9000 //90 00正常結束
=>00 C0 00 00 29 //再次讀取0x29的fcp數據
<=6F 00 //6F 00數據已經讀取完成
5.未讀取完C0,卻要讀B0/B2
無論上面的讀少或讀多C0的數據,只要沒有正常結束則無法再執行文件對于的屬性內容,
=>00 A4 00 04 02
<=A4
=>2F E2
<=61 19 //返回長度0x19
=>00 C0 00 00 19 //讀取0x19的fcp數據
<=C0 62178202412183022FE28A01058B032F06018002000A880110 9000
=>00 B0 00 00 0A
<=B0 9868200B326101550494 9000 //90 00正常結束
=>00 A4 00 04 02
<=A4
=>2F E2
<=61 19 //返回長度0x19
=>00 C0 00 00 11 //讀取0x19的fcp數據
<=C0 62178202412183022FE28A01058B032F06 6108
=>00 B0 00 00 0A
<=B0 9868200B326101550494 9000 //90 00正常結束
其實是可以正常讀取B0/B2的,這時你是不是就覺得可以不用正確讀取C0了,反正讀到B0/B2。
這種想法就是錯的,C0執行的指令比較單一,但是其指令返回的數據確實非常關鍵,里面的內容決定了該文件的特性,下一步能執行什么操作
6.fcp內容分析
示例1:B0
2FE2:62178202412183022FE28A01058B032F06018002000A880110
所屬字節 | 原始內容 | 內容分析 |
---|---|---|
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 | 短文件標識符 |
示例2:B2
2F06:621A82054221002C0783022F068A01058B032F060480020134880130
所屬字節 | 原始內容 | 內容分析 |
---|---|---|
1 | 62 | FCP模塊標簽 |
2 | 1A | FCP模塊的長度(十進制:26) |
3 | 82 | 文件描述符標簽 |
4 | 05 | 文件描述符長度(十進制:5) |
5 | 42 | 文件描述符(工作EF 線性固定文件 共享文件) |
6 | 21 | 文件描述符數據編碼 |
7-8 | 002C | 記錄長度(十進制:44) |
9 | 07 | 記錄個數(十進制:7) |
10 | 83 | 文件標識符標簽 |
11 | 02 | 文件標識符長度(十進制:2) |
12-13 | 2F06 | 文件標識符 |
14 | 8A | 生命周期標簽 |
15 | 01 | 生命周期長度(十進制:1) |
16 | 05 | 生命周期(操作狀態-激活) |
17 | 8B | 安全特性標簽 |
18 | 03 | 安全特性長度(十進制:3) |
16-17 | 2F06 | EF_ARR的文件標識符 |
18 | 04 | EF_ARR中對應的記錄數(十進制:4) |
19 | 80 | 文件大小標簽 |
20 | 02 | 文件大小長度(十進制:2) |
21-22 | 0134 | 文件大小(十進制:10) |
23 | 88 | 短文件標識符標簽 |
24 | 01 | 短文件標識符長度(十進制:1) |
25 | 30 | 短文件標識符 |
第五個字節即文件描述符
始內容 | 內容分析 |
---|---|
41 | 透明文件 B0 |
42 | 線性固定文件 B2 |
46 | 循環文件 B2 |
78 | MF/DF C0/F2 |