新しいSIMカードにしたので今度はロックしないようにと思っていたのですが、STの提供しているサンプルSTM32011のの動作をちゃんと理解していなかったので、再びロックする寸前になってしまいました。そこで、新改めてサンプルの動きを確認することに。
SIMカード上のファイルへのアクセスは ISO7618-4で定められているコマンドを送信して行います。ISO標準は無料でダウンロードすることができませんが、GSMや3GPPのSIMに関する資料を参照すると必要なISO768-4のコマンドやその使い方も説明されているので、GSM11.11とかを参照すればISO標準を購入しなくてもSTM32011のコードを読んで理解することが可能です。
SIMカードにリセットがかかると、SIMカードはMF(Master File)という、ディレクトリ構成の最上位にあるファイルをアクセスできる状態にあります。STM32011のサンプルでは、いったんMFをSELECTコマンドで選択した後、GET RESPONSEコマンドを発行することでMFに関する情報を取得してますので、その内容を確認してみました。
22バイトの応答がありましたが、その内容は次のようになっています。
CHV1ステータスが0x81となっていますが、これはPIN1が設定されており、すでに2回 PIN番号を間違えているので、残り1回間違えるとSIMロックがかかるという状態であることを意味しています。危ない崖っ淵です。ところが、ファイル特性バイトをみると0xB3となっており、CHV1の有効/無効を示すMSBが1になっています。ここがMSBだとCHV1は無効であるという状態を示しています。つまり、PIN番号照合をしなくてもカードにアクセスすることが可能な状態になっていたのです。サンプルのプログラムを改めて読んでみると、PIN番号照合が無効になっている場合には、いったんこれをわざと有効にしてから、照合をおこなうという作りになっていたのでした。それに気づかずに、PIN番号の照合をしている部分だけ直してアクセスを試行していたのでした。
比較のために、ロックしてしまったFOMAカードの方も確認してみました。
こちらも同様に22バイトが返ってきましたが...
特性バイトが0x13となっておりCHV1(PIN1)確認が有効となっていることを示しています。またCHV1ステータスが 0x80となっており、もう試行回数が残っていないことを示しています。つまり、ロックされているこということです。
SIMカード上のファイルへのアクセスは ISO7618-4で定められているコマンドを送信して行います。ISO標準は無料でダウンロードすることができませんが、GSMや3GPPのSIMに関する資料を参照すると必要なISO768-4のコマンドやその使い方も説明されているので、GSM11.11とかを参照すればISO標準を購入しなくてもSTM32011のコードを読んで理解することが可能です。
SIMカードにリセットがかかると、SIMカードはMF(Master File)という、ディレクトリ構成の最上位にあるファイルをアクセスできる状態にあります。STM32011のサンプルでは、いったんMFをSELECTコマンドで選択した後、GET RESPONSEコマンドを発行することでMFに関する情報を取得してますので、その内容を確認してみました。
22バイトの応答がありましたが、その内容は次のようになっています。
バイト位置 | 意味 | 長さ | 値 |
---|---|---|---|
1 -- 2 | 未使用 | 2 | 00 00 |
3 -- 4 | 選択したディレクトリに割り当てあれていないメモリ量 | 2 | 00 00 |
5 -- 6 | File ID | 2 | 3F 00 |
7 | ファイル種別 | 1 | 01 |
8 -- 12 | 未使用 | 5 | 00 00 00 00 00 |
13 | 以後の長さ | 1 | 09 |
14 | ファイルの特性 | 1 | B3 |
15 | 直下にあるDFの数 | 1 | 03 |
16 | 直下にあるEFの数 | 1 | 09 |
17 | CHV, UNBLOCK CHV, 管理コードの数 | 1 | 04 |
18 | 未使用 | 1 | 00 |
19 | CHV1ステータス | 1 | 81 |
20 | UNBLOCK CHV1ステータス | 1 | 8A |
21 | CHV2ステータス | 1 | 83 |
22 | UNBLOCK CHV2ステータス | 1 | 90 |
CHV1ステータスが0x81となっていますが、これはPIN1が設定されており、すでに2回 PIN番号を間違えているので、残り1回間違えるとSIMロックがかかるという状態であることを意味しています。危ない崖っ淵です。ところが、ファイル特性バイトをみると0xB3となっており、CHV1の有効/無効を示すMSBが1になっています。ここがMSBだとCHV1は無効であるという状態を示しています。つまり、PIN番号照合をしなくてもカードにアクセスすることが可能な状態になっていたのです。サンプルのプログラムを改めて読んでみると、PIN番号照合が無効になっている場合には、いったんこれをわざと有効にしてから、照合をおこなうという作りになっていたのでした。それに気づかずに、PIN番号の照合をしている部分だけ直してアクセスを試行していたのでした。
比較のために、ロックしてしまったFOMAカードの方も確認してみました。
こちらも同様に22バイトが返ってきましたが...
バイト位置 | 意味 | 長さ | 値 |
---|---|---|---|
1 -- 2 | 未使用 | 2 | 00 00 |
3 -- 4 | 選択したディレクトリに割り当てあれていないメモリ量 | 2 | 00 00 |
5 -- 6 | File ID | 2 | 3F 00 |
7 | ファイル種別 | 1 | 01 |
8 -- 12 | 未使用 | 5 | 00 00 00 00 00 |
13 | 以後の長さ | 1 | 09 |
14 | ファイルの特性 | 1 | 13 |
15 | 直下にあるDFの数 | 1 | 03 |
16 | 直下にあるEFの数 | 1 | 07 |
17 | CHV, UNBLOCK CHV, 管理コードの数 | 1 | 04 |
18 | 未使用 | 1 | 00 |
19 | CHV1ステータス | 1 | 80 |
20 | UNBLOCK CHV1ステータス | 1 | 8A |
21 | CHV2ステータス | 1 | 82 |
22 | UNBLOCK CHV2ステータス | 1 | 90 |
特性バイトが0x13となっておりCHV1(PIN1)確認が有効となっていることを示しています。またCHV1ステータスが 0x80となっており、もう試行回数が残っていないことを示しています。つまり、ロックされているこということです。