Binwalk介绍

Binwalk是一个固件的分析工具,旨在协助研究人员对固件非分析,提取及逆向工程用处。简单易用,完全自动化脚本,并通过自定义签名,提取规则和插件模块,还重要一点的是可以轻松地扩展。

最简单使用方法很直接; 提供固件文件路径和文件名即可:

$ binwalk firmware.bin

如果单单基于签名匹配的话有些文件类型是无法准确的识别到.

所以检测这些类型签名的文件需要特定插件的配合(通过插件来实现),如果不启用将大大增加扫描时间和占用大量内存

例如,扫描zlib压缩包的时候,得需使用zlib的插件:

$ binwalk --enable-plugin=zlib firmware.bin  

过滤功能

包含过滤器

-y选项仅包括指定的搜索文本匹配的结果。搜索字符串(文本)应当使用小写,包括正则表达式,并且可以指定多个-Y选项。 下列搜索结果只包含文本“文件系统”中搜索出来的结果。(也就说使用了 filesystem的Y选项的话结果中只包含文本字符结果)

$ binwalk -y filesystem firmware.bin

排除过滤器

-x选项是排除搜索结果中的指定符合规则的文本(或者字符串)。 搜索字符串(文本)应当使用小写,包括正则表达式,并且可以指定多个-X选项。 下列例子中搜索时将排除“jffs2”字符串:

$ binwalk -x jffs2 firmware.bin

高级过滤器

可以将包含和排除过滤两功能结合使用:

例子:下列搜索结果即包含文本“文件系统”中搜索出来的结果又排除jffs2字符串结果。

$ binwalk -y filesystem -x jffs2 firmware.bin

提取文件

手动提取文件

Binwalk可以提取数据,发现在目标文件中指定提取规则使用 – dd选项。用于提取指定规则的格式是:

<type>:<extension>[:<command>]

从哪里提取:

  • type 是签名中描述的小写字符串(支持正则表达式)
  • extension 是将数据保存到磁盘时使用的文件扩展名
  • command 是当数据已保存到磁盘后可选的命令执行语句

默认情况下,除非备用文件名中指定签名情况意外,文件名是十六进制偏移签名被发现。

下面的例子演示如何使用 – dd选项,将提取任何包含字符串’zip归档文件扩展名的’zip’的签名,并随后执行“解压缩”命令指定提取规则。可指定多个–dd选项:

$ binwalk --dd='zip archive:zip:unzip %e' firmware.bin

要注意占位符的使用 如:“%e’”: 此占位符将被替换为所提取的文件的相对路径时,将执行命令。

自动化(自动)提取

-e选项可以用来执行自动数据提取的基础上提取规则中指定的默认的extract.conf文件:

$ binwalk -e firmware.bin

- 提取选项的工作原理相同,除了你必须指定一个自定义提取规则文件的路径:

$ binwalk -e firmware.bin$ binwalk --extract=./my_extract.conf firmware.bin

递归提取

很多次,提取的数据可能需要进一步binwalk的分析。为了帮助自动化,binwalk可以递归扫描提取的数据和由外部减压或提取工具创建的文件指定-M选项和-e选项一起使用:

$ binwalk -Me firmware.bin

请注意,-M选项将提取的文件8层递归,且忽略外部提取工具可以创建任何目录。

操作码

Binwalk中使用A选项时可以扫描通常与功能相关联的各种框架操作码
$ binwalk -A firmware.bin

转换功能

binwalk使用 -C 选项来完成多个不用文件类型转换; 通常最好是使用-l选项来限制这种扫描:

$ binwalk -l 32 -C firmware.bin

比较功能

Binwalk可以生成一个或多个文件的十六进制转储和差别。在文件当中相同字节的是绿色显示,不同的是红色显示,蓝色表示只是有些文件当中的不同部分。

$ binwalk -W firmware1.bin firmware2.bin firmware3.bin

字符串

除了上述基于签名的扫描,binwalk可以对目标文件进行一个智能的字符串分析,虽然不是完全替代的Unix strings一样强大功能,但是binwalk通过应用一些非常简单的验证规则筛选出最“垃圾”的字符串,和忽略一些无顺序的数据块

$ binwalk -S firmware.bin

熵分析

Binwalk 对目标文件可以进行熵分析目标文件,生成原始的熵数据和/或积表示的曲线图的数据:

$ binwalk -E firmware.bin

签名或字符串的分析,以及可以结合熵分析。例如,下面的命令将扫描目标文件,可执行代码和熵图上叠加的扫描结果:

$ binwalk -AE firmware.bin

启发(或者引导式)

Binwalk的启发式扫描作为加密或压缩的高熵的数据块进行分类的尝试。虽然这种类型的扫描是不是100%准确。

在一般情况下,压缩的数据或已使用弱加密算法将有一个整体的高熵的加密,但小有出现断块低熵的数据。已具有较强的熵算法加密的数据不会有这些小块的低熵的数据:

$ binwalk --heuristic firmware.binDECIMAL         HEX             HEURISTIC ANALYSIS
-------------------------------------------------------------------------------------------------------------------
0               0x0             Compressed / moderate entropy data, 245 low entropy blocks
283648          0x45400         Compressed / moderate entropy data, 219 low entropy blocks
360448          0x58000         Compressed / moderate entropy data, 160 low entropy blocks
371712          0x5AC00         Compressed / moderate entropy data, 139 low entropy blocks
381952          0x5D400         Compressed / moderate entropy data, 57 low entropy blocks
384000          0x5DC00         Compressed / moderate entropy data, 40 low entropy blocks

请注意,此扫描需要两个周期(一个用于初始熵分析,以及第二更紧密的启发式分析),这需要一定时间来完成的,尤其是目标文件特别打的话花费更多的时间。

插件功能

插件列表

使用 –list-plugins选项能获得可使用的binwalk插件的名称和属性列表:

$ binwalk --list-plugins

启用插件功能

一些插件在默认情况下是禁用的。这些插件可以启用时用该选项 –enable-plugin选项

$ binwalk --enable-plugin=foo firmware.bin

禁用插件功能

一些插件在默认情况下是启用的。这些插件可以禁用时用该选项 –diable-plugin选项

$ binwalk --disable-plugin=foo firmware.bin

或者,所有的插件可以禁用 ,使用该选项:–disable-plugins 选项:

$ binwalk --disable-plugins firmware.bin

日志记录功能

Binwalk日志输出通常是很大,所以它往往是文件保存方式记录

-f选项允许你指定一个日志文件。需要注意的是,如果没有指定-Q选项的话结果会打印到stdout以及日志文件。

$ binwalk -f binwalk.log firmware.bin

日志文件可以CSV格式保存

$ binwalk -f binwalk.log --csv firmware.bin

升级功能

通过 magic files和配置文件,加上使用 -u选项binwalk依靠svn check-in功能轻松升级到最新版本(需要root权限来更新)

$ sudo binwalk -u

如果使用http代理功能,在环境变量中设置http_proxy。

下载地址:git clone https://github.com/devttys0/binwalk.git

Binwalk固件分析利器相关推荐

  1. 固件分析工具Binwalk

    固件分析工具Binwalk 固件是保存在嵌入式设备存储器的程序.它负责设备运行和功能,如路由器等设备.通过分析固件文件,可以了解设备的工作方式,并且确认是否存在漏洞.Binwalk是Kali Linu ...

  2. NetGear 夜鹰 RAX40V2 设备与固件分析

    前言 NetGear 厂商的路由器设备中,拆解开经常会带有UART 调试串口,并且以往的NetGear 设备UART调试口往往只需要正确的检测出UART引脚的类型,设置波特率为115200,然后直接用 ...

  3. OWASP物联网固件分析项目

    帮忙多点点文章末右下角的"好看"支持下,也可以将本文分享到朋友圈或你身边的朋友,谢谢 原文:https://www.owasp.org/index.php/OWASP_Intern ...

  4. 路由器逆向分析------路由器固件分析和动态调试环境搭建简述

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/70140865 01.路由器固件分析和动态调试环境搭建简述的原文 <Emula ...

  5. 硬件黑客破解之固件分析

    注1:本文为"湖南底网安全信息技术有限公司"安全团队原创文章(官网:www.bttmsec.com,聚焦车联网安全/物联网安全/工控安全),转发请注明出处 注2:该文已同步在今日头 ...

  6. vxworks固件分析

    前言 vxworks 的固件分析流程 1.用binwalk查看固件基本信息并解压固件 2.获取固件相关信息, cpu架构,大小端 3.确定固件的加载地址 4.用IDA加载固件,并修复符号表 5. 分析 ...

  7. linux文本分析利器awk

    转 快速理解linux文本分析利器awk 原文链接 杜亦舒 性能与架构 awk是什么 如果工作中需要操作linux比较多,那么awk是非常值得学习的 awk是一个极其强大的文本分析工具,把文件逐行的读 ...

  8. 日志分析利器splunk的搭建、使用、破解

    2019独角兽企业重金招聘Python工程师标准>>> 日志分析利器splunk的搭建.使用.破解博主对splunk的了解不多,博主的使用目的是为了同步,分析日志.当初的搭建也是为了 ...

  9. jmap, jhat, jvisualvm:java堆内存对象分析利器

    转载自 jmap, jhat, jvisualvm:java堆内存对象分析利器 jmap -help查看命令用法. jmap -heap <pid> 查看堆使用情况. jmap -dump ...

最新文章

  1. 高并发系统处理之——限流
  2. 软件推荐-有道超级计算器
  3. Angular最新教程-第六节编写响应式导航栏
  4. OpenCV_02 图像的基本操作:图像IO+绘制图形+像素点+属性+图像通道+色彩空间的改变
  5. 快速了解Java集合框架
  6. html5链接mvc,LinkExtensions.ActionLink 方法 (System.Web.Mvc.Html) | Microsoft Docs
  7. 【Flink】Flink 1.9 升级 1.12.4 本地可以运行 打包后 集群运行就找不到类 ClassNotFoundException
  8. 腾讯面试官这样问我二叉树,我刚好都会 | 原力计划
  9. 《流畅的Python第二版》读书笔记——Python数据模型
  10. 计算机英语词汇输入,常用计算机英语词汇:BIOS
  11. 对称密钥和非对称密钥有什么区别,区别在哪里
  12. 线程优先级的设定pthread_setschedparam
  13. “花瓣网”首页静态页面(仅供参考)
  14. 关于sklearn下class_weight参数
  15. Double 保留至小数点后两位
  16. 2019肖秀荣考研政治3件套
  17. 国内ce认证机构有哪些 国内十大CE认证机构排名 做ce认证的公司推荐
  18. Linux-Systemd服务配置文件详解
  19. Python Twisted系列教程7:小插曲,Deferred
  20. STM32F0 ADC学习

热门文章

  1. vue 删除数组元素
  2. Android float 四舍五入没有入的一个问题
  3. iTerm2配置自动通过堡垒机登录服务器
  4. MariaDB Galera 集群安装配置
  5. activiti实战系列 并行网关(parallelGateWay)
  6. 五、MDT 2013 Update 1批量部署-WINDOWS 7样本机镜像部署
  7. Report Studio值提示通过prompt宏函数给sql查询传参
  8. 一个Portal处理流程
  9. SQLServer性能优化一则小实例(2010-07-21)
  10. SVN 版本服务器搭配全过程详解(含服务端、客户端)