2

私が持っているシリアル magcard リーダーからデータを読み取れるようにするソフトウェアを作成しようとする際の助けを期待しています。

このカードリーダーは、会場でメンバーの会員カードの詳細を取得するために使用する非常に古い機器です。カードリーダーには、カードの詳細 (カードリーダーに保存されている) をダウンロードするソフトウェアがあり、ソフトウェアはその詳細を C ドライブのテキストファイルに配置します。まったく同じことを行うソフトウェアを書きたいと思っています。

私は間違った木を吠えているか、期待しすぎているかもしれませんが、どんな助けも素晴らしいでしょう.

これまでのところ、カード リーダーをマシンのシリアル ポートに接続し、レガシー ソフトウェアを実行し、COM ポート モニターを使用して通信をキャプチャしました。これは私が少し立ち往生しているところであり、私がキャプチャしたものがとにかく役立つかどうかを誰かが教えてくれるかどうか疑問に思っていました。うまくいけば、正しい方向に私を向けることができます.

カードリーダーにカード情報が保存されていないときにダウンロードシーケンスを実行し、これをキャプチャしました。

[12/06/2012 18:28:55] - Open port COM4

[12/06/2012 18:29:02] - Written data
31 00 01 00 00 00 32                                1.....2         

[12/06/2012 18:29:04] - Read data
31 00 06 00 0c 06 0c 00 00 00 00 55                 1..........U    

[12/06/2012 18:29:04] - Written data
33 00 01 00 00 00 34                                3.....4         

[12/06/2012 18:29:05] - Read data
33 00 14 00 06 03 00 00 0c 00 00 0d 00 00 42 00     3.............B.
00 43 00 00 63 00 00 00 01 51                       .C..c....Q      

[12/06/2012 18:29:06] - Written data
34 00 01 00 00 00 35                                4.....5         

[12/06/2012 18:29:08] - Read data
34 00 01 00 00 00 35                                4.....5         

[12/06/2012 18:29:08] - Written data
35 00 07 00 0c 06 0c 12 1c 36 00 00 be              5........6..¾   

[12/06/2012 18:29:10] - Read data
35 00 01 00 00 00 36                                5.....6         

[12/06/2012 18:29:11] - Close port COM4

次に、1枚のカードをスワイプして、カードリーダーがこれをメモリに保存し、ダウンロードを再度実行したところ、今回はこれが得られました

[12/06/2012 18:31:23] - Open port COM4

[12/06/2012 18:31:48] - Written data
31 00 01 00 00 00 32                                1.....2         

[12/06/2012 18:31:50] - Read data
31 00 06 00 0c 06 0c 00 00 00 00 55                 1..........U    

[12/06/2012 18:31:51] - Written data
33 00 01 00 00 00 34                                3.....4         

[12/06/2012 18:31:53] - Read data
33 00 14 00 06 03 00 00 0c 00 00 0d 00 00 42 00     3.............B.
00 43 00 00 63 00 00 00 01 51                       .C..c....Q      

[12/06/2012 18:31:55] - Written data
34 00 01 00 00 00 35                                4.....5         

[12/06/2012 18:31:57] - Read data
34 00 01 00 00 00 35                                4.....5         

[12/06/2012 18:31:57] - Written data
35 00 07 00 0c 06 0c 12 1f 16 00 00 a1              5...........¡   

[12/06/2012 18:32:01] - Read data
35 00 01 00 00 00 36                                5.....6         

[12/06/2012 18:32:01] - Close port COM4

最後に 3 枚のカードをスワイプして再度ダウンロードを実行し、これをキャプチャしました

[12/06/2012 18:30:21] - Open port COM4

[12/06/2012 18:30:22] - Written data
31 00 01 00 00 00 32                                1.....2         

[12/06/2012 18:30:24] - Read data
31 00 06 00 0c 06 0c 00 03 00 00 58                 1..........X    

[12/06/2012 18:30:24] - Written data
32 00 04 00 03 00 01 00 00 3a                       2........:      

[12/06/2012 18:30:26] - Read data
32 00 1c 00 03 00 01 00 12 1e 58 28 54 08 33 00     2.........X(T.3.
12 1e 58 28 53 96 95 00 12 1e 58 28 54 12 32 00     ..X(S–•...X(T.2.
05 07                                               ..              

[12/06/2012 18:30:27] - Written data
33 00 01 00 00 00 34                                3.....4         

[12/06/2012 18:30:29] - Read data
33 00 14 00 06 03 00 01 0c 00 00 0d 00 00 42 00     3.............B.
00 43 00 00 63 00 00 00 01 52                       .C..c....R      

[12/06/2012 18:30:30] - Written data
34 00 01 00 00 00 35                                4.....5         

[12/06/2012 18:30:41] - Read data
34 00 01 00 00 00 35                                4.....5         

[12/06/2012 18:30:41] - Written data
35 00 07 00 0c 06 0c 12 1e 15 00 00 9f              5...........Ÿ   

[12/06/2012 18:30:43] - Read data
35 00 01 00 00 00 36                                5.....6         

[12/06/2012 18:30:43] - Close port COM4

私が知っているのは、レガシーソフトウェアがデバイスが選択されたcomポートに接続されているかどうかを確認し、データをダウンロードしてからカードリーダーからデータを消去することだけです

そして、それが役立つ場合に備えて..カードリーダーが接続されていない状態でダウンロードしようとすると、このエラーが発生します

コマンド 0x31 が送信されない

誰でもこれについて何か光を当てることができますか?

前もって感謝します。

4

2 に答える 2

3

これは非常に典型的なシリアル ポート プロトコルです。バイト順は最小エンディアンです。最初の 2 バイトはブロック番号です。これは、応答が要求に一致する方法と、パケットの損失を検出する方法です。次の 2 バイトは、メッセージの長さ (バイト単位) です。メッセージのバイトが続きます。最後の 2 バイトはチェックサムで、メッセージ全体にバイトを追加した結果です。何らかの奇妙な理由でビッグエンディアンです。

これは単なるプロトコル フレーム仕様であり、データがスクランブルされたときに何が起こるかを示していないため、完全ではありません。実際に重要なのは、メッセージ内のデータ バイトです。製造元に連絡して仕様を取得しない限り、これらのバイトの意味を知る方法はありません。

于 2012-06-12T22:12:53.810 に答える
2

この種のプロトコルに精通しているため、これに対処するために私が考えることができる唯一の方法は次のとおりです。

  1. 製造元に連絡して、カードと通信するためにソフトウェア ユーティリティで使用される API (メッセージング形式) を入手してください。
  2. API プロトコルをリバース エンジニアリングします。これは、カードが提供する機能の数に応じて指数関数的に増加する可能性があるすべてのデータバイトの意味を把握するために多大な努力を必要とする場合があります. 良いスタートとして、1 枚のカードをスワイプしてデータを記録し、ハードウェアを再起動します。2 番目のカードをスワイプして記録して再起動し、3 枚目のカードも同様です。次に、バイナリ メッセージ間のバイナリ diff を作成して、あるカードから別のカードに変更されたバイトを見つけます。
于 2012-06-12T22:25:17.360 に答える