對FIMI A3無人機的簡要逆向分析
本文是逆向消費產品新系列的開始,主要是為了增強我對產品的使用,同時也可以揭示資料洩漏和漏洞。
上週有個產品引起了我的注意。小米支援的一家在深圳的公司FIMI釋出了一款無人機。我一向不會購買價格便宜的無人機,因為一分錢一分貨,價格便宜往往質量不怎麼樣。(質量差的相機,糟糕的使用者體驗……),但FIMI釋出的這一個有點不同。
這架無人機有一個“DIY”埠。這是一個UART / PWM / GPIO埠,我猜測它可能是兩個電源埠。FIMI向用戶展示瞭如何連線煙花點火器或LED,但是我的思緒卻聯想到了 ofollow,noindex" target="_blank">在今年的DEF CON上的這個演示 。該專案是關於一架難以攔截的無人機,但演示的作者也展示了無人機的一些攻擊用途。理論上,這架無人機有一個WiFi干擾器或一個可以從地面啟用的混雜的WiFi資料包嗅探器。當你擁有這種埠時,可能性是無窮無盡的。A3也不需要智慧手機進行操作,它包括一個帶LCD面板的遙控器。通過智慧手機控制無人機為攻擊者開啟了一個新的攻擊面(遠端控制器和手機之間的wifi網路密碼可能被暴力破解,而智慧手機可能會遭到惡意軟體攻擊……)。大疆還沒有一體化的遙控器,但小米已經超越了它們。中國的創新做的真好。
DIY埠。現在是時候用pinneapple連線RPI Zero了。
一些可以連線到無人機的有效載荷。資料來源:David Melendez的DEF CON演示PDF
對於那些在相機方面感興趣的人來說,這款無人機使用的是 1440p索尼CMOS感測器 ,搭載AMBA A12晶片組。可以拍攝800萬畫素的靜態影象以及可以以30FF速度位元率為60 MB/s記錄1080p高清視訊。雲臺是2軸的,就像DJI Spark一樣,但這款無人機價格約250美元,是DJI Spark的有力競爭對手。如果它能拍攝4K視訊而且有3軸雲臺就更好了,但現實是殘酷的。
第1部分:韌體:
FIMI可供下載的韌體可以 在這裡 找到。
韌體分為3個:AMBA A12韌體,Drone Cortex A7韌體和遙控器韌體。
wget https://www.fimi.com/media/Productattachments//f/2/f21a-a-v010sp12rtm181027r16987-cn-rtm_u-release-741c119eb4d25878e21045e3f3c485d4.zip -P drone_fw / wget https://www.fimi.com/media/Productattachments//f/i/firmware.zip -P cam_fw / wget https://www.fimi.com/media/Productattachments//r/2/r21a-a-v010sp13rc181024r16900-cn-b_250k-release-ota-97b6c6c59241976086fabdc41472150c.zip -P remotecontrol_fw /
韌體是高度壓縮的。每個檔案大小為:
3.8M firmware.zip 488K f21a- -v010sp12rtm181027r16987-cn-rtm_u-release-741c119eb4d25878e21045e3f3c485d4.zip 728K r21a- -v010sp13rc181024r16900-cn-b_250k-release-ota-97b6c6c59241976086fabdc41472150c.zip
第一步是解壓縮每個韌體zip檔案。解壓縮完成後,遠端韌體產生1.2M BFU檔案,無人機韌體是個492K的BIN檔案,相機韌體包含與AMBA ISP相關的程式碼,解壓縮出3個檔案:3.8M firmware.bin和2個0-byte檔案:rollback.txt和update.txt。使用binwalk 3檔案更深入的檢視firmware.bin檔案,發現是壓縮的:amba_ssp_svc.bin,dsp.bin.gz,rom.bin.gz
amba_ssp_svc.bin是一個gz檔案,因此名稱應為amba_ssp_svc.bin.gz
使用extract_fw.sh我們可以獲取gz檔案及其內容:
firmware.bin SHA512:1cba74305d0491b957f1805c84e9b1cf5674002fc4f0de26905a16fb40303376187f1c35085b7455bff5c4de23cf8faa9479e4f78fd50dbf69947deb27f5d687 LOCATION: SIZE:FILENAME 5081812019amba_ssp_svc.bin.gz 18125271988127dsp.bin.gz 3800654143664rom.bin.gz
每個檔案的位置。
從這裡我用dd來提取檔案。“skip”標誌是位置,計數是下一個位置的位置。
dd if = [firmware.bin] of = out / amba_ssp_svc.bin.gz bs = 1 skip = 508 count = 1812019 dd if = [firmware.bin] of = out / dsp.bin.gz bs = 1 skip = 1812527 count = 1988127 dd if = [firmware.bin] of = out / rom.bin.gz bs = 1 skip = 3800654 count = 143664
注意:所需的所有檔案都在 IT/fimi_a3" rel="nofollow,noindex" target="_blank">我的github儲存庫中 。
現在可以使用其他一些東西了。使用gunzip解壓縮每個檔案,我們最終得到:
4.3M amba_ssp_svc.bin 4.9M dsp.bin 2.3M rom.bin
第2部分:Ambarella晶片組:
4.3M檔案是AMBA晶片組韌體是我們之前下載的。在這我們可以使用我在逆向GoPro相機韌體中使用的一些方法:
字串amba_ssp_svc.bin | grep“c:\\\\”
這項逆向工程操作的目的是:
·看看我們是否可以將自己的影象燒寫到無人機上
· 瞭解可用的解析度和幀速率
· 看看我們是否可以執行自定義的命令或獲取telnet/RTOS會話
· 禁用NFZ(無飛區)並在歐洲啟用FCC(美國5GHz模式)
· 我們可以固定無人機嗎?
從下面的結果來看,我們可以將影象從SD卡燒寫到無人機中:
C:\version.txt C:\update.txt C:\rollback.txt C:\firmware.bin
具體的操作方法,請參閱GitHub儲存庫中的 cam_fw/out/README.md 。
AMBA A12晶片組會接受一些命令,包括看起來類似於RTOS USB Shell的命令。
無人機韌體和控制器韌體沒有這種方式。無人機韌體是沒有檔案節的bin檔案,遠端控制器韌體是bfu檔案。
如果無人機可以在離線航點上飛行,那將會是很有趣的一件事情。連線WiFi嗅探器會變得更加輕鬆。
我訂購了這架無人機,但它不會很快就到貨,因為這只是一個預購。
請繼續關注本系列文章的第2部分!