转载

玩爆EDUP智能插座(Part1)

玩爆EDUP智能插座(Part1)

智能插座实现了远程开启/关闭连入的设备,的确是一款懒人神器!其实现原理就是通过WiFi模块实现对继电器的开启或者关闭。EDUP智能插座通过用户提供的凭证连接家庭无线网络访问互联网。一切都设置完成之后,智能插座打开TCP/IP连接到位于中国的服务器(219.147.29.235:221)。

物理层

首先,我们准备了一些小螺丝刀和一把瑞士军刀,接着我们小心的打开智能插座,拆开图如下:

玩爆EDUP智能插座(Part1)

玩爆EDUP智能插座(Part1)

通过谷歌搜索我们了解到设备的主件:一些被动组件,一个5Mhz的晶体振荡器,一块没有打上印记的芯片(个人猜测为PIC16C770),一个2K数据存储器、继电器、WiFi板……

虽然我个人对于集成电路逆向工程的相关知识不够了解,但是我们所做的工作并非白做。至少我们对于这款智能插座设备更加了解,每一个细节都有助于我们全面的了解这个系统。

网络层

我们利用hostapd程序进行一些测试。为了阻止设备进入内部网络,我们添加了一些防火墙规则,并且在设备内存中设置访问凭证。

启动运行之后,我们可以通过EDUP提供的安卓App切换继电器,通过Nmap我们看到有两个开放的端口:TCP/23 (telnet) 和 TCP/80 (http)。

玩爆EDUP智能插座(Part1)

我们尝试连接telnet,这里有一个简单提示输入密码。我们谷歌搜索“AT + command Shell”,我们发现WiFi模块实际上是一块低成本的WIFI UART,编号为 TLG10UA03。然后我们通过默认的密码成功访问AT命令终端,并且我们还发现了一份技术文档,包括了我们在后面会有使用的AT命令清单。 链接: http://pan.baidu.com/s/1eQ6ezSI 密码:rbqn

如果你对这个点足够好奇,你可以使用一些AT命令来熟悉这个命令终端。

玩爆EDUP智能插座(Part1)

这里暴露了大量智能插座信息:

玩爆EDUP智能插座(Part1)

传输层

下面,我们将对设备如何进行工作以及其组成元素进行讨论。我们可以捕获网络访问点接口流量,并分析服务器和设备之间的数据传递。

协议很简单,大致如下:

1.协议开始

玩爆EDUP智能插座(Part1)

一旦TCP信息交换完成,服务器会Push一个携带15字节有效载荷的TCP段并激活URG flags。

玩爆EDUP智能插座(Part1)

用户确认第一段之后,发送另外两个分别为28字节和22字节的数据包,同时PSH和URG也被激活。

玩爆EDUP智能插座(Part1)

玩爆EDUP智能插座(Part1)

此时此刻,已经成功建立连接,并且用户通过发送所谓的Keep-Alive包进行响应。

2.保持连接

玩爆EDUP智能插座(Part1)

正如前面所述,客户发送这类段来提醒服务器设备依旧存活着。如果我们断开连接,或者设备休息的时候。每隔30秒就会发送一个Keep Alive包,且每个包中载荷都相同,这样服务器就承认其状态。如果没有,客户端就会被假定是失去联系,并尝试重新开始一个会话。

3.命令:On,Off

建立会话后,服务端确认客户端保持连接,然后服务端就可以发送命令给客户端,执行中继器的激活或者停止。

玩爆EDUP智能插座(Part1)

经过把玩一段时间,我了解到:

玩爆EDUP智能插座(Part1)

1、前两个字节(0xFF, 0xFF)可能为某种开始标记或者头,每个数据段都是由这两个字节作为开头。

2、接下来的这个字节(0×00)表明了协议版本

3、第四个字节(0×15)表明了有效载荷的长度。如图, 0×15 = 21,也就是总字节数

4、对于后面6个字节的含义我不太清楚,我猜测可能是编码的时间戳,或者是一个校验和

5、接下来的两个字节总是 0×09, 0×00。同样我也没搞明白是什么含义。

6、再后面的6个字节是客户端的MAC地址

7、接着后面两个字节固定为0×02, 0×80

8、最后一个自己似乎是命令本身:0×80代表ON命令,0×00代表Off命令。

下期预告

接下来,我们将看到模拟服务端,控制设备。敬请期待!

*参考来源 n0wblog ,译者/鸢尾 转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

正文到此结束
Loading...