逆向RF協議:看我如何玩壞爸爸新買的433MHz電動百葉窗?
我最近針對許多不同的DIY家庭自動化設備進行了黑客攻擊,主要目的是想將他們逆向然後集成到我的DIY homekit中去。幾個月前,我爸爸買了大量的RAEX 433MHz射頻的電動百葉窗,在房間里安上並取代了我們家現有的手動窗帘。
注意:這些百葉窗是與Spotlight以「 Motion Motorized Roller Blind」 的名義銷售的相同型號
說實話,這個自動百葉窗對我來說簡直是夢幻般的,因為它能夠讓我我懶惰的打開/關閉我的窗戶,但是為了控制他們,我需要購買RAEX品牌遙控器。RAEX製造許多不同類型的遙控器,我選擇使用的是其中的兩種類型,如下所示:
在房子的每個房間里都有一個遙控器是不可行的,因為許多走道都無法使用這些遙控器,所以也就不要去浪費錢購買很多遙控器。相反,多個房間其實是可以被編程到同一個遙控器上的。不幸的是,也正是由於這一點,遙控器其實是存在高度爭議的。
使用RAEX遙控器的另一種解決方案是使用一塊稱為RM Pro的硬體。它能夠使得允許您通過智能手機使用他們的應用程序來控制遙控器。
不過這個應用程序運行起來非常緩慢,對我來說完全不適合家庭自動化生態系統。我想讓我的窗帘可以通過Apple Homekit進行操作。
為了控制這些百葉窗,我知道我需要做以下兩件事中的任意一件:
1、逆向RM Pro應用程序與RM Pro是如何進行通信的並在這裡用上。
2、將RF協議逆向並用於與百葉窗通信的遙控器。
我首先嘗試了第一件事一段時間,但排除了,因為我無法攔截用於在iPhone和集線器之間通信的流量。因此,我開始了對RF協議進行逆向的冒險之旅。
我在Ebay上購買了Arduino的433MHz發射器以及接收器。你可以選擇在Ebay 上嘗試搜索Arduino的433Mhz RF發射機接收器鏈路工具包。
初步研究
我在谷歌上查找RAEX正在使用的協議的技術規範,但毫無頭緒:
1.我通過FCC或專利查找找不到協議的任何技術規範n2.通過電子郵件發送RM Pro獲取技術規範; 他們聽不懂我的英文n3.通過電子郵件發送RAEX獲取技術規範; 他們不會在沒有保密協議的情況下發布。n4.我確實發現RFXTRX能夠通過BlindsT4模式控制百葉窗,這似乎也適用於Outlook Motion 百葉窗。n5.在打開其中一個遙控器並識別正在使用的微控制器後,我無法找到解釋所使用的通用RF編碼方案的任何文檔。n6.它可能已經能夠通過逆向I2C工程遠程固件上的ROM晶元的轉儲。看起來類似的遙控器允許在引導後的任何時候進行傾泄。n
捕獲數據
一旦我的包到達,我就會將接收器連接到Arduino,並開始搜索可以捕獲正在發送的數據的Arduino草圖。我嘗試了許多事情都失敗了,但是最終找到了一個似乎可以捕獲數據的東西。
而在我捕獲到我認為足夠的數據後,我就開始分析了。說實話,這個數據真的很難理解,我甚至不知道捕獲的內容是否正確。
我做了一些進一步的學習,了解了一些RF逆向工程的內容。很多人都曾嘗試使用Audacity通過插入計算機麥克風埠的接收器;來捕獲信號。所以我也決定這樣試試。
這樣子的做法讓我捕獲了大量數據。我收集了4種不同R類型的遙控器,以及2種不同X類型的遙控器,並在與Broadlink RM Pro(B類型)配對的8種不同的設備上獲得了更多有趣的東西。
到這裡,我已經能夠確定一些事情了。
傳輸沒有滾動碼。因此,我可以簡單地重播捕獲的信號,使百葉窗每次都做同樣的事情。如果我無法逆向工程協議,這將是最壞的情況。
傳輸重複至少3次(根據所使用的遠程類型而改變)
放大波形,我們可以看到捕獲的傳輸的不同部分。下面的示例是捕獲遠程1通道1,用於配對操作:
放大:
在縮放圖像中,您可以看到傳輸以振蕩0101AGC模式開始,接著是另一個雙寬度前導碼模式,然後是較長的標題模式,然後是數據。對於R型遙控器,該前同步碼,報頭和數據重複3次(AGC模式僅在發送開始時發送一次)。這可以在第一個圖像中看到。看這個數據不會太有用。我需要一種方式來轉換數字和分析位,並確定不同的遙控器,通道和動作之間的一些模式。
解碼波形
我們需要確定波形是如何編碼的。這些類型的硬體應用程序使用以下之一是非常常見的:
曼徹斯特編碼,n三態/三位編碼,附加信息nPWM編碼n
原始的?high long = 11,high short = 1,low long = 00,low short = 0?
通過做一些研究,我能夠確定使用的編碼最有可能的是曼徹斯特編碼。我們需要記住這一點。
將數據數字化
我開始處理數據作為上述所說的原始方案(即使我認為是曼徹斯特)。這樣做的原因是,如果碰巧不是曼徹斯特,我可以嘗試用另一個方案來解碼它。(另外用手寫出來的東西比在我頭上做曼徹斯特解碼更容易)。
我將每個捕獲記錄寫入Google表格電子表格。每個頻道寫出每個動作大概需要5分鐘,每個遙控器有6個頻道。我開始認為這需要一段時間才能真正得到足夠的數據進行分析。(考慮到我有160次捕獲數字化)
一旦收集了2個遙控器中8個不同頻道的所有動作,我就停止了。這給了我32個捕捉。從這麼多的數據,我能夠推斷出一些關於原始位的事情:
每個通道有一些位改變n每個遙控器有一些位改變。n對於每個頻道/遠程/動作組合,有些位似乎隨機變化。n
我仍然需要更多的數據,但是我手中有太多的捕獲來解碼。為了獲得任何地方,我需要一個腳本來處理我通過Audacity捕獲的WAV文件。我寫了一個腳本,檢測到標題和提取的數據作為其原始編碼等價物(如我一直在做的)。該腳本生成了JSON輸出,因此我可以添加額外的元數據,並用波形交叉檢查捕獲:
一旦驗證,我就會對這些數據進行列表並將其插入我的電子表格進行進一步處理。不幸的是,這有太多的bits,使得每一次捕獲都會讓我保持理智:
我認為如果是以曼徹斯特編碼來解密時最好的。為此,我寫了一個腳本,將原始捕獲數據處理為曼徹斯特(或其他編碼類型)。將這些數據遷移到我的電子表格中,這時它開始變得更有意義了。
看看這些數據,我們可以立即看到這些bits和它們的目的之間的一些關係:
通道(C)6位n2位動作(A)n6位用於某些校驗和,似乎是一個動作和通道的功能。 F(A, C)n 行動改變時的變化n 頻道改變時的變化n 由於沒有信道是平等的,所以不能確定它們會在遙控器中發生變化。n1位似乎是Action的一個功能 F(A)n1位似乎是的函數F(A),從而,G(F(A))。它取決於F(A)值,有時是1-1映射,有時是反映射。n
經過進一步的調查,我確定對於同一個遙控器和通道,對於每個不同的動作,F(A, C)增加了1.(如果你認為這些位是大端序列號)。
再看一下,我還確定,對於相鄰的通道,與C(通道)相關的位向上/向後計數(X型遙控器向上計數,R型遙控器向後計數)。另外F(C)還一起增加/減少。注意C欄。
由此,我可以確認之間的關係F(A, C),並C,這樣F(A, C) = F(PAIR, C0) == F(PAIR, C1) ± 1。在這個發現之後,我還確定了F(A, C)和A(Action)之間有另外的數學關係。
製作更多數據
根據我們現在收集的信息,我們可以通過改變6位通道數據並按照我們上面發現的數學關係,相應地使校驗和變異來創建新的遙控器。這意味著我們可以從一個種子通道生成64個通道。這麼多通道足以控制房子里的所有百葉窗,但是我真的想完全解碼校驗和欄位,反過來又能夠產生(幾乎)無限遠的遙控器。
我寫了一個工具來輸出種子捕獲的所有通道:
生成更多數據的原因是,如果我們可以在同一個頻道上查看不同的遙控器,也許我們可以確定校驗和的形成方式。即R0CH0,R1CH0,X1CH0,等…
本質上我想做的是解決下列方程式的功能G:
然而,查看所有通道0的PAIR捕獲,校驗和仍然完全混亂且隨機的:
然而,在看這些數據的同時,另一種模式也脫穎而出了。G(F(A))坐了整個位元組偏移(8位)F(A)。另外,前2位F(A, C)位於位元組邊界,並與A(Action)對齊。隨著行動的增加,F(A, C)也是如此。讓所有bits在其位元組邊界排列,看看其有什麼優勢:
從這裡,我們需要確定一些基於前4個位元組產生已知校驗和的函數。最初我嘗試在位元組上進行XOR:
但並不是很成功,輸出顯示為隨機並使用校驗和異或輸出不產生常數鍵。因此,我推斷出校驗和不是通過異或生成的。會不會是加法呢?我們已經看到上面的加法/減法關係。
相同類型遙控器的通道之間有一個恆定的差異,這使得我們的猜測看起來非常有希望。由於我的生成程序有一個錯誤,所以不同類型的遙控器可能會有所不同嗎?在通道或校驗和突變時,我們是否沒有包裝正確的位數或使用錯誤的位元組邊界?
事實證明,這是? 的原因。
解決校驗
查看原始捕獲,並執行相同的模加法,我們確定校驗和是通過添加前導的4個位元組和添加3來計算的。我無法確定為什麼在3這裡使用,除了RAEX想要使其解碼的校驗和更多困難或確保正確的傳輸模式。
我重構了我的應用程序來處理我們剛剛確定的邊界:
看這樣的數據開始變得更有道理了。事實證明,這F(A)不是A(Action)的一個功能,它實際上是被傳輸的動作數據的一部分:
另外,通道和遙控器之間的分割也許是沒有必要的。相反,這可能只是一個任意的24位整數,但是更容易將其拆分為8位int和16位int。基於此,我可以推斷,協議有2 ^ 24遙控器(約1670萬)的空間!這裡有很多百葉窗!
因此,我正式的寫出校驗和功能:
附加工具
我的remote-gen程序是為了使用種子遠程生成代碼(儘管由於包裝問題而不正確),但現在需要一些其他功能。
我需要一種從捕獲中提取信息的方法,並驗證其校驗和是否與我們的規則集一致,以生成校驗和。我寫了一個info命令:
–validate如果猜測的校驗和!=校驗和,運行與出錯與錯誤。在我們的所有捕獲中運行這一過程證明我們的校驗和函數是正確的。
該工具所需的另一個功能是能夠生成任意代碼來創建我們自己的遙控器:
好了到這裡,我已經可以使用這個工具來生成任何我認為必要的遙控器了。
本文翻譯自:Reverse Engineering a 433MHz Motorised Blind RF Protocol,如若轉載,請註明來源於嘶吼: 逆向RF協議:看我如何玩壞爸爸新買的433MHz電動百葉窗? 更多內容請關注「嘶吼專業版」——Pro4hou
推薦閱讀:
※因為兩個漏洞,雅虎所有用戶通訊錄暴露
※利用SCOM捕獲創建可疑進程的事件
※SecWiki周刊(第142期)
※2013 年的互聯網安全嗎?
※趨勢科技警告:CAN標準存在漏洞,聯網汽車可被遠程操控