前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >看我如何逆向智能手环控制无人机

看我如何逆向智能手环控制无人机

作者头像
FB客服
发布2018-02-08 10:57:42
1.1K0
发布2018-02-08 10:57:42
举报
文章被收录于专栏:FreeBuf

一年前,我买了一个智能手环,型号为SONY SmartBand SWR10。就像大部分智能手环一样,它对我没什么用一直放在抽屉里。

背景

突然有一天我有了个很好的灵感——朋友邀请我加入他们的“NASA太空”APP黑客马拉松队伍,而我选择了“不要撞我的无人机”这个课题,它包括无人机控制和飞行信息方向的解决方案,于是我决定用我的手环来控制无人机。

当黑客马拉松开始时,我去寻找我的手环相关的开发API和开发工具,我很惊讶它居然没有任何相关资料。论坛上也有用户说SONY只提供了一些闭源的SDK给他们的程序员,而我的黑客马拉松只允许开源的解决方案。事实上我认为创建我自己的接口并不困难。

思路

于是我启动了我的手环应用,然后打开“蓝牙HCI监听日志”。这个功能可以嗅探所有的流量并将其导入到SD卡中。

我打开日志:

然后用WireShark打开。

这好像是在运行蓝牙低能耗协议,并且比 GATT协议更特殊,这是一个双向协议。手机有一个“GATT服务”,外围设备会接收“GATT特征码”而它包含所有二进制数据。

我选择了第一个UUID (00000208–37cb-11e3–8682–0002a5d5c51b) 然后在谷歌搜索。我希望搜索到一些传统的标准GATT服务,但我却发现了一些有趣的东西。

瞬间我觉得我可以完成了——我发现了别人对这个协议的逆向。同时也证实了我是对的,这个项目包含了连接,握手,电池状态读取,连接保持的工作原理实现。但是,加速计数据很奇怪。我将加速计上的数据挂载到MPAndroidChart,实时的图表显示如下:

分析

虽然输出与倾斜高度相关,但是值是完整的。在阅读实现代码之后,32位的整数值好像包含3个10位的值。这是合理的,因为大部分的加速计有10位的精度(大部分ADC)。数据证明了这一点,看前两部分:

但是解析这3个10位的数据也很奇怪,每几个倾斜的值都会在511到-512之间变化,没有偏移能够改变它(没有整数溢出产生)。所以,我觉得SONY是不是用了什么传统的二进制打包方法,或者他们有编码算法和压缩算法。

我尝试用Protobuf,MsgPack,Thrift 来解析,但是都没用。这时我只有一天来讲加速计跟我的无线飞行器关联到一起。但就在我绝望时,在查看他们的APP反编译结果的半小时后,我发现了下面这些东西:

前半部分的[0,512]是反的,这就是我获得这些峰值的原因。我用简单的异或对其进行调整。我把他们调整到[-1,1范围],现在要做的就是把加速计和无线控制器建立连接(你可以在GitHub上找到实现)。

最终我完成了这个项目,并且赢得了奖项。

*参考来源:medium.com ,FB小编老王隔壁的白帽子翻译,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-05-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 思路
  • 分析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档