SIM之APDU指令格式

 sim與ME之間通過APDU進行交互。

APDU包括命令APDU跟相應APDU,其中命令APDU格式爲CLA+INS+P1+P2+P3+DATA,響應APDU格式爲Data+SW1+SW2,當由ME從SIM讀取數據時則STPlayer使用READ,往上寫數據則使用WRITE模式。每個命令格式及APDU的格式我已經都寫過一遍了,這裏就不多做介紹 ,主要介紹爲什麼這麼寫跟返回值如何判斷。

 

MF或DF下的相應參數/數據:1-2:RFU,3-4:MF/DF下的剩餘未分配空間,5-6文件識別,7:文件類型,8-12:RFU,13:可選字段的長度,14-34:GSM特定數據

                                                   GSM特定數據  14:文件類型,15:當前目錄下的直接的DF數目,16:當前目錄下的直接的EF數目,17:(CHV+PUK+ADM)目,                     18:              RFU,19:CHV1狀態(位1爲幾個VERIFY CHV1嘗試正保留着),20:Unblock CHV1狀態(位1爲幾個UNBLOCK CHV1嘗試正保留着),21:CHV2狀態,22:Unblock CHV2狀態,23:FRU,24-34:管理字段,往後爲RFU

EF情況下的響應數據/參數:1-2:RFU,3-4:文件大小,5-6:文件識別,7:文件類型,8:RFU,9-11:GSM存取權限,12:文件狀態,13:可選字段的長度,14:文件類型,15:記錄長度,16以後是RFU

EF文件分類:00:transparent EF(文件頭+字節序列),01:Linear fixed EF(文件頭+一豎下來的記錄) 03:cyclic EF(文件頭+一豎下來的記錄,最後一條記錄有一指針鏈接,對於更新操作只能用PREVIOUS方式)

文件類型:00:RFU 01:MF,02 :DF,04:EF

狀態字:正確執行  90 00:命令正常結束  9F XX:長度爲XX的相應數據

                 參考管理  94 00 :沒有EF被選擇   94 02:超出範圍  94 04:文件ID沒有發現,或者特徵字串沒有發現 94 08:文件與命令不一致

                 安全管理  98 02 :CHV沒有初始化  98 04:不滿足存取條件或CHV校驗不成功,至少還有一次剩餘嘗試或UNBLOCK CHV校驗不成功,至少還有一次剩餘嘗試或鑑權失敗(連續三次CHV或十次UNBLOCK)   98 08:與CHV狀態矛盾  98 10:與文件無效的狀態矛盾  98 40:CHV校驗不成功,無剩餘嘗試或UNBLOCK CHV校驗不成功,無剩餘嘗試或CHV 鎖或UNBLOCK CHV 鎖住 98 50:不能執行增加,已達到最大值

                 應用出錯 67 XX:錯誤的參數P3(一般XX爲00),6B XX:不正確的參數P1或P2,6D XX :命令中提供不正確的指令代碼,6E XX :命令中提供錯誤的指令類別,6F XX,沒有給出診斷的技術問題。

SELECT:只能選擇當前,兒子,父親,親兄弟四種文件,在STPlayer中選擇EF後,接下來的操作失敗,則會返回到上一級,須重新選擇EF。

STATUS與GET RESPONSE:區別在於STATUS命令不適用與EF,其中P3所需要的len爲select響應的參數SW2

READ_BINARY與UPDATE_BINARY:針對transparent EF,offset high和offset low指明偏移的高位跟低位,其中READ的len爲GET RESPONSE中的最後一位,即該字節序列的長度,而UPDATE的len爲要更新字節序列的長度,即後面跟數據的長度。

READ_RECORD與UPDATE_RECORD:針對Linear fixed EF跟cyclic EF,其中爲cyclic EF時,UPDATE只能使用PREVIOUS方式,這裏說明模式,02:NEXT RECORD,03:PREVIOUS RECORD,04:ABSOLUTE MODE/CURRENT MODE,其中len爲STATUS或GET RESPONSE響應數據的最後一位,而記錄號的範圍對於Linear fixed EF來說爲1到最大記錄(響應數據的3、4位(文件大小)除以該len),而對於cyclic要注意的一點是,雖然最後一條的下一條爲第一條,當是當你指定到最後一條+1的記錄號,然後用當前模式,則會發生 94 02 的錯。

SEEK:針對Linear fixed EF跟cyclic EF,包含四種模式,X0(從頭往下),X1(從尾往上),X2(從下一個往下),X3(從上一個往上),其中X爲1時返回記錄號。如操作不成功,則記錄指針未改變。其中查詢的長度爲1到記錄長度。

INCREASE:針對cyclic EF,每條記錄都加上該命令的數據,裏面指定3個字節,我把全部cysclic EF都找了一遍,發現就EFACM跟EFLND兩個文件,既然它指定3個字節,我想應該就是針對EFACM設定的了。

VERIFY_CHV/CHANGE_CHV/DISABLE_CHV/ENABLE_CHV/UNBLOCK_CHV:三次校驗失敗CHV阻塞,十次UNBLOCK失敗死鎖。

INVALIDATE/REHABILITATE:這個命令前有個要求:仿真器取得安全取款條件,當我根據1117裏的步驟寫時,它前面選擇的是EFLOCI,然而在這個文件下怎麼試都不行,後來我把文件換爲EFADN就可行了,我想應該是EFLOCI未有安全取款條件,而EFADN有。這個命令還得注意一點是,在執行該命令是,要校驗的是CHV2。當執行成功後,GET_RESPONSE的響應數據的字節12位1爲0,即爲無效文件,此時只有SELECT跟REHABILITATE這兩條命令可執行。其中REHABILITATE即爲恢復爲有效的命令。

RUN_ALGORITHM:此函數需在DFGSM下,後面跟一16字節的隨意數據,通過GET RESPONSE返回密鑰。

 

 

發佈了51 篇原創文章 · 獲贊 18 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章