1

こんにちは、ソフトウェア インターフェイスを書きたいデバイスの CRC を計算しようとしています。簡単にするために、X をデバイス、Y をハードウェア コントローラーとします。私は正しい方向へのナッジを探しています。いくつかの点で少し混乱しているだけで、正しい軌道に乗っていると確信しています。

デバイスがアイドル状態のとき、次のデータ文字列を 2 秒ごとに送信します。これは、16 進数でカウントアップしているように見えます: 間の 2 バイト| |は、私が想定する CRC です。(XX) は可変バイトです。

X: 96 10 01 E1 (E4) 01 FF 10 17 | F7 EC | 10 06 E1 96 FE
X: 96 10 01 E1 (E6) 01 FF 10 17 | 7F FA | 10 06 E1 96 FE
X: 96 10 01 E1 (E8) 01 FF 10 17 | C7 9B | 10 06 E1 96 FE
X: 96 10 01 E1 (EA) 01 FF 10 17 | 4F 8D | FE 10 06 E1 96 FE
X: 96 10 01 E1 (EC) 01 FF 10 17 | D7 B6 | FE 10 06 E1 96 FE
X: 96 10 01 E1 (EE) 01 FF 10 17 | 5F A0 | FE 10 06 E1 96 FE

revengwithreveng -w 16 -sと上記のデータセットを使用すると、次のようになります。

width=16 poly=0x1021 init=0x1e69 refin=true refout=true xorout=0x0000 check=0x3da6 name=(なし)

コントローラーから a コマンドをインターセプトすると、次のようになります。

X: 96 10 01 E1 (EE) 01 FF 10 17 | 5F A0 | FE 10 06 E1 96 FE -- コマンドの前の最後の行
Y: E1 10 01 96 (22) 05 01 C0 A8 35 00 10 17 |0B B8| FE 10 06 96 E1 FE

(22) は修飾子|0B B8|で、CRC です。22 は E4 からどのように派生したのですか? それは別のCRCですか?

同じコマンドを数回送信したところ、次のものが傍受されました。

Y: E1100196220501C0A8350010170BB8FE100696E1FE
Y: E11001962A0501C0A835001017C1C7FE100696E1FE
Y: E11001962E0501C0909400101753C8FE100696E1FE  
Y: E1100196300501809094001017C3EEFE100696E1FE  
Y: E1100196360501C090940010170D48FE100696E1FE  
Y: E11001962A0501C09094001017B6F7FE100696E1FE
Y: E11001962A0501C09094001017B6F7FE100696E1FE

revengwithreveng -w 16 -sと上記のデータセットを使用すると、次のようになります。

width=16 poly=0x1021 init=0xd313 refin=true refout=true xorout=0x0000 check=0x295f name=(なし)

多項式は同じですが、初期化とチェックは異なります。長い投稿で申し訳ありませんが、私の質問の要約は次のとおりです。

1) たとえば、デバイスが同じ多項式を使用するが、異なる初期化とコントローラーへのチェックを使用するのは一般的ですか?

2) デバイスからの文字列をカウントする定数は、チェックサムの計算に使用される変数バイトをオフセットするために使用されますか? もしそうなら、このメカニズムは何と呼ばれ、カウントとバイトの関係を導き出すためにどのような方法を使用できますか?

3) 私は正しい道を進んでいますか、それとも途中で道に迷いましたか?

これを読んでくれてありがとう、そして正しい方向へのキックを本当に感謝します.

4

1 に答える 1

2

X および Y シーケンスの最初のバイトを削除すると、両方が得られます。

width=16  poly=0x1021  init=0xffff  refin=true  refout=true  xorout=0xffff  check=0x906e  name="X-25"

ウィット:

% reveng -w 16 -s 100196220501C0A8350010170BB8 1001962A0501C0A835001017C1C7 1001962E0501C0909400101753C8 100196300501809094001017C3EE 100196360501C090940010170D48 1001962A0501C09094001017B6F7 
width=16  poly=0x1021  init=0xffff  refin=true  refout=true  xorout=0xffff  check=0x906e  name="X-25"

% reveng -w 16 -s 1001E1E401FF1017F7EC 1001E1E601FF10177FFA 1001E1E801FF1017C79B 1001E1EA01FF10174F8D 1001E1EC01FF1017D7B6 1001E1EE01FF10175FA0
width=16  poly=0x1021  init=0xffff  refin=true  refout=true  xorout=0xffff  check=0x906e  name="X-25"
于 2013-05-09T03:56:44.373 に答える