低レベルでSIMカードと通信します



f:クロワッサンがどのように機能するか想像できません)私たちのクルサッシーは通常、棚のどこかにほこりを集めます

m:ここにボードがあります。 SIMカードを盗む必要があり、このボードはそこからSMSを読み取る必要があります)

m:ボードは購入されていますが、プログラムしています)

f:携帯電話からSMSを読み取ることは不可能ですか?

-人生から、スペルが保存されました











SIMカード、転送プロトコル、およびそれらのファイル構造について詳しく知りたい場合は、catに問い合わせてください。 さて、コードなしで...







1.はじめに



SIMカードはスマートカードの一種であるため、ISO-7816規格に完全に準拠しているという事実から始める価値があります。 彼女がどのような結論を出したかは述べません(これについては、 前の記事ですでに詳しく説明しました)。



一部のSIMカード(より正確にはスマートカード)のプロセッサでは、最大20 MHzの同期信号を適用できます。 しかし、結局のところ、SIMカードをオンにすると、端末はそのパラメーターを認識しないため、通信は最大4 MHzで開始されます。 その後、端末はSIMカードをよりよく認識し、送信設定を変更できます。



20 kOhmのプルアップ抵抗をI / Oピンに接続する必要があります。 ターミナルとSimkaが互いに何も言えない(つまり、両方ともZ状態にある)瞬間に、この抵抗は出力に論理的な統一性を提供します。



2.有効化/無効化



SIMカードのアクティベーションとその後のコールドリセット







図は非常に単純で、コールドリセットは時点T aで開始されます。 ここでは、I / OがSIMカードによってのみ制御されることに注意してください。 端末は、RSTがゼロの間、端末上の信号を無視する必要があります。 SIMが応答を返す必要がある場合(リセットの応答)。



無効化







ここには明確な時間枠はありません。I/ OもSIMカードによって制御されます。



3.伝送プロトコル



すべてのスマートカード、したがってSIMカードには、バイトT0とブロックT1の2種類の伝送プロトコルがあります。 T0のみを検討します。



T0は、2滴の水と同様に、UART(COMポート経由の送信で使用されます)に似ているとすぐに言わなければなりません。 しかし、いくつかの注意事項があります。 最初から始めましょう。







プロトコルT0の時間は、基本時間単位(etu)と呼ばれ、次の値に等しくなります。





ここで、F(クロック変換係数)およびD(ビットレート制御係数)はATRに基づいて設定され、fはカードのクロック周波数です。 デフォルトでは、F = 372、D = 1です。



I / Oピンでの転送は、開始ビット(論理ユニットからのドロップ)の出現から始まります。 各ビットに割り当てられる時間はetuです。 次に、8データビット、1パリティビット、および少なくとも2ストップビットが続きます。 2つの開始ビット間の時間間隔は、常に12 etu以上9600 etu以下でなければなりません。



4.リセットする回答



言ったように、Simkaはコールドリセット後にATRを送信します。 同期頻度の推奨値、サポートする伝送プロトコルのリストなどの情報が含まれています。



ATRの最初のバイトはTSです。 どのエンコーディングが使用されているかを示します-直接または逆。







直接コーディング:TSがHHLH HHLLの場合、I / O回路の高電圧レベルは論理ユニットをエンコードし、図の時間2は最下位ビットをエンコードします 。 このエンコードでは、TSバイトの値は0x3Bです。



逆コーディング:TSがHHLL LLLLに等しい場合、I / O回路の低電圧レベルは論理ユニットをエンコードし、H-論理ゼロ。 図の時間2は、 最大有効ビットをエンコードします 。 このエンコードでは、TSバイトの値は0x3Fです。



残りのバイトには、オーバーヘッド情報(FおよびDの推奨値など)が含まれ、etuの値に影響します。



5.チーム構造



チームは、コマンドトランスポートデータユニット(C-TPDU)とレスポンストランスポートデータユニット(R-TPDU)の2つのタイプに分かれています。 チームとそれに答えます。 チームは常にペアを構成します。カードは、カードに送信されたコマンドに対してR-TPDUに応答します。 R-TPDUは常に、チームの成功を特徴付けるステータスバイトで終了します。



C-TPDU構造:
表1
コード 長さ 説明
CLA 1 クラス指導 見出し
イン 1 命令コード
P1 1 命令パラメーター1
P2 1 命令パラメーター2
Lc 0または1 データフィールドのバイト数
データ Lc チームデータ 本体
0または1 応答で予想される最大バイト数




すべてのカードがすぐにチームのヘッダーと本文を受け入れるわけではありません。この場合、最初にヘッダーを送信し、応答ステータスバイトを待ってから、チームの本文を送信する必要があります。



コマンドのパラメーターを間違えた場合、Simkaはこれをステータスバイトで報告しますが、完全に間違っている(たとえば1バイトで構成されている)場合、コマンドを無視する権利があります。



R-TPDU構造:
表2
コード 長さ 説明
データ Lr 応答データ
SW1 1 ステータスバイト1
SW2 1 ステータスバイト2




6.ファイル構造



ファイルの種類:



1.マスターファイル(MF)-ルート。

2.専用ファイル(DF)-通常のフォルダー。

3.エレメンタリファイル(EF)は次のように分類されます。

-透過EF-バイトシーケンスで構成され、

-線形固定EF-同じサイズの一連のレコードで構成され、

-サイクリックEF-同じことですが、ファイルの終わりに達すると、次のレコードは円でのゼロ記録で始まります。



7.チームの例



DF TELECOMフォルダーのEF SMSファイルにあるSMSメッセージの読み取りと書き込みを試みましょう。





1) 選択



ファイルに対して操作を実行する前に、最初にファイルを選択する必要があります。 まず、DF TELECOMフォルダーを選択する必要があります。



SELECTコマンドヘッダーの送信:



A0 A4 00 00 02



答えはステータスバイトです。



A4(命令バイトを繰り返す)



送信チームボディ:



7F 10(このフォルダーのID)



同様に、EF SMSを選択します。



2) レコードの読み取り



すべてのSMSを含むファイルを選択したら、そのうちの1つを読み取ってください。



READ RECORDコマンドヘッダーの送信:



A0 B2 01 04 B0(01-SMSシリアル番号)



答えは:



B2 07 07 91 97 62 92 90 90 F0 11 FF 04 81 21 43 00 08 FF 08 04 45 04 30 04 31 04 40 FF FF FF

FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

FF FF FF FF FF FF FF FF FF FF 90 00



最初と最後の2バイト(B2、07、90、00)を除くすべてがメッセージレコードです。 分析しましょう。



表3
07 SMSセンター番号の長さ(バイト単位)。
91 SMSセンター番号のタイプ(この場合、国際形式で表示されます)。
97 62 92 90 90 F0 SMSセンター番号は+ 7-926-290-90-90(バイトの最後から読み取られます)です。 記号Fは位置合わせに必要です。
11 SMSセンター番号の長さ。
04 送信者の番号の長さ。
81 送信者番号のタイプ。
21 43 送信者の番号は1234です(再びバイトの最後から読み取られます)。
00 プロトコル識別子。
08 エンコード(00-ラテン語のみ、08-キリル文字付き)。
08 バイト単位のメッセージの長さ。
04 45 04 30 04 31 04 40 メッセージは「Habr」です。 UTF-16でコーディングされています。




メッセージにラテン文字のみが含まれる場合、特別な7ビットGSMエンコードが使用されることに注意することが重要です。



言葉をこんにちは。



表4
h 私は
68 69 UTF-8で調べます。
0 110 1000 0110 100 1 バイナリに変換します。
1110 1000 0011 0100 上位バイトを次のバイトの下位ビットで補完します。
E8 34 これが、7ビットエンコーディングで「こんにちは」のように見えるものです。




3) レコードの更新



UPDATE RECORDコマンドヘッダーの送信:



A0 DC 02 04 B0(02-SMSシリアル番号)



答えはステータスバイトです。



DC(命令バイトを繰り返す)



次に、表3に従ってチームボディが送信されます。



8.ハードウェアおよびソフトウェアの実装



ハードウェア実装としてアルテラDE1 FPGAが選択されました。 コースを引き渡す必要があります。小規模なプロジェクトの場合は素晴らしい支払いです。 プロジェクト全体は、VHDLおよびCでBreaknusが作成しました 。開発環境-Quartus IIおよびEclipse。



SIMカードコネクタは、IDEバスの5本のワイヤにはんだ付けされています。 ボードにはプルアップ抵抗が内蔵されています。



プロジェクトの概要:



データの入出力のために、NIOS IIプロセッサが収集されました。 NIOSコンソールでコマンドを入力すると、16進コードに変換され、バイト単位でvhdlブロックに転送されます。 このブロックでは、コマンドはT0プロトコルに従ってI / O SIMカードに送信されます。 応答を受信した後、ブロックはそれをNIOSに送信し、NIOSコンソールに応答が表示されます。 カードの有効化/無効化は、ボード上のスイッチによって選択されます。 アクティブ化/非アクティブ化に必要な時間フレーム、およびカード同期の頻度は、vhdl-blockによって提供されます。



プロジェクトをダウンロードする



謝辞



ボリス・ミハイロヴィチ・スクヒニンに感謝します。 素晴らしい研究所施設でFPGAの世界を紹介してくれて、質問に答える時間を見つけたのは彼でした。



お役立ち情報



1. ISO-7816 (ウィキペディア)

2. ETSI TS 100 977-モバイル機器(SIM-ME)インターフェイス

3. ETSI TS 102 221 -UICC-ターミナルインターフェイス



All Articles