低レベルで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
コード長さ説明
CLA1クラス指導見出し
イン1命令コード
P11命令パラメーター1
P21命令パラメーター2
Lc0または1データフィールドのバイト数
データLcチームデータ本体
0または1応答で予想される最大バイト数


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

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

R-TPDU構造:
表2
コード長さ説明
データLr応答データ
SW11ステータスバイト1
SW21ステータスバイト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
07SMSセンター番号の長さ(バイト単位)。
91SMSセンター番号のタイプ(この場合、国際形式で表示されます)。
97 62 92 90 90 F0SMSセンター番号は+ 7-926-290-90-90(バイトの最後から読み取られます)です。 記号Fは位置合わせに必要です。
11SMSセンター番号の長さ。
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私は
6869UTF-8で調べます。
0 110 10000110 100 1バイナリに変換します。
1110 10000011 0100上位バイトを次のバイトの下位ビットで補完します。
E834これが、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-ターミナルインターフェイス

Source: https://habr.com/ru/post/J137963/


All Articles