猫头鹰
信安舆情早知道

逆向智能咖啡机协议实现终端控制

我喜欢咖啡,事实上,我每周都要喝一升。作为一名书呆子黑客,几天前我在亚马逊上面买了一台智能咖啡机。基本上每台智能咖啡机,你都可以使用移动设备(包括Android和iOS)上的app通过wifi对咖啡机进行控制。

这款咖啡机的app相当不错。通过app你可以设置咖啡量,咖啡浓度等操作。只你要按下一个按钮,接下来只需要慢慢等待一杯美味可口的咖啡。

自从在家工作后,我大部分时间是使用电脑键盘而不是智能手机。因此,我需要一台PC端的控制台程序,不过供应商好像还没有进行发布。所以,为了编写我的PC端控制程序,我开始逆向分析咖啡机的Android应用程序,学习咖啡机与app的通讯协议。

你猜结果怎么样?

我可以使用电脑对咖啡机进行控制

terminal

逆向分析通讯协议

对Android的逆行分析通常比对IOS容易,我决定对这款Android APP进行逆向分析。我下载了app程序并且学习了各种类和方法的知识。

使用JADX(with the –show-bad-code argument)对app进行反编译,并对反编译结果查看。使用vim打开CTAGS文件夹里面的代码。

vim

几个小时之后,在am.smarter.smarterandroid.models.a 类里面发现了一些感兴趣的东西,如下:

methods

我发现,每个“数据包”都发送到机器的2081端口,协议也非常简单:

  • 第一个字节:命令编号
  • 第二个字节为N:可选数据(根据指令代码)
  • 最后一个字节: 0x7e代表数据包结束

响应数据包可能不一致,不过大多数是这样的:

  • 第一字节:响应数据的大小
  • 第二个字节:状态(0=成功,否则错误代码)
  • 最后一个字节: 0x7e代表数据包结束

以下例子是是使咖啡机保温5分钟,COMMAND和RESPONSE的参数如下 :

  • COMMAND (命令): 0x3e 0x05 0x7e
  • RESPONSE (响应): 0x03 0x00 0x7e

我写了一个迷你PC端控制程序进行测试,以下是测试结果:

代码下载地址:https://github.com/evilsocket/coffee

首先需要指定咖啡机的ip地址,打开下载好的程序,执行~/.smartercoffee  即可。

coffee make -A 192.168.1.50

简单实用教程

煮一杯咖啡:

coffee make

煮两杯咖啡

coffee make –filter

保温十分钟:

coffee warm --keep-warm=10

全部用法如下:

☕ ☕ ☕ SmarterCoffee Client ☕ ☕ ☕
by Simone 'evilsocket' Margaritelli

Usage: coffee [options] (make|warm)

Options:
 -h, --help show this help message and exit
 -A ADDRESS, --address=ADDRESS
 IP address of the Smarter coffee machine.
 -M, --make Make coffee.
 -W, --warm Warm coffee.
 -C CUPS, --cups=CUPS Set number of cups.
 -S STRENGTH, --strength=STRENGTH
 Set coffee strength ( 0-2 ).
 -G, --grind Use grind.
 -F, --filter Use filter.
 -K TIME, --keep-warm=TIME
 Keep the coffee warm for TIME minutes.

安全考虑

虽然移动应用程序需要注册一个帐号,但访问2081端口完全不需要验证。所处内网环境对的任何人都可以访问它,甚至是刷入新固件也不需要验证。

firmware

 

*原文:evilsocket  Mottoin翻译发布

转载请注明来自MottoIN,未经允许不得转载!MottoIN » 逆向智能咖啡机协议实现终端控制

分享到:更多 ()

评论 抢沙发

评论前必须登录!

 

MottoIN 换一个角度看安全

寻求报道联系我们