リバースエンジニアリングのレガシシリアルポート通信

私はそのクリエイターによって日没されてきたレガシー(20+ y.o)ソフトウェアを持っています。医療機器とのシリアルポート通信を行います。私は今、通信をリバース「エンジニアリング」し、それを新しいソフトウェアで再現することを検討中です。

を使用して、ソフトウェアとデバイス間で発生したシリアル通信を記録することができました。シリアルポートモニタ

レガシーソフトウェアのデータテーブルを見て、受信データがそこにどのように格納されているかを見ることができます。私が抱えている問題は、受信したデータストリームの先頭や末尾を作ることができず、シリアルポート通信についてこれまで経験したことがないためです。この時点で、これが正しい方法でデータをデコードするのと同じくらい簡単なことであり、ストリームを理解できるようにするにはレガシーソフトウェアの内部動作が必要だと考え始めているという希望をほとんど諦めています。

技術的な詳細:

  • 9600ボーレート
  • 8語の長さ
  • 0パリティ

ペイロードは2つの異なるストリームで到着します。

[17/05/2017 01:28:30] Written data (COM3) 
16 06 13 06 00 01 00 00 ca                        ........Ê  

[17/05/2017 01:28:30] Read data (COM3) 
16 06 13 06 00 02 00 72 0a a7 03 00 00 04 4b 7a   .......r.§....Kz 
00 70 78 42 00 00 00 00 00 00 00 0f 02 1d 07 e0   .pxB...........à 
04 1b 07 e1 00 9b 0b 1e 00 2e 8d 98 c6 0c 00 00   ...á.›....˜Æ... 
00 00 0b 1b 00 21 00 00 1e b1 1e ae 00 03 00 00   .....!...±.®.... 
61 39 00 00 02 c6 00 57 00 00 00 02 00 00 00 01   a9...Æ.W........ 
00 08 00 03 00 00 4e 4f 50 51 52 53 54 55 56 57   ......NOPQRSTUVW 
58 59 5a 5b 5c 5d 5e 5f 60 61 62 63 64 65 66 67   XYZ[\]^_`abcdefg 
68 69 6a 6b 6c 6d 6e 6f b0 71 51                  hijklmno°qQ      

[17/05/2017 01:28:30] Written data (COM3) 
16 06 13 06 04 01 00 00 c6                        ........Æ        

[17/05/2017 01:28:30] Read data (COM3) 
16 06 13 06 04 02 00 ce 00 03 08 1c 11 05 07 e1   .......Î.......á 
00 32 00 00 00 00 00 00 00 00 00 00 00 00 00 00   .2.............. 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................ 
00 00 00 00 00 00 00 00 00 01 00 03 00 01 00 03   ................ 
00 00 00 00 00 00 00 00 00 32 00 06 00 06 00 08   .........2...... 
00 06 00 06 00 06 00 06 00 06 00 06 00 06 00 07   ................ 
00 07 00 06 00 08 00 07 00 06 00 06 00 00 00 00   ................ 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................ 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................ 
00 00 00 00 00 00 00 00 00 00 00 02 00 03 00 02   ................ 
00 03 00 00 00 00 00 00 00 00 00 2d 00 06 00 07   ...........-.... 
00 06 00 06 00 08 00 06 00 08 00 06 00 06 00 07   ................ 
00 06 00 06 00 06 00 06 00 06 00 06 00 06 00 00   ................ 
00 00 00 00 00 00 56                              ......V          

印刷物はシリアルポートモニタからのものです、そして私は多くの制御文字が単に「ドット」に設定されていることを認識しています。私は言うことができる限り彼らはまた何が起こっているのかの明確な絵を与えていないようです。

私はすでにソフトウェアとデバイスの製造元と連絡を取り合い、彼らが手助けしようとしていると彼らの功績に触れたが、関連情報を掘り下げることができなかったことに注意すること。 私はまた、バイナリの補完物を調べようとしましたが、それでも意味がありません。

この時点で、すべての役立つヒント、トリック、またはポイントが評価されます。

編集:

For clarification; What I am hoping someone with knowledge about serial port communication might know of, and perhaps recognize the usage of, a common compression technique or encoding that I don't know off that might cause the stream to resolve into something matching the data set I can see in the legacy software. No code is being requested

1
私が受けている流れさえ理解できなければ、私はどうやって私が創造的に問題を解決できるかわかりません。そして私は自分自身でコードを書いているので、あなたは私の質問を完全には理解していなかったと思います。しかし、私はデータストリームへの入力を探しています、そしてそれがレガシーソフトウェアのデータ出力とそれを一致させることができないように思えないので、それが可能なエンコード(または他の一般的なシリアル通信データ操作)が適用されたかもしれません吐き出す。
追加された 著者 Hrafn,
あなたはそれが単純ではないことについて正しいです。私の側の言葉の悪い選択。私の限られた知識の集まりを使い果たした後、もっと経験を積んだ人が私には自明ではない何かを提案できるかもしれないかどうかを見たかったのです。実際、簡単な解決策を期待するのではなく、わずかに変更された複数のストリームを実行し、それらの差分を見て、それをレガシーソフトウェアのデータテーブルと照合する必要があると私は思いました。
追加された 著者 Hrafn,
あなたはそれが単純ではないことについて正しいです。私の側の言葉の悪い選択。私の限られた知識の集まりを使い果たした後、もっと経験を積んだ人が私には自明ではない何かを提案できるかもしれないかどうかを見たかったのです。実際、簡単な解決策を期待するのではなく、わずかに変更された複数のストリームを実行し、それらの差分を見て、それをレガシーソフトウェアのデータテーブルと照合する必要があると私は思いました。
追加された 著者 Hrafn,
あなたはそれが単純ではないことについて正しいです。私の側の言葉の悪い選択。私の限られた知識の集まりを使い果たした後、もっと経験を積んだ人が私には自明ではない何かを提案できるかもしれないかどうかを見たかったのです。実際、簡単な解決策を期待するのではなく、わずかに変更された複数のストリームを実行し、それらの差分を見て、それをレガシーソフトウェアのデータテーブルと照合する必要があると私は思いました。
追加された 著者 Hrafn,
あなたはそれが単純ではないことについて正しいです。私の側の言葉の悪い選択。私の限られた知識の集まりを使い果たした後、もっと経験を積んだ人が私には自明ではない何かを提案できるかもしれないかどうかを見たかったのです。実際、簡単な解決策を期待するのではなく、わずかに変更された複数のストリームを実行し、それらの差分を見て、それをレガシーソフトウェアのデータテーブルと照合する必要があると私は思いました。
追加された 著者 Hrafn,
「私が受けている流れさえ理解できなければ、私はどうやって私が問題を創造的に解決することができるのか本当にわかりません。」 - 私は、みんなが最初に考えたのは「あなたがドキュメントを見つけるのに行き詰まった」と思いました。さもなければそれは誰かの野生の(または教育的な)推測を使っていくつかの「ブラックボックス」をクラッキングするという課題を解決することがさらにもっと狂気のようです。
追加された 著者 SChepurin,
「私が受けている流れさえ理解できなければ、私はどうやって私が問題を創造的に解決することができるのか本当にわかりません。」 - 私は、みんなが最初に考えたのは「あなたがドキュメントを見つけるのに行き詰まった」と思いました。さもなければそれは誰かの野生の(または教育的な)推測を使っていくつかの「ブラックボックス」をクラッキングするという課題を解決することがさらにもっと狂気のようです。
追加された 著者 SChepurin,
「私が受けている流れさえ理解できなければ、私はどうやって私が問題を創造的に解決することができるのか本当にわかりません。」 - 私は、みんなが最初に考えたのは「あなたがドキュメントを見つけるのに行き詰まった」と思いました。さもなければそれは誰かの野生の(または教育的な)推測を使っていくつかの「ブラックボックス」をクラッキングするという課題を解決することがさらにもっと狂気のようです。
追加された 著者 SChepurin,
それはより創造的に達成される目的のためにクラックするためのいくつかのクレイジーなタスクです。自分でコードを書いてください。たくさんの資料があります。これから始めて、例えば、 "C ++でのシリアルポート(RS -232)接続" - stackoverflow.com/questions/15794422/…
追加された 著者 SChepurin,
あなたの考えが順調に進んでいるように聞こえます。最も簡単な方法は、デバイスのドキュメントのコピーを見つけることです。製造元に連絡済みの場合は、どこかに投稿されている可能性がある場合に備えてネットを検索しましたか。運、インスピレーション、そしてアスピリンを使えば、物事を十分に解読できるかもしれませんが、医療機器を使う場合は、さらに慎重になる必要があります。私はかつて同様の、しかし医療用ではなくクリティカルではない状況で、レガシーPCコードへのマイナーなバグ修正でメジャーバグを作成しました。 「バグ修正」が取り消され、その明白な修正を試みないようにPCコード警告にコメントが追加されました。
追加された 著者 Avi Berger,
あなたの考えが順調に進んでいるように聞こえます。最も簡単な方法は、デバイスのドキュメントのコピーを見つけることです。製造元に連絡済みの場合は、どこかに投稿されている可能性がある場合に備えてネットを検索しましたか。運、インスピレーション、そしてアスピリンを使えば、物事を十分に解読できるかもしれませんが、医療機器を使う場合は、さらに慎重になる必要があります。私はかつて同様の、しかし医療用ではなくクリティカルではない状況で、レガシーPCコードへのマイナーなバグ修正でメジャーバグを作成しました。 「バグ修正」が取り消され、その明白な修正を試みないようにPCコード警告にコメントが追加されました。
追加された 著者 Avi Berger,
あなたの考えが順調に進んでいるように聞こえます。最も簡単な方法は、デバイスのドキュメントのコピーを見つけることです。製造元に連絡済みの場合は、どこかに投稿されている可能性がある場合に備えてネットを検索しましたか。運、インスピレーション、そしてアスピリンを使えば、物事を十分に解読できるかもしれませんが、医療機器を使う場合は、さらに慎重になる必要があります。私はかつて同様の、しかし医療用ではなくクリティカルではない状況で、レガシーPCコードへのマイナーなバグ修正でメジャーバグを作成しました。 「バグ修正」が取り消され、その明白な修正を試みないようにPCコード警告にコメントが追加されました。
追加された 著者 Avi Berger,
あなたの考えが順調に進んでいるように聞こえます。最も簡単な方法は、デバイスのドキュメントのコピーを見つけることです。製造元に連絡済みの場合は、どこかに投稿されている可能性がある場合に備えてネットを検索しましたか。運、インスピレーション、そしてアスピリンを使えば、物事を十分に解読できるかもしれませんが、医療機器を使う場合は、さらに慎重になる必要があります。私はかつて同様の、しかし医療用ではなくクリティカルではない状況で、レガシーPCコードへのマイナーなバグ修正でメジャーバグを作成しました。 「バグ修正」が取り消され、その明白な修正を試みないようにPCコード警告にコメントが追加されました。
追加された 著者 Avi Berger,
「正しい方法でデータをデコードする」ことが必ずしも簡単であると考える理由は何ですか。シリアルポートモニタを使うことはすばらしい動きでした、そして、それがあなたがそれのシリアルポート部分をうまく扱ったようです。それが残っているのは(そして、そう、それは大きなことです)唯一のものは、デバイスのインターフェースプロトコルです。それは医療機器によって純粋に定義されています。あなたはドキュメントを見つけたりリバースエンジニアリングをしたりするのに行き詰まっています。あなたは文字とASCII文字を期待することに集中しているようです。これはバイナリインタフェースのように見えます。代わりに生の数字を考える必要があり、エンディアンを忘れないでください。
追加された 著者 Avi Berger,
「正しい方法でデータをデコードする」ことが必ずしも簡単であると考える理由は何ですか。シリアルポートモニタを使うことはすばらしい動きでした、そして、それがあなたがそれのシリアルポート部分をうまく扱ったようです。それが残っているのは(そして、そう、それは大きなことです)唯一のものは、デバイスのインターフェースプロトコルです。それは医療機器によって純粋に定義されています。あなたはドキュメントを見つけたりリバースエンジニアリングをしたりするのに行き詰まっています。あなたは文字とASCII文字を期待することに集中しているようです。これはバイナリインタフェースのように見えます。代わりに生の数字を考える必要があり、エンディアンを忘れないでください。
追加された 著者 Avi Berger,
「正しい方法でデータをデコードする」ことが必ずしも簡単であると考える理由は何ですか。シリアルポートモニタを使うことはすばらしい動きでした、そして、それがあなたがそれのシリアルポート部分をうまく扱ったようです。それが残っているのは(そして、そう、それは大きなことです)唯一のものは、デバイスのインターフェースプロトコルです。それは医療機器によって純粋に定義されています。あなたはドキュメントを見つけたりリバースエンジニアリングをしたりするのに行き詰まっています。あなたは文字とASCII文字を期待することに集中しているようです。これはバイナリインタフェースのように見えます。代わりに生の数字を考える必要があり、エンディアンを忘れないでください。
追加された 著者 Avi Berger,
「正しい方法でデータをデコードする」ことが必ずしも簡単であると考える理由は何ですか。シリアルポートモニタを使うことはすばらしい動きでした、そして、それがあなたがそれのシリアルポート部分をうまく扱ったようです。それが残っているのは(そして、そう、それは大きなことです)唯一のものは、デバイスのインターフェースプロトコルです。それは医療機器によって純粋に定義されています。あなたはドキュメントを見つけたりリバースエンジニアリングをしたりするのに行き詰まっています。あなたは文字とASCII文字を期待することに集中しているようです。これはバイナリインタフェースのように見えます。代わりに生の数字を考える必要があり、エンディアンを忘れないでください。
追加された 著者 Avi Berger,

4 答え

他の人が言ったようにこれは推測的な作業であり、それはバイナリプロトコルです、オリジナルの通信プロトコルだけがあなたに正確な詳細を教えてくれるでしょう。

上記のデータから把握できることは、それだけです。

  • ヘッダーバイトがいくつかあります:16 06 13 06
  • その後、いくつかのコマンドバイト:00 01または04 01
  • その後にいくつかのデータが続きます:'00 00 'または'00 .... 00'
  • 最後のバイトに2の補数を含む8ビットCRCが続く:CA
1
追加された
これらすべてが正しいことがわかりました。医療機器をモックアップし、それに加えてモックとレガシーを接続する仮想シリアルポートを備えた仮想マシン内でレガシーソフトウェアを実行することによって、バイナリプロトコルが何であるかを理解することができました。これで古いシステムを新しいものに捨てることができます。
追加された 著者 Hrafn,
私はあなたが正しいと思います。別のルートをたどる必要があります。
追加された 著者 Hrafn,

他の人が言ったようにこれは推測的な作業であり、それはバイナリプロトコルです、オリジナルの通信プロトコルだけがあなたに正確な詳細を教えてくれるでしょう。

上記のデータから把握できることは、それだけです。

  • ヘッダーバイトがいくつかあります:16 06 13 06
  • その後、いくつかのコマンドバイト:00 01または04 01
  • その後にいくつかのデータが続きます:'00 00 'または'00 .... 00'
  • 最後のバイトに2の補数を含む8ビットCRCが続く:CA
1
追加された
これらすべてが正しいことがわかりました。医療機器をモックアップし、それに加えてモックとレガシーを接続する仮想シリアルポートを備えた仮想マシン内でレガシーソフトウェアを実行することによって、バイナリプロトコルが何であるかを理解することができました。これで古いシステムを新しいものに捨てることができます。
追加された 著者 Hrafn,
私はあなたが正しいと思います。別のルートをたどる必要があります。
追加された 著者 Hrafn,

他の人が言ったようにこれは推測的な作業であり、それはバイナリプロトコルです、オリジナルの通信プロトコルだけがあなたに正確な詳細を教えてくれるでしょう。

上記のデータから把握できることは、それだけです。

  • ヘッダーバイトがいくつかあります:16 06 13 06
  • その後、いくつかのコマンドバイト:00 01または04 01
  • その後にいくつかのデータが続きます:'00 00 'または'00 .... 00'
  • 最後のバイトに2の補数を含む8ビットCRCが続く:CA
1
追加された
これらすべてが正しいことがわかりました。医療機器をモックアップし、それに加えてモックとレガシーを接続する仮想シリアルポートを備えた仮想マシン内でレガシーソフトウェアを実行することによって、バイナリプロトコルが何であるかを理解することができました。これで古いシステムを新しいものに捨てることができます。
追加された 著者 Hrafn,
私はあなたが正しいと思います。別のルートをたどる必要があります。
追加された 著者 Hrafn,

他の人が言ったようにこれは推測的な作業であり、それはバイナリプロトコルです、オリジナルの通信プロトコルだけがあなたに正確な詳細を教えてくれるでしょう。

上記のデータから把握できることは、それだけです。

  • ヘッダーバイトがいくつかあります:16 06 13 06
  • その後、いくつかのコマンドバイト:00 01または04 01
  • その後にいくつかのデータが続きます:'00 00 'または'00 .... 00'
  • 最後のバイトに2の補数を含む8ビットCRCが続く:CA
1
追加された
これらすべてが正しいことがわかりました。医療機器をモックアップし、それに加えてモックとレガシーを接続する仮想シリアルポートを備えた仮想マシン内でレガシーソフトウェアを実行することによって、バイナリプロトコルが何であるかを理解することができました。これで古いシステムを新しいものに捨てることができます。
追加された 著者 Hrafn,
私はあなたが正しいと思います。別のルートをたどる必要があります。
追加された 著者 Hrafn,