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. python之Counter类:计算序列中出现次数最多的元素

    Counter类:计算序列中出现次数最多的元素 from collections import Counter c = Counter('abcdefaddffccef') print('完整的Cou ...

  2. BZOJ1124 POI2008枪战Maf(环套树+贪心)

    每个点出度都为1,可以发现这张图其实是个环套树森林,树中儿子指向父亲,环上边同向. 首先自环肯定是没救的,先抬出去. 要使死亡人数最多的话,显然若一个点入度为0其不会死亡,而一个孤立的环至少会留下一个 ...

  3. itexpdf同一个段落不同文字,如何设置不同的格式

    Java使用itexpdf生成PDF,正常情况下,新建一个段落Paragraph,然后可以给段落添加一个格式BaseFont Paragraph paragraphBlue = new Paragra ...

  4. 详解基于朴素贝叶斯的情感分析及 Python 实现

    相对于「 基于词典的分析 」,「 基于机器学习 」的就不需要大量标注的词典,但是需要大量标记的数据,比如: 还是下面这句话,如果它的标签是: 服务质量 - 中 (共有三个级别,好.中.差) ╮(╯-╰ ...

  5. [算法进阶0x10]基本数据结构A作业总结

    在线题目\(oj\)评测地址:https://xoj.red/contests/show/1237 T1-Editor(hdu4699) 题目描述 维护一个整数序列的编辑器,有以下5种操作,操作总数不 ...

  6. 【转】CPU上下文切换的次数和时间(context switch)

    http://iamzhongyong.iteye.com/blog/1895728 什么是CPU上下文切换? 现在linux是大多基于抢占式,CPU给每个任务一定的服务时间,当时间片轮转的时候,需要 ...

  7. Centos6.5的MySQL5.7.15二进制源码单机版安装

    0.说明 最近在CentOS6.5上安装mysql,想要知道具体的安装过程,不想要通过yum直接一键安装,折腾一番,但是总遇到些麻烦.于是将mysql文档中的关于如何在Linux上安装mysql的部分 ...

  8. Linux下将使用rm删除的文件显示在回收站中

    人难免会失误,出现一些问题,在删除文件的时候使用rm,删除之后就后悔了.因为rm命令删除的文件是不进入回收站的,这使得恢复起来很困难.解决这一难题,可以使用python编写的trash-cli( ht ...

  9. CF603E Pastoral Oddities

    CF603E Pastoral Oddities 度数不好处理.转化题意:不存在连通块为奇数时候就成功了(自底向上调整法证明) 暴力:从小到大排序加入.并查集维护.全局变量记录奇数连通块的个数 答案单 ...

  10. A1070. Mooncake

    Mooncake is a Chinese bakery product traditionally eaten during the Mid-Autumn Festival. Many types ...