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返回密鑰。