Decryption

如何從數據中反轉所謂的 CRC16?

  • June 10, 2022

我試圖了解我反向工程的請求,該請求通過 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。如果你看到了,那麼映射很可能是線性的;如果不是,那麼我們知道它不是。請注意,我異或的三個標籤是 和0000FFFE標籤FFFF

如果它確實是線性的,那很容易;只需找到 0002、0004、0008、0010、0020、0040、0080、0100、0200、0400、0800、1000、2000、4000、8000 秒的消息;一旦你擁有了所有這些,那麼你可以通過將正確的已知標籤異或在一起來計算任何值的標籤;要計算 0120 的標籤,您需要對 0000(如果位數為偶數,則包括)、0100 和 0020 的標籤進行異或。

如果這確實對應於 CRC,則實際上很容易從中推斷出多項式和初始狀態 - 但是,您不需要它。

$$ 1 $$: 或仿射;在這種情況下,區別並不重要

引用自:https://crypto.stackexchange.com/questions/100474