Binwalk是路由器固件分析的必备工具,该工具最大的优点就是可以自动完成指定文件的扫描,智能发掘潜藏在文件中所有可疑的文件类型及文件系统。

1、Binwalk和libmagic

  Binwalk的扫描实现方法,就是把重复而复杂的手工分析方法通过程序实现。但是Binwalk并不是简单地使用file命令识别文件类型,原因在于file命令占用了太多的磁盘来读写I/O,效率太低,而且file命令识别文件类型是从文件的第一个字节开始,且只能把磁盘上的一个文件识别成一种文件格式,所以会占用很多磁盘空间来保存文件,此外,使用file命令,就需要逐字节把路由器文件分割成多个文件,文件的I/O也必然会极大影响扫描效率。

  libmagic动态库为文件扫描提供了更好的解决方案。识别libmagic库函数,可以直接扫描文件的内存镜像,从而提高扫描效率。libmagic库识别文件系统和文件类型依然依赖magic签名文件。

  在binwalk中,主要使用来自libmagic库的4个函数,分别为magic_open、magic_close、magic_buffer、magic_load。

  1. magic_t magic_open(int flags); -----> 创建并返回一个magic_cookie指针。
  2. void magic_close(magic_t cookie); -----> 关闭magic签名数据库并释放所有使用过的资源。
  3. const char *magic_buffer(magic_t cookie, const void *buffer, size_t len); ------->   读取buffer中指定长度的数据并与magic签名数据库进行对比,返回对比结果描述。
  4. int magic_load(magic_t cookie, const char *filename); --------->  从filename指定文件加载magic签名数据库,binwalk把多个magic签名文件组合到一个临时文件中用于加载。

  binwalk是使用python编写的,它通过python调用libmagic库中的导出函数并使用面向对象的方式进行封装,封装文件在binwalk/src/binwalk/core/magic.py中。Magic类包含两个成员函数:

  1. Magic.buffer(data)函数,读取内存缓冲区数据,判断是否符合某一文件类型。
  2. Magic.close()函数:关闭magic签名数据库,释放所有使用的资源。

2、Binwalk的提取与分析

2.1、固件扫描

  命令:binwalk firmware.bin      ----->   通过扫描能够智能地发现目标文件中包含的所有可识别的文件类型。

2.2、提取文件

  命令:binwalk -e firmware.bin ------>   选项“-e"和“--extract"用于按照定义的配置文件中的提取方法从固件中提取探测到的文件系统。

  命令:binwalk -Me firmware.bin -----> 选项“-M"和“--matryoshka"用于根据magic签名扫描结果进行递归提取,仅对"-e"和“--dd"选项有效。

  命令:binwalk -Me -d 5 firmware.bin ----> 选项“-d"和“--depth=<int>"用于限制递归提取深度,默认深度为8,仅当“-M"选项存在时有效。

2.3、显示完整的扫描结果

  命令:binwalk -I firmware.bin ------>   选项"-I"和“--invalid"用于显示扫描的所有结果(即使是扫描过程中被定义为“invalid“的项)。

      当我们认为binwalk错把有效的文件当成无效文件时,可以通过该选项来检查。

2.4、指令系统分析

  选项“A"和“--opcodes"用于扫描指定文件中通用CPU架构的可执行代码。

  由于某些操作码签名比较短,所以比较容易造成误判。如果我们需要确定一个可执行文件的CPU架构,可以使用该命令。

  命令:命令:binwalk -A 70|more

  使用Binwalk扫描从firmware.bin中提取的文件的文件“70”中的可执行代码,在该文件中可以发现CPU的架构(大端或者小端也会给出)。

自动提取文件系统---binwalk(一)的更多相关文章

  1. OWASP固件安全性测试指南

    OWASP固件安全性测试指南 固件安全评估,英文名称 firmware security testing methodology 简称 FSTM.该指导方法主要是为了安全研究人员.软件开发人员.顾问. ...

  2. iot漏洞入门

    路由器漏洞入门 下载项目https://github.com/praetorian-inc/DVRF 安装quem sudo apt install qemu-user-static 安装gdb-mu ...

  3. binwalk在Windows10和kali_Linux下的安装及使用教程

    (一)binwalk简介    binwalk 是用于搜索给定二进制镜像文件以获取嵌入的文件和代码的工具.  具体来说,binwalk是一个固件的分析工具,旨在协助研究人员对固件非分析,提取及逆向工程 ...

  4. 隐写术工具之binwalk

    0x00Binwalk介绍 Binwalk是用于搜索给定二进制镜像文件以获取嵌入的文件和代码的工具. 具体来说,它被设计用于识别嵌入固件镜像内的文件和代码. Binwalk使用libmagic库,因此 ...

  5. Binwalk:后门(固件)分析利器

    http://blog.csdn.net/testing_is_believing/article/details/14091179 Binwalk介绍 Binwalk是一个固件的分析工具,旨在协助研 ...

  6. ctf-工具-binwalk

    binwalk在玩杂项时是个不可缺的工具.1.最简单的,在玩隐写时,首先可以用它来找到其中的字符串例如:在铁人三项,东北赛区个人赛中,有一道题它直接给了一个文件,没有后缀,不知道是什么文件先binwa ...

  7. 路由器逆向分析------binwalk工具的详细使用说明

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/66971242 一.binwalk工具的基本用法介绍 1.获取帮助信息 $ binw ...

  8. 路由器逆向分析------binwalk工具的安装

    本文博客链接:http://blog.csdn.net/qq1084283172/article/details/65441110 一.binwalk工具运行支持的平台 binwalk工具安装支持的平 ...

  9. .NET Core的文件系统[5]:扩展文件系统构建一个简易版“云盘”

    FileProvider构建了一个抽象文件系统,作为它的两个具体实现,PhysicalFileProvider和EmbeddedFileProvider则分别为我们构建了一个物理文件系统和程序集内嵌文 ...

随机推荐

  1. mouseover与mouseenter,mouseout与mouseleave的区别

    mouseover事件:不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件,对应mouseout事件: mouseenter事件:只有在鼠标指针穿过被选元素时,才会触发 mouse ...

  2. python自动化运维笔记3 —— dns处理模块dnspython

    1.3 DNS处理模块 dnspython是python实现的一个DNS工具包,它支持几乎所有的记录类型,可以用于查询.传输并动态更新ZONE信息,同时支持TSIG(事物签名)验证消息和EDNS0(扩 ...

  3. 今天看到了一篇文档 app 测试内容记录下来

    1 APP测试基本流程 1.1流程图 1.2测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日),根据项目情况以及版本质量可适当缩短或延长测试时间.正式测试前先向 ...

  4. Java之Date Time API (Java 8 新特性)

    Java 8 – Date Time API Java 8 comes with a much improved and much required change in the way date an ...

  5. BZOJ4196[Noi2015]软件包管理器——树链剖分+线段树

    题目描述 Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖(即下载安装这个 ...

  6. HDU4403-模拟、数学

    一道很难的奥数题,给出一个数字串,插入加号和等号使之成立.求成立的算式数. 我的做法是,先分成两段,中间插入等号 ,再分别求出左右两边可能的值和个数,然后对比,把值相等的情况乘起来,加到最终结果上. ...

  7. WordPress发送注册用户设置密码邮件提示:您的密码重设链接无效,请在下方请求新链接

    1.修改WP根目录下的 wp-login.php文件将 $message .= '<' . network_site_url("wp-login.php?action=rp&k ...

  8. Java 8新特性之 Base64(八恶人-7)

    "General" 我是个将军 “ You, sir a hyena. I hava no wish to speak to you.”  “你就是一个土狗,你不配跟我说话” 一. ...

  9. day10 局部变量 全局变量 作用域前奏

    规则命名以及基本介绍 name="LHF" # 顶头写的全局都可以调用的就是全局变量,命名规则要求大写全局变量 def chang_name(): # global name # ...

  10. Java新AIO/NIO2:AsynchronousServerSocketChannel和AsynchronousSocketChannel简单服务器-客户端

    Java新AIO/NIO2:AsynchronousServerSocketChannel和AsynchronousSocketChannel简单服务器-客户端用AsynchronousServerS ...