5-SIM資料互動之-C0(GET RESPONSE)

weixin_34402408發表於2018-07-20

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

相關文章