1. 程式人生 > >逆向破解H.Koenig 遙控器 Part 2

逆向破解H.Koenig 遙控器 Part 2

sda com fec 逆向 title width 優化 數據 http

逆向破解H.Koenig 遙控器 Part 2

到目前為止,我們已經知道了RF收發器的安裝過程,下面是我們所掌握的東西 :

l 無線電收發器是一個Avantcom A7105

l 調制是FSK

l 頻率偏差設置為186KHz

l 基本頻率為2.40 GHz

l 在任何傳輸之前信道被設定為100

l 頻道空間是500千赫

l 因此,工作頻率為2.45 GHz

l ID是0×58 0x52 0xD2 0×41

l 帶寬為500 kbps

l 分組8字節長

l 前導碼4字節長

l 禁用CRC

l 禁用數據百花

l 禁用FEC編碼

l 固件由於是進行了優化的收發器復位,因此絕對不適合 電源,且在每一個FIFO操作前安裝完了!

下面是描述數據包格式收發器數據表的格式:

技術分享圖片

在本例中,根據我們所解碼的,包的頭部被限制到4個字節,隨後是4個字節的ID碼以及最後的8個字節的有效載荷(不進行編碼,沒有數據白化,沒有CRC)。

好吧,現在對協議進行深層次挖掘。

首先,Hook我們最喜歡的邏輯分析儀的SPI總線,並嘗試每一個按鈕!遙控器圖片如下:

技術分享圖片

有14個按鈕,所以我們期待在14個不同的數據包發送。

事實上,對於每個按鈕,當按下按鈕時,遙控器發送分組而另一個就被釋放,所以我們會得到28包。

MCU會在50ms和55ms之間等待,並在每個傳輸和發送“IDLE”到最後“按鈕彈起”事件後的收發器的時間是55ms。

下面捕捉的畫面,你可以看到,按下的按鈕已發送3次,其次是數據包中的“發布”按鈕。在右上角的數據包中,你可以看到兩個傳輸之間的延遲是55ms。

技術分享圖片

如果你想知道最後的微小的跳變是什麽,答案可以在這最後一張圖片中找到 :

技術分享圖片

好了,等的夠久了,下面是每個按鈕的數據包。第一個是用於“ 向下 ”事件,而第二個表示一個“ 向上 ”事件。

“Thursday” button

0xAA 0x00 0x03 0x49 0x00 0x00 0x01 0xF7

0xAA 0x00 0x03 0x49 0x00 0x00 0x11 0x07

“Full Go” button

0xAA 0x00 0x03 0x49 0x00 0x00 0x02 0xF8

0xAA 0x00 0x03 0x49 0x00 0x00 0x12 0x08

“Wednesday” button

0xAA 0x00 0x03 0x49 0x00 0x00 0x03 0xF9

0xAA 0x00 0x03 0x49 0x00 0x00 0x13 0x09

“Friday” button

0xAA 0x00 0x03 0x49 0x00 0x00 0x04 0xFA

0xAA 0x00 0x03 0x49 0x00 0x00 0x14 0x0A

“Sunday” button

0xAA 0x00 0x03 0x49 0x00 0x00 0x05 0xFB

0xAA 0x00 0x03 0x49 0x00 0x00 0x15 0x0B

“Monday” button

0xAA 0x00 0x03 0x49 0x00 0x00 0x06 0xFC

0xAA 0x00 0x03 0x49 0x00 0x00 0x16 0x0C

“OK” button

0xAA 0x00 0x03 0x49 0x00 0x00 0x07 0xFD

0xAA 0x00 0x03 0x49 0x00 0x00 0x17 0x0D

“Saturday” button

0xAA 0x00 0x03 0x49 0x00 0x00 0x08 0xFE

0xAA 0x00 0x03 0x49 0x00 0x00 0x18 0x0E

“Tuesday” button

0xAA 0x00 0x03 0x49 0x00 0x00 0x09 0xFF

0xAA 0x00 0x03 0x49 0x00 0x00 0x19 0x0F

“Red” button

0xAA 0x00 0x03 0x49 0x00 0x00 0x0A 0x00

0xAA 0x00 0x03 0x49 0x00 0x00 0x1A 0x10

“Down” button

0xAA 0x00 0x03 0x49 0x00 0x00 0x0B 0x01

0xAA 0x00 0x03 0x49 0x00 0x00 0x1B 0x11

“Left” button

0xAA 0x00 0x03 0x49 0x00 0x00 0x0C 0x02

0xAA 0x00 0x03 0x49 0x00 0x00 0x1C 0x12

“Right” button

0xAA 0x00 0x03 0x49 0x00 0x00 0x0D 0x03

0xAA 0x00 0x03 0x49 0x00 0x00 0x1D 0x13

“Up” button

0xAA 0x00 0x03 0x49 0x00 0x00 0x0E 0x04

0xAA 0x00 0x03 0x49 0x00 0x00 0x1E 0x14

可能已經註意到,只有最後的兩個字節發生變化。

到目前為止,我們可以假設,第二到最後一個字節編碼在低半字節和其狀態的按鈕(按下/釋放)在較高的半字節。

我的猜測是,最後一個字節計算是針對上一個的(或者都是之前 的)。

但是,我們仍然丟失了一些東西。根據手冊,有一個配對過程來與給定的遠程機器人進行 工作:按下“OK”按鈕並保持5秒鐘,它仍按下 後,啟動機器人。兩聲提示音(機器人發出),確認與 遙控器進行配對。

如果我們試圖用我們SPI總線上的邏輯分析儀進行上述過程的話,我們在 前幾秒鐘(2.3秒)就能捕獲到分組:

0xAA 0x00 0x03 0x49 0x00 0x00 0x07 0xFD

然後,分組更改為:

0x55 0x00 0x03 0x49 0x00 0x00 0x00 0xA1

因此,第一個字節是用來告訴機器人一些“代碼”。不幸的是我沒有其他遙控器來測試這個觀點,機器人本身更難以采取APPART,來處理它的固件。但我 猜測可能是這樣的:

1.第一個字節使能操作模式

2.下面的5個字節是遙控器的硬編碼的序列號,該機器人會去自我配對

3.第二和最後一個字節編碼按鈕

4.最後一個字節是一種校驗和(因為它們禁用內部CRC)。

這是第二部分。第三部分(也是最後一個部分)我們將建立一個計算機控制的遙控器。

逆向破解H.Koenig 遙控器 Part 2