Decryption
如何從數據中反轉所謂的 CRC16?
我試圖了解我反向工程的請求,該請求通過 BLE 發送到 Daly BMS。
這些請求會在 BMS 的幾秒鐘內改變“睡眠後”:
- 對於 DDDD 秒:
d2 06 00 8A DD DD 22 8A
- 對於 FFFF 秒:
d2 06 00 8A FF FF BA 33
- 對於 EEEE 秒:
d2 06 00 8A EE EE 76 6F
- 對於 FFFE 秒:
d2 06 00 8A FF FE 7B F3
- 對於 0000 秒:
d2 06 00 8A 00 00 BB 83
如你看到的:
- ‘asleep’ 請求以 fixed:
d2 06 00 8A
前綴開頭- 數據如下;
- 最後兩個字節可能是 CRC-16,可以是自定義字節。
我想通過程式碼建構最後兩位數。
因此,我怎樣才能走得更遠?我如何理解最後兩個字節是如何建構的?
$$ UPDATED $$ 在@poncho的回答之後,分享一下我在Dart中寫的逆CRC16的實現。
飛鏢墊就在那兒。希望能幫助到你。
我如何理解最後兩個字節是如何建構的?
要回答的第一個明顯問題是“最後兩個字節是線性的嗎?
$$ 1 $$其餘數據的函式?”。CRC-16 將是線性的;但是這些不是唯一的線性函式(無論如何,正如您將看到的,我們不會關心區別)。 抽查的最簡單方法是在 0001 秒內獲取消息;如果創建最後兩個字節的函式是線性的,那麼結果將是
BB 83
$ \oplus $7B F3
$ \oplus $BA 33
=7A 43
。如果你看到了,那麼映射很可能是線性的;如果不是,那麼我們知道它不是。請注意,我異或的三個標籤是 和0000
的FFFE
標籤FFFF
。如果它確實是線性的,那很容易;只需找到 0002、0004、0008、0010、0020、0040、0080、0100、0200、0400、0800、1000、2000、4000、8000 秒的消息;一旦你擁有了所有這些,那麼你可以通過將正確的已知標籤異或在一起來計算任何值的標籤;要計算 0120 的標籤,您需要對 0000(如果位數為偶數,則包括)、0100 和 0020 的標籤進行異或。
如果這確實對應於 CRC,則實際上很容易從中推斷出多項式和初始狀態 - 但是,您不需要它。
$$ 1 $$: 或仿射;在這種情況下,區別並不重要