IOT环境搭建

最近开始学习IOT技术,不得不说这个环境搭建真的是要人老命,一点一点说吧

binwalk

首先是binwalk,这是一个非常好用的固件解压软件,输入以下指令下载

git clone https://github.com/ReFirmLabs/binwalk.git
cd binwalk
python setup.py install

或者

sudo apt-get update
sudo apt-get install binwalk

binwalk主要功能如下

1.扫描选项: 

-B,– signature 扫描目标文件的常见文件签名 

-R,–raw = <str>扫描目标文件的指定字符序列 

-A,–opcodes扫描目标文件中常见可执行代码 

-m,–magic = <file> 指定要使用的自定义魔数签名文件 

-b,–dumb 禁用智能签名关键字 

-I,–invalid显示结果标记为无效 

-x,–exclude = <str>排除与<str>匹配的结果 

-y,–include = <str>只显示匹配<str>的结果 

2.提取选项:

-e,–extract自动提取已知的文件类型

-D,–dd = <type:ext:cmd>提取<type>签名,为文件扩展名为<ext>,然后执行<cmd>

-M,–matryoshka 递归扫描提取的文件

-d,–depth = <int>限制matryoshka递归深度(默认值:8级深)

-C,–directory = <str>将文件/文件夹提取到自定义目录(默认值:当前工作目录)

-j,–size = <int> 限制每个提取的文件的大小

-n,–count = <int>限制提取文件的数量

-r,–rm 提取后删除刻录文件

-z,–carve从文件中读取数据,但不执行提取实用程序

3.熵分析选项:

-E,–entropy 计算文件熵

-F,–fast计算更快,但不太详细的熵分析

-J,–save将熵图保存为PNG图像

-Q,–nlegend 从熵图图中省略图例

-N,–nplot 不生成熵图

-H,–high = <float>设置上升沿熵触发阈值(默认值:0.95)

-L,–low = <float> 设置下降沿熵触发阈值(默认值:0.85)

4.原始压缩选项:

-X, –deflate扫描原始deflate压缩流

-Z, –lzma 扫描原始LZMA压缩流

-P, –partial浅度扫描,速度更快

-S, –stop 找到第一个结果后停止扫描

5.二进制差异选项:

-W,–hexdump 执行文件或文件的hexdump/diff

-G,–green 只显示包含所有文件中相同字节的行

-i,–red 仅显示包含所有文件中不同字节的行

-U,–blue只显示一些文件中包含不同字节的行

-w,–terse 只显示第一个文件的十六进制转储

6.一般选项:

-l,–length = <int>要扫描的字节数

-o,–offset = <int>以此偏移开始扫描

-O,–base = <int>向所有打印的偏移量添加基址

-K,–block = <int> 设置文件块大小

-g,–swap = <int>扫描前每n个字节反转一次

-f,–log = <file>将结果记录到文件

-c,–csv 将结果记录到CSV格式的文件中

-t,–term格式化输出以适合终端窗口

-q,–quiet 禁止输出

-v,–verbose 详细输出

-h,–help显示帮助

-a,–finclude = <str>只扫描名称与此正则表达式匹配的文件

-p,–fexclude = <str>不扫描名称与此正则表达式匹配的文件

-s,–status = <int>启用指定端口上的状态服务器

最常用的还是binwalk -Me xxx.bin。该命令如果成功执行那么会生成一个对应的bin.extracted

实际使用中发现一个问题:使用binwalk -Me 选项时,解压出来的squashfs-root路径下是空的,什么也没有,查看一下binwalk的报错发现

WARNING: Extractor.execute failed to run external extractor ‘sasquatch -p 1 -le -d ‘squashfs-root’ ‘%e”: [Errno 2] No such file or directory: ‘sasquatch’, ‘sasquatch -p 1 -le -d ‘squashfs-root’ ‘%e” might not be installed correctly WARNING: Extractor.execute failed to run external extractor ‘sasquatch -p 1 -be -d ‘squashfs-root’ ‘%e”: [Errno 2] No such file or directory: ‘sasquatch’, ‘sasquatch -p 1 -be -d ‘squashfs-root’ ‘%e” might not be installed correctly 970489 0xECEF9 Squashfs filesystem, big endian, lzma signature, version 3.0, size: 2636036 bytes, 193 inodes, blocksize: 65536 bytes, created: 2012-07-21 02:15:38

究其原因就是binwalk没有sasquatch插件,不过sasquatch插件存在很严重的历史遗留问题,现在已经不再维护,所以网上很多的解决方法都不好用,我本人用的是Ubuntu-20.04,最终在github上找到解决方案

git clone --quiet --depth 1 --branch "master" https://github.com/devttys0/sasquatch
cd sasquatch
wget https://github.com/devttys0/sasquatch/pull/51.patch && patch -p1 <51.patch
sudo ./build.sh

运行完之后binwalk就可以正常解压出东西了

qemu

qemu,简单理解,是一个模拟器,可以用于模拟不同架构的程序的运行,他比VMware要轻量化很多,也仅仅是对一个程序的运行环境进行模拟,不需要像docker那样模拟那么多东西,所以适合运行通常为ARM或者MIPS架构的路由器固件,它的安装方法如下

sudo apt-get install qemu 
sudo apt-get install qemu-user-static
sudo apt-get install qemu-system

使用方法如下

具体qemu模拟器的选择要根据文件的实际架构决定

Firmae

由于qemu只能模拟架构,而真正的物联网设备还要涉及到网络的一些配置等等各种复杂的配置,所以Firmae就是一个集成的环境模拟工具,其实现也是依靠qemu和binwalk,不过好像他在运行自己的download.sh文件的时候自动下载了这俩,所以貌似可以不用提前下载,反正我是之前提前下载了

安装方法如下:

git clone --recursive https://github.com/pr0v3rbs/FirmAE
./download.sh
./install.sh

用法如下:

 ./init.sh
sudo ./ run . sh - c <厂商品牌> <固件名称(.bin结尾)>  #checksec模式,检查是否联通
sudo ./ run . sh - a <厂商品牌> <固件名称(.bin结尾)>  #analysis模式
sudo ./ run . sh - r <厂商品牌> <固件名称(.bin结尾)>  #run模式
sudo ./ run . sh - d <厂商品牌> <固件名称(.bin结尾)>  #debug模式
sudo ./ run . sh - b <厂商品牌> <固件名称(.bin结尾)>  #内核级引导调试

具体用法我是参照FirmAE 模拟固件-CSDN博客看的,大家可以自行跳转

要注意的就是Firmae在初次启动的时候会很慢,需要等比较长的一段时间,还有就是最好不要用wsl,我成功模拟但是实际访问不了网页,具体原因貌似是跟wsl的网络配置有关系,我不是特别懂,等弄懂了把这篇文章修改修改

gdbsever

由于你自行搭建的路由器环境是虚拟的,所以你无法和正常的程序一样运行gdb去调试这个程序,因此我们需要利用gdbsever的方式进行远程调试,一般来说linux自带了gdbsever,如果没带的话到网上去找一下资料安装吧,后续我会单独写一篇关于gdbsever远程调试的文章,等到那时我再来补充完整这段

gdbmultiarch

由于普通的gdb一般只支持x86,x64架构,所以无法调试ARM架构和MIPS架构的程序,所以需要利用gdb-multiarch来进行其他架构的调试

安装方法如下

sudo apt-get install gdb-multiarch

IDA

这个就不多说了,逆向分析必备,不过8.3版本没有ARM架构和MIPS架构的反编译器,查看不了c语言伪代码,所以只能看汇编,因此我特地升级到了9.0版本(真香~)

shambles

这是一款专门用于IOT分析的软件,可能大家很多人都没听说过,下面简单来介绍一下

图标长这样子,现在支持的架构是arm/mips/ppc/risc-v,并不支持x86,x64

如果只是那他分析某一个二进制程序属实是大材小用了,所以这里我们不介绍这个功能了,我们重点介绍一下他直接分析固件的能力

进来以后的初始界面长这样,左侧ELF是分析本地程序的不多介绍,重点看“固件”这里,想要分析一个固件,我们首先需要将本地的固件上传它的云端服务器,利用云端的算力去分析这个固件

点击这里,进去上传界面,上传想要的固件

曾将上传完过的固件都会显示在旁边

点击“浏览所有”按键,可以查看历史所有上传过的固件

我们随便打开一个固件,在这里我选择的是DIR830LA1那个固件,也就是上张图里的第一个

双击打开,需要加载一会,耐心等待~

打开以后的首页显示了这个固件的很多信息,我们先关注右侧这个“漏洞”按钮,单击打开

我们可以看到shambles非常强大的把整个固件可能出现的各种漏洞点都列了出来,包括可能存在栈溢出的漏洞,或者命令执行的漏洞等等,我们双击code下代码,即可直接实现跳转

进到这个程序之后还会发现shambles同时会把这个文件的可能漏洞点也列出来,实在是太方便了

一些快捷键和IDA基本上都是相同的,这里就不多说了,tab可以在汇编和伪代码之间切换等等……

shambles的搜索功能也十分强大

可以再整个固件范围内搜索,包括程序名,字符串等等,并且也都支持双击跳转功能

真的是肥肠方便啊

接下来重点说一下它的动态调试功能,前面说过,利用qemu,包括Firmae等工具进行模拟,是一件非常麻烦的事情,很多时候成功率也比较低,而shambles也为我们提供了模拟固件的功能,他的模拟程序运行在它自己的云端上,要想使用shambles的动态调试功能,我们要先点击这个蓝色的朝下的小箭头

点击之后他会显示在连接云端中,这个过程有一点耗时,耐心等待~

连接成功后,这个箭头会变绿

由于我之前已经连接过,所以直接左侧展示出了固件的目录,如果之前没连接过,会有一个“同步模拟器”选项,点击后等一会就进入这个界面了

我们随便打开一个文件,在动态调试模式下打开的文件头顶上是绿颜色的

和之前那个“pppd”文件对比一下就会发现,这个绿色的文件已经有了下断点的功能,单击一下这个白色的圆,它会变成橙色,代表断点已经下好了

不过这个断点是在汇编层面下的,不是高级语言层面

下好断点后,点击开始调试即可

点击右侧虚拟机按钮

点击右上角+号,即可创建新的虚拟机,

这里我们输入虚拟机名称,选择文件系统

创建完毕后,在右侧出现已经创建好的虚拟机,这里我命名为DIR830L,点击运行

虚拟机已经启动,我们点击右侧的ssh连接按钮,即可远程连接模拟的固件运行系统

等待他启动一会,我们发现80端口已经打开,点击配置按钮

发现80端口对应的转发端口是10020

再点击本地转发按钮,点击添加转发

将本地端口设置为任意可访问的端口,这里我设置成1024,外部端口就是刚才展示的10020端口,配置好转发之后,点击三角按钮,运行

然后我们在本地浏览器输入localhost:1024或者127.0.0.1:1024,即可成功访问模拟的路由器web端

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇