2016-10-11 10:17:07
来源:安全客 作者:WisFree
阅读:278次
点赞(0)
收藏
前言
我个人非常喜欢喝咖啡,说实话,我估计我每周都要喝好掉几升的咖啡…我不仅是一名黑客,而且我还是一个名副其实的极客。于是乎,就在几天之前,爱喝咖啡的我果断在亚马逊商城买了一台智能咖啡机,也算是赶了一把智能家居的热潮。
这是由智能设备制造商Smarter所推出的一款带有Wi-Fi功能的智能咖啡机,当这台咖啡机连上了你家的Wi-Fi之后,你就可以用手机客户端来控制它了。别担心,Smarter 很贴心地为Android用户和苹果用户提供了相应的客户端。你可以设想这样一种场景:当你辛苦工作了一天,一回到家就有杯热腾腾的咖啡在那里等着你了,这是一种什么样的体验?Smarter智能咖啡机就可以做到这一点。如果你不了解这款智能咖啡机的话,可以访问其官网以了解详细的信息[传送门]。安装了相应的app之后你就会发现,这款智能咖啡机所配备的App设计得非常棒。在App的帮助下,你可以直接设置咖啡的杯数和浓度,然后按下手机中的按钮,接下来你就可以摊在沙发上等着热腾腾的咖啡“出炉”了。
因为通常情况下我都是在家工作的,所以我使用电脑键盘的时间多过我使用智能手机的时间。因此,我就感觉对于手机App而言,命令行客户端貌似更加适合我一些。但是现实和理想总是有差距的,厂商当然不会提供这样的工具给我们。所以,我就打算对咖啡机的Android端应用程序进行逆向分析,然后深入了解一下它所使用的网络通信协议,并为实现我自己的客户端做好准备工作。
你猜怎么着?没错!在经过了一番折腾之后,我终于可以用终端来控制我家的智能咖啡机了。
对通信协议进行逆向分析
相比对iOS应用进行逆向分析,Android应用的逆向分析过程要相对简单一些,所以我才选择从咖啡机的Android端应用入手[App点我获取]。下载好apk文件之后,我要先对文件进行反汇编,然后才可以开始研究源代码中的各个类和方法。于是我打开了JADX(使用参数--show-bad-code),然后在CTAGS(一款方便代码阅读的工具)的帮助下开始对输出的源代码进行分析。几个小时过后,我发现了一个非常有趣的类(am.smarter.smarterandroid.models.a),在这个类中有几个方法引起了我的注意,具体如下图所示:
这些数据全部都会被发送至智能咖啡机的TCP端口2081,而且咖啡机所采用的网络通信协议也十分简单。
第一个字节:命令数;
第二个字节至N:可选数据,具体将取决于命令代码;
最后一个字节:永远为0x7e,它代表的是数据的结尾;
不同的命令会使响应信息发生一些变化,但是对于大多数控制命令而言,响应信息的形式基本如下:
第一个字节:响应信息的大小;
第二个字节:状态码(0=成功,其他即为错误代码);
最后一个字节:永远为0x7e;
我在下方给大家提供了一个例子,这是一个控制命令和其对应的响应信息。这个控制命令可以让咖啡保温五分钟,具体如下所示:
命令:0x3e 0x05 0x7e
响应:0x03 0x00 0x7e
于是,为了编写出我的终端控制程序并对其进行功能测试,我已经将咖啡机所有的控制命令全部映射出来了…为了更好地给大家展示我的努力成果,我专门录制了一个视频。我不得不说,这玩意儿简直棒极了!
演示视频:
如果你感兴趣的话,你也可以自行动手尝试一下,毕竟实践才能出真知嘛!但是请注意,第一次运行时你需要指定设备的IP地址,你的配置数据将会保存在~/.smartercoffee文件中,此后你就无需再进行配置了。[点我获取工具源码]
配置IP地址的命令样例如下所示:
coffeemake-A192.168.1.50一些简单的控制命令
制作一杯咖啡:
coffeemake制作两杯咖啡,并且使用过滤器过滤掉研磨机中的咖啡豆渣:
coffeemake–filter咖啡保温十分钟:
coffeewarm--keep-warm=10完整使用手册:
SmarterCoffeeClient bySimone'evilsocket'Margaritelli Usage:coffee[options](make|warm) Options: -h,--help显示帮助信息 -AADDRESS,--address=ADDRESS设置Smarter智能咖啡机的IP地址 -M,--make制作咖啡 -W,--warm咖啡保温 -CCUPS,--cups=CUPS设置咖啡杯数 -SSTRENGTH,--strength=STRENGTH设置咖啡浓度(0-2) -G,--grind使用研磨功能 -F,--filter使用过滤功能 -KTIME,--keep-warm=TIME设置咖啡保温时间站在安全的角度进行考虑
虽然用户在使用咖啡机的App时需要注册一个账号,但是端口2081的访问完全没有受到任何的限制,任何未经过身份验证的操作者都可以直接访问这个端口。而且我还发现,用户账号只是用来收集一些统计数据的。这也就意味着,任何处于同一网络中的人都可以直接访问并控制你的咖啡机。除此之外,我还对UPDATE_FIRMWARE包中的代码进行了逆向分析,我发现在更新咖啡机固件的时候,系统同样不会对操作者的身份进行验证。不过厂商请放心,我是不会在报告中公开讨论这部分内容的。
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:https://www.evilsocket.net/2016/10/09/IoCOFFEE-Reversing-the-Smarter-Coffee-IoT-machine-protocol-to-make-coffee-using-terminal/#.V_pNbpzrDZ8.reddit