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構造:
コード | 長さ | 説明 | |
CLA | 1 | クラス指導 | 見出し |
イン | 1 | 命令コード | |
P1 | 1 | 命令パラメーター1 | |
P2 | 1 | 命令パラメーター2 | |
Lc | 0または1 | データフィールドのバイト数 | |
データ | Lc | チームデータ | 本体 |
ル | 0または1 | 応答で予想される最大バイト数 |
すべてのカードがすぐにチームのヘッダーと本文を受け入れるわけではありません。この場合、最初にヘッダーを送信し、応答ステータスバイトを待ってから、チームの本文を送信する必要があります。
コマンドのパラメーターを間違えた場合、Simkaはこれをステータスバイトで報告しますが、完全に間違っている(たとえば1バイトで構成されている)場合、コマンドを無視する権利があります。
R-TPDU構造:
コード | 長さ | 説明 |
データ | 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)を除くすべてがメッセージレコードです。 分析しましょう。
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エンコードが使用されることに注意することが重要です。
言葉をこんにちは。
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が選択されました。
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-ターミナルインターフェイス