对FIMI A3无人机的简要逆向分析

李白 技术 2018年11月12日发布
Favorite收藏

导语:​本文是逆向消费产品新系列的开始,主要是为了增强我对产品的使用,同时也可以揭示数据泄漏和漏洞。

本文是逆向消费产品新系列的开始,主要是为了增强我对产品的使用,同时也可以揭示数据泄漏和漏洞。

上周有个产品引起了我的注意。小米支持的一家在深圳的公司FIMI发布了一款无人机。我一向不会购买价格便宜的无人机,因为一分钱一分货,价格便宜往往质量不怎么样。(质量差的相机,糟糕的用户体验……),但FIMI发布的这一个有点不同。

这架无人机有一个“DIY”端口。这是一个UART / PWM / GPIO端口,我猜测它可能是两个电源端口。FIMI向用户展示了如何连接烟花点火器或LED,但是我的思绪却联想到了在今年的DEF CON上的这个演示。该项目是关于一架难以拦截的无人机,但演示的作者也展示了无人机的一些攻击用途。理论上,这架无人机有一个WiFi干扰器或一个可以从地面激活的混杂的WiFi数据包嗅探器。当你拥有这种端口时,可能性是无穷无尽的。A3也不需要智能手机进行操作,它包括一个带LCD面板的遥控器。通过智能手机控制无人机为攻击者开启了一个新的攻击面(远程控制器和手机之间的wifi网络密码可能被暴力破解,而智能手机可能会遭到恶意软件攻击……)。大疆还没有一体化的遥控器,但小米已经超越了它们。中国的创新做的真好。

image.png

DIY端口。现在是时候用pinneapple连接RPI Zero了。

image.png

一些可以连接到无人机的有效载荷。资料来源: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
508       1812019  amba_ssp_svc.bin.gz
1812527   1988127  dsp.bin.gz
3800654   143664   rom.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

注意:所需的所有文件都在我的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部分!

GitHub存储库: https://github.com/KonradIT/fimi_a3

本文翻译自:https://medium.com/@konrad_it/brief-reverse-engineering-work-on-fimi-a3-5422d93db560如若转载,请注明原文地址: http://www.4hou.com/technology/14440.html
点赞 0
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论