2017-03-05 6 views
1

私は現在、デバイスのリバースエンジニアリングに取り組んでいます。私はシリアルプロトコルを持っています。ASCII文字列からのリバースエンジニアリングチェックサム?

私はほとんどそこにありますが、私は文字列の一部を理解することができません。

各文字列について、マシンは常にそれを返します!XXXXここで、XXXXは16進値で変化します。私はこれがCRC16かもしれないことから何かを見つけることができますか?

しかし、正しいことを確認するためにCRCをどのように計算するのか分かりません。

ここでは3つの回答の例を示します。

U;0;!1F1B 
U;1;!0E92 
U;2;!3C09 

数字は、一連のASCII文字で置き換えることができます。たとえば、私が最も頻繁に使用するものを次に示します。

U;RYAN W;!FF0A 

チェックサムの生成方法はどのように計算されますか? CRC RevEng http://reveng.sourceforge.net/

あなたはそれを入力し、チェックサムの進文字列を与えるとCRCアルゴリズムは、入力に一致するものを、それを尋ねることができます。

答えて

2

長さの異なる例がさらに必要です。

revengを使用すると、CRCバイトを元に戻すことができます。 1b1fではなく、1f1bです。 CRCは、セミコロンの間で計算されます。 revengでは多項式が0x1021であり、これは非常に一般的な16ビット多項式であり、CRCが反映されていることがわかります。

% reveng -w 16 -s 301b1f 31920e 32093c 5259414e20570aff 
width=16 poly=0x1021 init=0x1554 refin=true refout=true xorout=0x07f0 check=0xfa7e name=(none) 
width=16 poly=0x1021 init=0xe54b refin=true refout=true xorout=0xffff check=0xfa7e name=(none) 

さらに多くの例では、CRCレジスタの初期値とその結果が排他的論理和であるかどうかを判断できます。

2

は、CRCの計算-エンジニアを逆に利用可能なツールがあります。ここで最初の3つのストリングのために入力される(メッセージがUであると仮定すると、0 ;, U 1とU 2):

$ reveng -w 16 -s 553b303b1f1b 553b313b0e92 553b323b3c09 
width=16 poly=0xa097 init=0x63bc refin=false refout=false xorout=0x0000 check=0x6327 residue=0x0000 name=(none) 

チェックサムは、入力されたメッセージに従います。残念ながら、私はRYAN Wメッセージを試してもこれはうまくいきません。入力メッセージを編集して、文字列のどの部分がCRCに入力されているのかを確認することをお勧めします。

+0

ありがとうございました。 RYAN Wで見つかったのはちょうどUで途切れているようだった。いくつかの実験をするときに。 私はrevengを試していましたが、それを使う方法はよく分かりませんでした。方法を教えてくれてありがとう。 –