引言

Mirai事件一经曝出,立即引领了一轮研究IoT设备的热潮。目前,对Mirai的报告大多只是在对其功能实现上的介绍,却很少提及如何实现IoT设备程序开发的测试环境。本文在对Mirai的源码研究的基础上,实现了一个比较简单的IoT设备开发编译环境。该工具能自动配置交叉编译环境,使其可以满足简单的物联网开发测试。

编译环境搭建

采用脚本的方式,在git中为config.sh,可自动安装交叉编译工具安装包,并将可执行目录配置到环境变量中。具体步骤如下,采用wget到固定的网站上下载交叉编译安装包(需要其他交叉编译工具包,可自行添加),解压即可用,不用对安装包进行编译安装,并将安装包可执行文件目录写入/etc/profile的末尾,最后使用source /etc/profile使其生效,如未生效,手动执行命令source /etc/profile即可。

编译脚本

编译脚本在git上为build.sh,可根据情况对bot文件进行编译。编译分为release模式和debug模式,release模式对bot文件进行交叉编译,使其适用于不同的嵌入式架构;debug模式直接对bot文件进行编译,并在debug程序运行的过程中会打印出调试信息。

测试环境

小米路由器3一台,选择它,是因为它可以方便地安装SSH插件,具体的方法,可参照:

https://jingyan.baidu.com/article/624e7459ae65e834e8ba5afd.html

登陆上小米路由器,如图所示:

测试方法

下载该项目程序,git地址为:https://github.com/scu-igroup/IoT_bot

git上主要存放的是bot客户端程序,其中config.sh为交叉编译环境自动配置脚本,build.sh为程序编译脚本,需要先运行config.sh搭好交叉编译环境,才能对bot程序进行编译。

客户端程序编译及运行:

本项目的文件相当于实现了一个简单的是客户端,先在bot目录下的include.h中更改要连接的IP和port。运行build.sh 脚本编译程序,如:./build.sh debug

即可在debug目录下编译好所要的程序。由于小米路由器的CPU采用的是MIPS架构,系统为Linux,在测试过程中,只有用mipsel-gcc编译的程序才能正常运行,下面会做详细说明。因此,不同CPU架构的IoT设备,需要用对应的交叉编译工具,才能编译出能正常运行的可执行程序。下图中,即为编译出的适应于不同架构的可执行程序。

对于如何判断某个IoT设备适用哪种可执行程序,通过看路由器的cpuinfo,就可以知道cpu model的架构,为MIPS;通过查看路由器的系统版本,为linux2.6.36,即可查知该系统支持的库函数,在程序开发的时候,查明所用的库函数该系统是否支持非常重要,以免引起程序意外退出。如下图所示为小米路由器的cpuinfo和系统版本信息。

编译好程序后,在debug目录下找到./mirai.mipsel程序,用scp命令将该程序投放到路由器的tmp目录下(小米路由器支持scp命令,其他的IoT可能不支持,需要探测其支持的命令工具),运行该程序,如下图:

遇到的问题:

在投放可执行程序过程中,需要注意CPU是大端存储还是小端存储的问题,在实验过程,采用mips-gcc编译的程序,直接运行,会报如下错误:

排查后才知道,mips-gcc编译出的为大端存储的可执行程序;mipsel-gcc编译出的为小端存储的可执行程序。小米路由器为小端存储,故用mipsel-gcc编译的程序才能正常执行。

服务端程序:

服务端比较简单,采用的是现成的工具,找一台Linux主机(虚拟机即可),安装nc工具(精悍的小工具),在centos系统下可直接安装: yum install nc

在客户端程序已运行的情况下,运行:nc –l 9999  //监听9999端口

只要客户端运行该IP下的9999端口,即可建立通信。

服务端程序运行图为:

总结

该测试程序是在Mirai源码的基础上做的裁剪,已删除攻击模块,目的在于做一个针对IoT设备的程序开发测试。总的来说,Mirai到目前为止都还是一款先进的物联网程序,值得大家深入研究,并做相应的测试。最后,不足之处,大家多多提出来一起讨论。

IoT设备程序开发及编译环境搭建初体验的更多相关文章

  1. Tiny4412 开发板 编译环境搭建【转】

    本文转载自:http://blog.csdn.net/beijiwei/article/details/51055369 版权声明:本文为博主原创文章,未经博主允许不得转载. /*********** ...

  2. Cocos2dx3.1-Android环境搭建初体验

    初玩Cocos2dx,多多包涵. 感觉版本号之间的差异比較大.相对前面的版本号来说.3.X更easy上手.更方便了. 一.安装python.我的python-2.7.3. 配置环境变量 系统变量里:在 ...

  3. windows下cocos2dx3.0开发环境及Android编译环境搭建

    cocos2dx更新到了3.x版本号,自己一直没有换,如今开发组要求统一换版本号,我就把搭建好开发环境的过程记录下来. 一.Windowns下开发环境搭建 1.  所需工具         1)coc ...

  4. ubuntu12.04下安卓编译环境搭建总结

    前言:      因为工作需要,经常要编译安卓下的动态库,公司有已经搭建好环境的服务器,但是第一自己想自己搭建一下了解一个整个过程,另外,公司的服务器也经常出现问 题,导致编译不了,所以就想自己搭建环 ...

  5. 使用Kotlin开发Android应用 - 环境搭建 (1)

    一. 在Android Studio上安装Kotlin插件 按快捷键Command+, -> 在Preferences界面找到Plugins -> 点击Browse repositorie ...

  6. C语言编程入门之--第二章编译环境搭建

    第二章 编译环境搭建 导读:C语言程序如何工作,首先需要编译链接成可执行文件,然后就可以运行在不同的环境中,这个“环境”的意思就是比如说,电脑,手机,路由器,蓝牙音箱等等智能设备中,其中编译器启到了关 ...

  7. openwrt(一):openwrt源码下载及编译环境搭建

    声明:从网上各位大神的博客学习,整理后记录,非原创. 注:请用非root用户来下载源码 导航: 1. openwrt编译环境搭建 2. openwrt源码下载 3. feeds更新 1. openwr ...

  8. Emscripten编译环境搭建--将C和C++编译成JS

    Emscripten编译环境搭建--将C和C++编译成JS 需求:linux环境下用js执行c.c++文件,使用emscirpten编译器 目标:搭建好Emscripten环境 环境:Ubuntu16 ...

  9. u-boot 移植(一)编译环境搭建

    u-boot 移植(一)编译环境搭建 soc:s3c2440 board:jz2440 uboot:u-boot-2016.11 toolchain:gcc-linaro-7.4.1-2019.02- ...

随机推荐

  1. [BZOJ] 2662: [BeiJing wc2012]冻结

    https://www.lydsy.com/JudgeOnline/problem.php?id=2662 第一次写分层图(捂脸) 一开始真的naive地建图了,T到飞起.. 可以省下建图的空间,直接 ...

  2. [LUOGU] P1024 选课

    题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学分,每门课有一 ...

  3. centos7系统优化

    优化说明: 一.关闭selinux 二.更改为阿里yum源 三.提权dm用户可以使用sudo 四.优化ssh远程登录配置 五.设置中文字符集 六.设置时间同步 七.历史记录数及登录超时环境变量设置 八 ...

  4. 【Linux】VirtualBox虚拟网络配置

    Host OS : Windows 10 Guest OS : CentOS 6.8 VirtualBox:5.1.18 网络连接方式: NAT 1.CentOS中使用DHCP [root@gouka ...

  5. 【mysql】linux, mac mysql数据库root 密码忘记修改

    首先关闭正在运行的mysqld进程 执行mysqld_safe --skips-grant-tables & 双击enter 键进入命令行模式 执行 mysql linux 系统执行:upda ...

  6. (转)Duplicate Symbol链接错的原因总结和解决方法

    duplicate symbol是一种常见的链接错误,不像编译错误那样可以直接定位到问题的所在.但是经过一段时间的总结,发现这种错误总是有一些规律可以找的.例如,我们有如下的最简单的两个类代码: // ...

  7. Knockout v3.4.0 中文版教程-4-通过监控数组工作

    2.通过监控数组工作 1. 监控数组 如果你想检测或者响应一个对象的改变,你用observables.如果你想检测和响应一个集合的改变,使用observableArray.这个在很多情况下都非常有用, ...

  8. Java-确定字符串是否包含子字符串

    利用String自带的函数和正则来实现 package com.tj; public class MyClass implements Cloneable { public static void m ...

  9. 【02】markdown工具推荐

    [02]信息 Windows 平台 MarkdownPad MarkPad Linux 平台 ReText Mac 平台 Mou 最新版Mac OS下Mou已经无法使用了.这里推荐一个跨平台的编辑器  ...

  10. BNUOJ 6727 Bone Collector

    Bone Collector Time Limit: 1000ms Memory Limit: 32768KB   This problem will be judged on HDU. Origin ...