玩爆EDUP智能插座Part1

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

物理层

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

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

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

网络层

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

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

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

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

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

传输层

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

协议很简单,大致如下:

1.协议开始

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

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

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

2.保持连接

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

3.命令:On,Off

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

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

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

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

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

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

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

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

7、接着后面两个字节固定为0x02, 0x80。

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

下期预告

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

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

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2015-06-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能

深度学习环境搭建:tensorflow安装教程及常见错误解决

区别于其他入门教程的“手把手式”,本文更强调“因”而非“果”。我之所以加上“通用”字样,是因为在你了解了这个开发环境之后,那些很low的错误你就不会犯了。 大家...

37360
来自专栏互联网杂技

从输入URL到页面加载完的过程中都发生了什么事情

一个HTTP请求的过程 为了简化我们先从一个HTTP请求开始,简要介绍一下一个HTTP求情的网络传输过程,也就是所谓的“从输入 URL 到页面下载完的过程中都发...

372100
来自专栏熊二哥

快速入门系列--MVC--03控制器和IOC应用

    Asp.net MVC也接触好久了,但由于自己一直主要负责后台,尤其是数据库方面的工作对于该框架并没有一个很好的了解,尤其是蒋金楠大师的ASP.NET ...

19460
来自专栏程序员的SOD蜜

“一切都是消息”--MSF(消息服务框架)入门简介

“一切都是消息”--这是MSF(消息服务框架)的设计哲学。 MSF的名字是 Message Service Framework 的简称,中文名称:消息服务框架,...

55750
来自专栏腾讯技术工程官方号的专栏

高并发性能调试经验分享(上)

4月份的时候看到一道面试题,据说是腾讯校招面试官提的:在多线程和高并发环境下,如果有一个平均运行一百万次才出现一次的bug,你如何调试这个bug?遗憾的是知乎很...

1.1K30
来自专栏web编程技术分享

简单粗暴,详细得不要不要的 JavaWeb快速入门

40790
来自专栏翻译

Universe入门

Universe是一个用于衡量和训练AI的软件平台,适合世界上的所有游戏,网站和应用程序。本项目是一个universe开源库,它为 每个Universe环境提供...

83660
来自专栏SDNLAB

话说VLAN Tag 的“来龙去脉”

前言 自从上篇文章《三层交换机的工作原理》发布后,有很多的网络爱好者私底下与我取得了联系,针对当前的TCP/IP网络做了很多的探讨,从这些爱好者身上我也学习到了...

491110
来自专栏北京马哥教育

Python库大全,建议收藏留用!

39930
来自专栏DHUtoBUAA

C#实现局域网内远程开机

1、远程开机原理      远程开机Wake on LAN(WOL),俗称远程唤醒,远程唤醒的实现主要是向目标主机发送特殊格式的数据包,是AMD公司制作的Mag...

46690

扫码关注云+社区

领取腾讯云代金券