CN111782511B - 固件文件的分析方法、设备及存储介质 - Google Patents
固件文件的分析方法、设备及存储介质 Download PDFInfo
- Publication number
- CN111782511B CN111782511B CN202010553678.8A CN202010553678A CN111782511B CN 111782511 B CN111782511 B CN 111782511B CN 202010553678 A CN202010553678 A CN 202010553678A CN 111782511 B CN111782511 B CN 111782511B
- Authority
- CN
- China
- Prior art keywords
- mirror image
- file
- file system
- system mirror
- root
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开提供一种固件文件的分析方法、设备及存储介质,涉及计算机技术领域,采用插件式思维实现对固件文件静态分析的通用分析,降低成本,提高效率。具体技术方案为:获取固件文件;调用识别插件对固件文件进行识别,从固件文件中提取根文件系统镜像,并获取根文件系统镜像的文件类型;在根文件系统镜像的文件类型为可解包格式时,调用与根文件系统镜像的文件类型对应的解包插件对根文件系统镜像进行解包,并调用与根文件系统镜像的文件类型对应的分析插件对已解包的根文件系统镜像进行分析;在根文件系统镜像的文件类型为可分析的文件类型时,调用与根文件系统镜像的文件类型对应的分析插件对根文件系统镜像进行分析。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及一种固件文件的分析方法及装置。
背景技术
固件是一种烧录在硬件设备中的软件程序,担任着一个系统最基础最底层的工作,固件通常存储于硬件设备的闪存或只读存储器中,可以被擦除和重写。随着计算机功能需求的不断变化或者固件存在缺陷需要修复等原因,需对固件进行升级、更新或重写,此时,就需要找到厂商拿到固件对应的文件,然后将该固件文件刷入硬件设备中。而对刷入文件的分析,就是对固件的分析。如果通过研究固件发现其中的漏洞,那么烧录了此固件的产品也就存在对应的漏洞,就对使用此产品的用户造成了很大的安全隐患,因此,在刷入固件之前,需对固件进行分析。但是现有的固件分析工具仅能识别一种或几种类型的固件,没有一种对各种类型固件的通用分析方法。
发明内容
本公开实施例提供一种固件文件的分析方法、设备及存储介质,采用插件式思维实现对固件文件静态分析的通用分析,降低成本,提高效率。所述技术方案如下:
根据本公开实施例的第一方面,提供一种固件文件的分析方法,该方法包括:
获取固件文件;
调用识别插件对固件文件进行识别,从固件文件中提取根文件系统镜像,并获取根文件系统镜像的文件类型;
在根文件系统镜像的文件类型为可解包格式时,调用与根文件系统镜像的文件类型对应的解包插件对根文件系统镜像进行解包,并调用与根文件系统镜像的文件类型对应的分析插件对已解包的根文件系统镜像进行分析;
在根文件系统镜像的文件类型为可分析的文件类型时,调用与根文件系统镜像的文件类型对应的分析插件对根文件系统镜像进行分析。
本公开实施例采用插件式思维实现对固件文件的静态识别,解包,分析,具备较高的通用性,分析全程无需硬件设备,可有效减少用户的初始投资,降低成本,提高效率。
在一个实施例中,调用至少一个识别插件对固件文件进行识别,从固件文件中提取根文件系统镜像,并获取根文件系统镜像的文件类型包括:
调用第一识别插件对固件文件的头部信息进行识别,得到识别结果;
在识别结果指示固件文件的头部信息包含根文件系统镜像的位置信息以及根文件系统镜像的魔数magic number时,根据根文件系统镜像的位置信息从固件文件中提取根文件系统镜像,并根据根文件系统镜像的magic number确定根文件系统镜像的文件类型。
在一个实施例中,该方法还包括:
在识别结果指示固件文件的头部信息仅包含根文件系统镜像的位置信息时,根据根文件系统镜像的位置信息从固件文件中提取根文件系统镜像;
调用第一识别插件对根文件系统镜像的文件头magic number进行识别,获取根文件系统镜像的文件类型。
在一个实施例中,该方法还包括:
在识别结果指示固件文件的头部信息仅包含根文件系统镜像的magic number时,根据根文件系统镜像的magic number确定根文件系统镜像的文件类型;
调用第二识别插件按照与根文件系统镜像的文件类型对应扫描规则对固件文件进行识别,获取根文件系统镜像的文件格式特征码,文件格式特征码包括开始特征码和结束特征码;
根据根文件系统镜像的文件格式特征码,确定根文件系统镜像在固件文件中的起始位置,并根据起始位置提取根文件系统镜像。
在一个实施例中,该方法还包括:
在识别结果指示固件文件的头部信息未包含根文件系统镜像的文件类型及根文件系统镜像的位置信息时,调用第二识别插件利用扫描规则列表中的扫描规则依次对固件文件进行识别,直至获取根文件系统镜像的文件格式特征码,文件格式特征码包括开始特征码和结束特征码;
根据文件格式特征码,确定根文件系统镜像在固件文件中的起始位置,并根据起始位置提取根文件系统镜像;
将获取到根文件系统镜像的文件格式特征码的扫描规则对应的文件类型确定为根文件系统镜像的文件类型。
在一个实施例中,获取根文件系统镜像的文件格式特征码包括:
在第二识别插件对固件文件识别得到根文件系统镜像的开始特征码时,将开始特征码相邻位置的字节码作为测试字节码;
检测开始特征码与测试字节码之间的数据是否可按照扫描规则对应的解压缩算法进行解压缩;
若验证成功,则将测试字节码确定为结束特征码;
若验证失败,则取测试字节码下一个位置的字节码作为测试字节码,直至验证成功为止。
在一个实施例中,第一识别插件采用采用python的magic模块编写,第二识别插件采用python的yara模块编写。
根据本公开实施例的第二方面,提供一种固件文件的分析设备,包括:
获取模块,用于获取固件文件;
识别模块,用于调用识别插件对固件文件进行识别,从固件文件中提取根文件系统镜像,并获取根文件系统镜像的文件类型;
解包模块,用于在根文件系统镜像的文件类型为可解包格式时,调用与根文件系统镜像的文件类型对应的解包插件对根文件系统镜像进行解包;
分析模块,用于调用与根文件系统镜像的文件类型对应的分析插件对已解包的根文件系统镜像进行分析;
分析模块,用于在根文件系统镜像的文件类型为可分析的文件类型时,调用与根文件系统镜像的文件类型对应的分析插件对根文件系统镜像进行分析。
根据本公开实施例的第三方面,提供一种固件文件的分析设备,固件文件的分析设备包括处理器和存储器,存储器中存储有至少一条计算机指令,指令由处理器加载并执行以实现第一方面以及第一方面的任一实施例所描述的固件文件的分析方法中所执行的步骤。
根据本公开实施例的第四方面,提供一种计算机可读存储介质,存储介质中存储有至少一条计算机指令,指令由处理器加载并执行以实现第一方面以及第一方面的任一实施例所描述的固件文件的分析方法中所执行的步骤。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
图1是本公开实施例提供的一种固件文件的分析方法的流程图;
图2是本公开实施例提供的一种固件文件的分析设备的结构示意图;
图3是本公开实施例提供的一种固件文件的分析设备的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
本公开实施例提供一种固件文件的分析方法,如图1所示,该固件文件的分析方法包括以下步骤:
101、获取固件文件。
固件文件主要由头部与数据两部分组成,固件文件的头部又可以分成两个部分,第一部分主要是关于整个固件的信息,可以称之为公共信息;第二部分则是关于每个包含进固件文件中映像文件各自的信息;固件文件的数据主要包括与系统有关的映像文件,如引导加载程序bootloader,内核kernel,initrd以及根文件系统rootfs等。由于不同网络设备的操作系统所使用的文件系统不同,文件系统所采用的压缩算法也有差异,甚至有些网络设备采用非标准的压缩算法打包文件系统,因此,执行下述步骤102~104实现对固件文件中根文件系统镜像的识别、解包和分析。
102、调用识别插件对固件文件进行识别,从固件文件中提取根文件系统镜像,并获取根文件系统镜像的文件类型。
在第一个示例中,调用识别插件对固件文件进行识别,从固件文件中提取根文件系统镜像,并获取根文件系统镜像的文件类型包括:
调用第一识别插件检测固件文件的头部信息进行识别,得到识别结果;
在识别结果指示固件文件的头部信息包含根文件系统镜像的位置信息以及根文件系统镜像的魔数magic number时,根据根文件系统镜像的位置信息从固件文件中提取根文件系统镜像,并根据根文件系统镜像的magic number确定根文件系统镜像的文件类型。
其中,第一识别插件采用python的magic模块编写。通过对固件文件的头部信息进行识别,检测固件文件的头部信息中是否包含根文件系统镜像的位置信息,在包含根文件系统镜像的位置信息时,则可以直接根据该位置信息从固件文件中提取出根文件系统;进一步的,python的magic模块具有识别文件类型的功能,根据预定义的文件类型列表检查头文件来识别文件类型,不同文件类型的magic number是不同的,因此能够识别不同的文件类型,因此,根据根文件系统镜像的magic number确定根文件系统镜像的文件类型。
在第二个示例中,结合第一个示例所描述的,在识别结果指示固件文件的头部信息仅包含根文件系统镜像的位置信息,根据根文件系统镜像的位置信息从固件文件中提取根文件系统镜像;调用第一识别插件对根文件系统镜像的文件头镜像识别,获取根文件系统镜像的文件类型。
在本公开实施例中,固件文件的头部信息中仅包含根文件系统镜像的位置信息,则根据该位置信息从固件文件中提取根文件系统镜像;如第一个示例中所描述的,第一识别插件采用python的magic模块编写,再次调用第一识别插件对根文件系统镜像的头文件进行识别,该文件头又被称为magic number,因此,根据识别得到的magic number确定根文件系统镜像的文件类型。
在第三个示例中,结合第一个示例所描述的,在识别结果指示固件文件的头部信息仅包含根文件系统镜像的magic number时,根据根文件系统镜像的magic number确定根文件系统镜像的文件类型;
调用第二识别插件按照与根文件系统镜像的文件类型对应扫描规则对固件文件进行识别,获取根文件系统镜像的文件格式特征码,文件格式特征码包括开始特征码和结束特征码;
根据根文件系统镜像的文件格式特征码,确定根文件系统镜像在固件文件中的起始位置,并根据起始位置提取根文件系统镜像。
在本实施例中,第二识别插件采用python的yara模块编写。具体的,在第一识别插件在固件文件的头部信息检测到包含根文件系统镜像的magic number时,意味着可以根据根文件系统镜像的magic number确定该根文件镜像的文件类型,那么,调用第二识别插件依据与该文件类型对应的扫描规则对固件文件进行扫描,得到该根文件系统镜像的开始特征码和结束特征码,即固件文件内部的magic number,进而,将开始特征码和结束特征码确定为根文件系统镜像在固件文件的起始位置,并根据该起始位置提取根文件系统镜像。
在第四个示例中,结合第一个示例所描述的,在识别结果指示固件文件的头部信息未包含根文件系统镜像的文件类型及根文件系统镜像的位置信息时,调用第二识别插件利用扫描规则列表中的扫描规则依次对固件文件进行识别,直至获取根文件系统镜像的文件格式特征码,文件格式特征码包括开始特征码和结束特征码;
根据文件格式特征码,确定根文件系统镜像在固件文件中的起始位置,并根据起始位置提取根文件系统镜像;
将获取到根文件系统镜像的文件格式特征码的扫描规则对应的文件类型确定为根文件系统镜像的文件类型。
在本实施例中,第一识别插件在固件文件的头部信息中未识别到任何关于根文件系统镜像的信息时,调用第二识别插件利用扫描规则列表中的扫描规则依次对固件文件进行识别,直至获取根文件系统镜像的开始特征码和结束特征码,进而,将根文件系统镜像开始特征码和结束特征码确定为根文件系统镜像在固件文件中的起始位置,并提取根文件系统镜像;由于不同的文件类型对应不同的扫描规则,若采用一扫描规则获取到根文件系统镜像的开始特征码和结束特征码,则意味着识别成功,此时,将该扫描规则对应的文件类型确定为根文件系统镜像的文件类型。当然,由于不同文件类型的文件格式特征码是不同的,因此,也可以将文件格式特征码对应的文件类型确定为根文件系统镜像的文件类型。
对于在第三个示例和第四个示例中所描述的,获取根文件系统镜像的文件格式特征码包括:
在第二识别插件对固件文件识别得到根文件系统镜像的开始特征码时,将开始特征码相邻位置的字节码作为测试字节码;
检测开始特征码与测试字节码之间的数据是否可按照扫描规则对应的解压缩算法进行解压缩;
若验证成功,则将测试字节码确定为结束特征码;
若验证失败,则取测试字节码下一个位置的字节码作为测试字节码,直至验证成功为止。
一般情况下,根文件系统是被压缩打包放进固件文件中的,而不同的压缩打包方式有对应的特征可以识别,因此,可以在固件文件中搜索对应的特征码magic number,找到开始与结束的特征码,即可定位出根文件系统镜像在固件文件中的起始位置,从中提取出根文件系统镜像。但是,有的情况下只有开始特征码,没有结束特征码,如lzma压缩格式,而一个压缩算法,只有获得完整的压缩文件数据后,才能解压缩成功,因此在搜索得到开始特征码后逐位测试,将测试部分的字节码切去后,不生成临时文件,直接在内存中利用解压缩算法测试,省去了在磁盘上生成临时文件的的时间,即节省生成文件的磁盘写入时间,提高寻找正确结束位置的效率;如果验证成功,则证明取到了正确的结束位,如果验证失败,则取下一个位置的字节码,重复测试,直至验证成功位置。
103、在根文件系统镜像的文件类型为可解包格式时,调用与根文件系统镜像的文件类型对应的解包插件对根文件系统镜像进行解包,并调用与根文件系统镜像的文件类型对应的分析插件对已解包的根文件系统镜像进行分析。
具体的,根文件系统镜像的类型很多,每种类型都有其对应的格式,常见的根文件系统镜像的格式包括cpio、squashfs、ubi、ext等。一般情况下,根文件系统镜像都是压缩后放入到固件文件中,而每一种格式都有对应的解包方法,因此,在根文件系统镜像的文件类型为可解包格式时,调用与根文件系统镜像的文件类型对应的解包插件对根文件系统镜像进行解包,得到已解包的根文件系统镜像。需要说明的是,当对根文件系统镜像第一解包后,得到的文件中,可能仍然包含可以解包的文件,则需要进行解包,直至没有可以解包的文件为止,才真正完成根文件系统的解包。然后,调用与根文件系统镜像的文件类型对应的分析插件对已解包的根文件系统镜像进行分析。
104、在根文件系统镜像的文件类型为可分析的文件类型时,调用与根文件镜像的文件类型对应的分析插件对应的根文件系统镜像进行分析。
在本实施例中,根文件系统镜像的文件类型为不可解包的文件且为可分析的文件类型时,调用与根文件镜像的文件类型对应的分析插件对应的根文件系统镜像进行分析。
本公开实施例提供的固件文件的分析方法,通过获取固件文件;调用识别插件对固件文件进行识别,从固件文件中提取根文件系统镜像,并获取根文件系统镜像的文件类型;在根文件系统镜像的文件类型为可解包格式时,调用与根文件系统镜像的文件类型对应的解包插件对根文件系统镜像进行解包,并调用与根文件系统镜像的文件类型对应的分析插件对已解包的根文件系统镜像进行分析;在根文件系统镜像的文件类型为可分析的文件类型时,调用与根文件系统镜像的文件类型对应的分析插件对根文件系统镜像进行分析。本公开实施例采用插件式思维实现对固件文件的静态识别,解包,分析,具备较高的通用性,分析全程无需硬件设备,可有效减少用户的初始投资,降低成本,提高效率。
基于上述图1对应的实施例提供的固件文件的分析方法,本公开另一实施例提供一种固件文件的分析方法,该方法基于python的易维护、可拓展等特征,采用插件式思维,集固件文件的识别、解包、分析于一体,实现对通用的固件静态分析方法。该技术方案的技术流程分为识别、解包、分析三部分。下面对上述三部分分别进行描述。
(1)识别插件包括针对magic number在文件头部的识别插件以及针对magicnumber在文件内部的识别插件。
其中,针对magic number在文件头部的识别插件,用于识别根据文件头部信息即可知道文件类型的文件,如为可解包的类型,例如zip格式的文件。采用python的magic模块编写,根据文件头部信息中的magic number进行识别,如识别出的文件类型为可解包类型,后续可调用对应的解包插件;针对magic number在文件内部的识别插件,用于识别根据文件头部信息无法即可知道解包方式的文件。采用python的yara模块编写,调用yara引擎,遍历整个文件的字节码,根据文件内部的magic number,识别出文件解包需选用的解包插件。
(2)解包插件包括针对magic number在文件头部的解包插件以及针对magicnumber在文件内部的解包插件。
其中,针对magic number在文件头部的解包插件,只需要将对应格式的文件传入,即可完成解包任务,如zip格式的文件;针对magic number在文件内部的解包插件,需要将文件与文件需要解包部分对应字节码的起始位置共同传入,解包插件会按照字节码的起始位置,将此部分字节码从文件中切分出来,再将切分出的部分进行解包。
(3)分析插件
只需要将对应格式的文件传入,即可完成分析任务。如为txt格式的文本文件,可进行文件内容的分析,检测是否包含秘钥信息;如为elf格式的二进制文件,可检查文件是否开启了栈保护、内存地址随机化等保护机制。
根据上述描述,拿到固件文件后,识别、解包、分析的整体流程的步骤如下所示:
步骤一:依次调用各个识别插件,对固件文件进行识别:如识别成功,且为可解包的类型,则转到步骤二;如识别成功,为不可解包的类型,则转到步骤三;如识别失败,则停止。
步骤二:根据步骤一对文件的识别结果,调用对应的解包插件,进行解包,并将解包后得到的所有文件,依次传到步骤一,看是否可以进行二次解包,直至不可解包为止;在解包结束后,调用对应文件类型的分析插件,进行针对性分析。
步骤三:根据步骤一对文件类型的识别结果,如为可分析的文件类型,则调用对应文件类型的分析插件,进行针对性分析;如为不可分析类型的文件,则停止。
综上所述,当上述步骤执行完成后,即将固件文件完成了彻底的解包,并对每一个解包出的文件进行了分析尝试。
具体的,当拿到一个固件文件后,首先调用识别插件进行识别,识别插件会首先调用magic模块,进入文件识别,此时有四种情况。第一种情况,magic模块识别成功,即通过固件文件的开始头部信息,即可知道根文件系统镜像的位置,则此时进入步骤二内容;第二种情况,magic模块识别成功,即识别得到固件文件的根文件系统镜像的文件类型,此时可以根据magic模块的识别结果,去有依据的选择对应的规则调用yara模块去对固件文件进行扫描(yara模块是根据规则进行扫描的,扫描一次仅使用一种规则,如果选择squashfs特征规则,则会寻找squashfs特征码,如果调用lzma特征规则,则会寻找lzma的特征码),找到根文件系统的起始位置,如果寻找失败,则识别失败,停止;第三种情况,magic模块识别成功,得出该文件为可分析的文件类型,则进入步骤三内容;第四种情况,magic模块识别失败,则会选择调用yara模块去扫描识别该文件,与第二种情况不同是,此时是无依据的调用yara模块,即是将所有规则依次应用,扫描一遍,直到有结果则停止,如果识别成功,则进入步骤二内容,如果识别失败,则识别失败,停止。
本公开实施例采用插件式思维,开发了固件文件静态分析的通用方法,将文件类型识别插件与解包插件分为magic number在文件头与magic number在文件中两类的处理方法,采用python的magic模块识别magic number在文件头,yara模块识别magic number在文件中的情况的识别方式,实现对固件文件的识别、解包、分析流程的同步进行的执行方式。
本公开实施例基于易维护、易拓展的python语言,便于新型硬件分析功能的添加与后续维护;分析全程无需硬件设备,可有效减少用户的初始投资;基于插件的开发思维,固件无论采取的打包加密方式,只要插件中有,便可进行识别,解包,分析,具备较高的通用性。
基于上述图1对应的实施例中所描述的固件文件的分析方法,下述为本公开装置实施例,可以用于执行本公开方法实施例。
本公开实施例提供一种固件文件的分析装置,如图2所示,该固件文件的分析装置20包括:获取模块201、识别模块202、解包模块203和分析模块204;
获取模块201,用于获取固件文件;
识别模块202,用于调用识别插件对所述固件文件进行识别,从所述固件文件中提取根文件系统镜像,并获取所述根文件系统镜像的文件类型;
解包模块203,用于在所述根文件系统镜像的文件类型为可解包格式时,调用与所述根文件系统镜像的文件类型对应的解包插件对所述根文件系统镜像进行解包;
分析模块204,用于调用与所述根文件系统镜像的文件类型对应的分析插件对所述已解包的根文件系统镜像进行分析;
分析模块204,用于在所述根文件系统镜像的文件类型为可分析的文件类型时,调用与所述根文件系统镜像的文件类型对应的分析插件对所述根文件系统镜像进行分析。
在一个实施例中,如图3所示,该固件文件的分析装置20还包括:提取模块205和确定模块206;
识别模块202,用于调用第一识别插件对所述固件文件的头部信息进行识别,得到识别结果;
提取模块205,用于在识别结果指示所述固件文件的头部信息包含所述根文件系统镜像的位置信息以及所述根文件系统镜像的魔数magic number时,根据所述根文件系统镜像的位置信息从所述固件文件中提取所述根文件系统镜像;
确定模块206,用于根据所述根文件系统镜像的magic number确定所述根文件系统镜像的文件类型。
在一个实施例中,提取模块205,用于在所述识别结果指示所述固件文件的头部信息仅包含所述根文件系统镜像的位置信息时,根据所述根文件系统镜像的位置信息从所述固件文件中提取所述根文件系统镜像;
识别模块202,用于调用所述第一识别插件对所述根文件系统镜像的文件头magicnumber进行识别,获取所述根文件系统镜像的文件类型。
在一个实施例中,确定模块206,用于在所述识别结果指示所述固件文件的头部信息仅包含所述根文件系统镜像的magic number时,根据所述根文件系统镜像的magicnumber确定所述根文件系统镜像的文件类型;
识别模块202,用于调用第二识别插件按照与所述根文件系统镜像的文件类型对应扫描规则对所述固件文件进行识别,获取所述根文件系统镜像的文件格式特征码,所述文件格式特征码包括开始特征码和结束特征码;
提取模块205,用于根据所述根文件系统镜像的文件格式特征码,确定所述根文件系统镜像在所述固件文件中的起始位置,并根据所述起始位置提取所述根文件系统镜像。
在一个实施例中,识别模块202,用于在所述识别结果指示所述固件文件的头部信息未包含所述根文件系统镜像的文件类型及所述根文件系统镜像的位置信息时,调用第二识别插件利用扫描规则列表中的扫描规则依次对所述固件文件进行识别,直至获取所述根文件系统镜像的文件格式特征码,所述文件格式特征码包括开始特征码和结束特征码;
提取模块205,用于根据所述文件格式特征码,确定所述根文件系统镜像在所述固件文件中的起始位置,并根据所述起始位置提取所述根文件系统镜像;
确定模块206,用于将获取到根文件系统镜像的文件格式特征码的扫描规则对应的文件类型确定为所述根文件系统镜像的文件类型。
在一个实施例中,识别模块202,用于:
在所述第二识别插件对所述固件文件识别得到所述根文件系统镜像的开始特征码时,将所述开始特征码相邻位置的字节码作为测试字节码;
检测所述开始特征码与所述测试字节码之间的数据是否可按照扫描规则对应的解压缩算法进行解压缩;
若验证成功,则将所述测试字节码确定为结束特征码;
若验证失败,则取所述测试字节码下一个位置的字节码作为测试字节码,直至验证成功为止。
在一个实施例中,所述第一识别插件采用采用python的magic模块编写,所述第二识别插件采用python的yara模块编写。
本公开实施例提供的固件文件的分析设备,通过获取固件文件;调用识别插件对固件文件进行识别,从固件文件中提取根文件系统镜像,并获取根文件系统镜像的文件类型;在根文件系统镜像的文件类型为可解包格式时,调用与根文件系统镜像的文件类型对应的解包插件对根文件系统镜像进行解包,并调用与根文件系统镜像的文件类型对应的分析插件对已解包的根文件系统镜像进行分析;在根文件系统镜像的文件类型为可分析的文件类型时,调用与根文件系统镜像的文件类型对应的分析插件对根文件系统镜像进行分析。本公开实施例采用插件式思维实现对固件文件的静态识别,解包,分析,具备较高的通用性,分析全程无需硬件设备,可有效减少用户的初始投资,降低成本,提高效率。
本公开实施例还提供了一种固件文件的分析设备,该固件文件的分析设备包括接收器、发射器、存储器和处理器,该发射器和存储器分别与处理器连接,存储器中存储有至少一条计算机指令,处理器用于加载并执行至少一条计算机指令,以实现上述图1对应的实施例中所描述的固件文件的分析方法。
基于上述图1对应的实施例中所描述的固件文件的分析方法,本公开实施例还提供一种计算机可读存储介质,例如,非临时性计算机可读存储介质可以是只读存储器(英文:Read Only Memory,ROM)、随机存取存储器(英文:Random Access Memory,RAM)、CD-ROM、磁带、软盘和光数据存储装置等。该存储介质上存储有计算机指令,用于执行上述图1对应的实施例中所描述的固件文件的分析方法,此处不再赘述。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
本领域技术人员在考虑说明书及实践这里公开的公开后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
Claims (8)
1.一种固件文件的分析方法,其特征在于,所述方法包括:
获取固件文件;
调用识别插件对所述固件文件进行识别,从所述固件文件中提取根文件系统镜像,并获取所述根文件系统镜像的文件类型;
在所述根文件系统镜像的文件类型为可解包格式时,调用与所述根文件系统镜像的文件类型对应的解包插件对所述根文件系统镜像进行解包,并调用与所述根文件系统镜像的文件类型对应的分析插件对所述已解包的根文件系统镜像进行分析;
在所述根文件系统镜像的文件类型为可分析的文件类型时,调用与所述根文件系统镜像的文件类型对应的分析插件对所述根文件系统镜像进行分析;
所述调用识别插件对所述固件文件进行识别,从所述固件文件中提取根文件系统镜像,并获取所述根文件系统镜像的文件类型包括:
调用第一识别插件对所述固件文件的头部信息进行识别,得到识别结果;
在识别结果指示所述固件文件的头部信息包含所述根文件系统镜像的位置信息以及所述根文件系统镜像的魔数magic number时,根据所述根文件系统镜像的位置信息从所述固件文件中提取所述根文件系统镜像,并根据所述根文件系统镜像的magic number确定所述根文件系统镜像的文件类型;
所述方法还包括:
在所述识别结果指示所述固件文件的头部信息仅包含所述根文件系统镜像的位置信息时,根据所述根文件系统镜像的位置信息从所述固件文件中提取所述根文件系统镜像;
调用所述第一识别插件对所述根文件系统镜像的文件头magic number进行识别,获取所述根文件系统镜像的文件类型。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述识别结果指示所述固件文件的头部信息仅包含所述根文件系统镜像的magicnumber时,根据所述根文件系统镜像的magic number确定所述根文件系统镜像的文件类型;
调用第二识别插件按照与所述根文件系统镜像的文件类型对应扫描规则对所述固件文件进行识别,获取所述根文件系统镜像的文件格式特征码,所述文件格式特征码包括开始特征码和结束特征码;
根据所述根文件系统镜像的文件格式特征码,确定所述根文件系统镜像在所述固件文件中的起始位置,并根据所述起始位置提取所述根文件系统镜像。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述识别结果指示所述固件文件的头部信息未包含所述根文件系统镜像的文件类型及所述根文件系统镜像的位置信息时,调用第二识别插件利用扫描规则列表中的扫描规则依次对所述固件文件进行识别,直至获取所述根文件系统镜像的文件格式特征码,所述文件格式特征码包括开始特征码和结束特征码;
根据所述文件格式特征码,确定所述根文件系统镜像在所述固件文件中的起始位置,并根据所述起始位置提取所述根文件系统镜像;
将获取到根文件系统镜像的文件格式特征码的扫描规则对应的文件类型确定为所述根文件系统镜像的文件类型。
4.根据权利要求2或3所述的方法,其特征在于,所述获取所述根文件系统镜像的文件格式特征码包括:
在所述第二识别插件对所述固件文件识别得到所述根文件系统镜像的开始特征码时,将所述开始特征码相邻位置的字节码作为测试字节码;
检测所述开始特征码与所述测试字节码之间的数据是否可按照扫描规则对应的解压缩算法进行解压缩;
若验证成功,则将所述测试字节码确定为结束特征码;
若验证失败,则取所述测试字节码下一个位置的字节码作为测试字节码,直至验证成功为止。
5.根据权利要求2或3所述的方法,其特征在于,所述第一识别插件采用采用python的magic模块编写,所述第二识别插件采用python的yara模块编写。
6.一种固件文件的分析设备,其特征在于,包括:
获取模块,用于获取固件文件;
识别模块,用于调用识别插件对所述固件文件进行识别,从所述固件文件中提取根文件系统镜像,并获取所述根文件系统镜像的文件类型;
解包模块,用于在所述根文件系统镜像的文件类型为可解包格式时,调用与所述根文件系统镜像的文件类型对应的解包插件对所述根文件系统镜像进行解包;
分析模块,用于调用与所述根文件系统镜像的文件类型对应的分析插件对所述已解包的根文件系统镜像进行分析;
所述分析模块,用于在所述根文件系统镜像的文件类型为可分析的文件类型时,调用与所述根文件系统镜像的文件类型对应的分析插件对所述根文件系统镜像进行分析;
所述设备还用于:
调用第一识别插件对所述固件文件的头部信息进行识别,得到识别结果;
在识别结果指示所述固件文件的头部信息包含所述根文件系统镜像的位置信息以及所述根文件系统镜像的魔数magic number时,根据所述根文件系统镜像的位置信息从所述固件文件中提取所述根文件系统镜像,并根据所述根文件系统镜像的magic number确定所述根文件系统镜像的文件类型;
所述设备还用于:
在所述识别结果指示所述固件文件的头部信息仅包含所述根文件系统镜像的位置信息时,根据所述根文件系统镜像的位置信息从所述固件文件中提取所述根文件系统镜像;
调用所述第一识别插件对所述根文件系统镜像的文件头magic number进行识别,获取所述根文件系统镜像的文件类型。
7.一种固件文件的分析设备,其特征在于,所述固件文件的分析设备包括处理器和存储器,所述存储器中存储有至少一条计算机指令,所述指令由所述处理器加载并执行以实现权利要求1至权利要求5任一项所述的固件文件的分析方法中所执行的步骤。
8.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一条计算机指令,所述指令由处理器加载并执行以实现权利要求1至权利要求5任一项所述的固件文件的分析方法中所执行的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010553678.8A CN111782511B (zh) | 2020-06-17 | 2020-06-17 | 固件文件的分析方法、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010553678.8A CN111782511B (zh) | 2020-06-17 | 2020-06-17 | 固件文件的分析方法、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111782511A CN111782511A (zh) | 2020-10-16 |
CN111782511B true CN111782511B (zh) | 2022-12-09 |
Family
ID=72756831
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010553678.8A Active CN111782511B (zh) | 2020-06-17 | 2020-06-17 | 固件文件的分析方法、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111782511B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112527744A (zh) * | 2020-12-17 | 2021-03-19 | 深圳爱加密科技有限公司 | 一种固件类型识别方法、智能终端及计算机可读存储介质 |
CN113704180B (zh) * | 2021-07-10 | 2024-03-15 | 国网浙江省电力有限公司信息通信分公司 | 一种基于嵌入式设备固件文件信息特征库的无损化固件提取方法 |
CN116522368A (zh) * | 2023-06-29 | 2023-08-01 | 浙江大学 | 一种物联网设备固件解密解析方法、电子设备、介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150248556A1 (en) * | 2014-02-28 | 2015-09-03 | Government Of The United States, As Represented By The Secretary Of The Air Force | Firmware Disassembly System |
CN109375945A (zh) * | 2018-08-28 | 2019-02-22 | 中国人民解放军国防科技大学 | 物联网设备的固件版本探测方法及漏洞修复率评估方法 |
CN110659502A (zh) * | 2019-09-05 | 2020-01-07 | 中国科学院软件研究所 | 一种基于文本信息关联关系分析的项目版本检测方法及系统 |
CN110798356A (zh) * | 2019-11-04 | 2020-02-14 | 腾讯科技(深圳)有限公司 | 固件监控方法、装置、存储介质和计算机设备 |
-
2020
- 2020-06-17 CN CN202010553678.8A patent/CN111782511B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150248556A1 (en) * | 2014-02-28 | 2015-09-03 | Government Of The United States, As Represented By The Secretary Of The Air Force | Firmware Disassembly System |
CN109375945A (zh) * | 2018-08-28 | 2019-02-22 | 中国人民解放军国防科技大学 | 物联网设备的固件版本探测方法及漏洞修复率评估方法 |
CN110659502A (zh) * | 2019-09-05 | 2020-01-07 | 中国科学院软件研究所 | 一种基于文本信息关联关系分析的项目版本检测方法及系统 |
CN110798356A (zh) * | 2019-11-04 | 2020-02-14 | 腾讯科技(深圳)有限公司 | 固件监控方法、装置、存储介质和计算机设备 |
Non-Patent Citations (2)
Title |
---|
一种通过硬盘串口获取固件工厂指令的方法;赵露等;《西安邮电大学学报》;20180710(第04期);全文 * |
网络设备固件分析技术研究;付凯等;《现代电信科技》;20170825(第04期);第2节 * |
Also Published As
Publication number | Publication date |
---|---|
CN111782511A (zh) | 2020-10-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111782511B (zh) | 固件文件的分析方法、设备及存储介质 | |
US7493596B2 (en) | Method, system and program product for determining java software code plagiarism and infringement | |
KR102415971B1 (ko) | 악성 모바일 앱 감지 장치 및 방법 | |
CN106845171B (zh) | 一种Android应用程序代码保护机制鉴别方法 | |
CN106547782B (zh) | 日志信息的获取方法及装置 | |
WO2017206897A1 (zh) | 识别文件的方法及相关设备 | |
US10203953B2 (en) | Identification of duplicate function implementations | |
KR20160109870A (ko) | 안드로이드 멀웨어의 고속 검색 시스템 및 방법 | |
CN104462968A (zh) | 恶意应用程序的扫描方法、装置和系统 | |
CN104217165B (zh) | 文件的处理方法及装置 | |
CN111382447B (zh) | 安装包的加密方法、存储介质及计算机设备 | |
CN110096442B (zh) | 代码调试方法、用户设备、存储介质及装置 | |
CN107908964B (zh) | 一种针对Android平台Unity3D游戏中加壳文件的安全检测方法及装置 | |
CN104462969A (zh) | 查杀恶意应用程序的方法、装置和系统 | |
CN105095754A (zh) | 一种处理病毒应用的方法、和装置和移动终端 | |
KR101824699B1 (ko) | 안드로이드 앱 분석 장치 및 그 방법과, 이를 실행하는 프로그램이 기록된 컴퓨터로 읽을 수 있는 기록매체 | |
KR101052735B1 (ko) | 메모리 조작유무를 감지하는 방법 및 이를 이용한 장치 | |
CN113064601B (zh) | 动态加载文件的确定方法、装置、终端及存储介质 | |
CN114417347A (zh) | 应用程序的漏洞检测方法、装置、设备、存储介质和程序 | |
CN110377499B (zh) | 一种对应用程序进行测试的方法及装置 | |
CN113268617A (zh) | 论文元数据的检测方法及装置 | |
CN112541182B (zh) | 内核vfs层系统修复方法、装置、设备及存储介质 | |
KR102286451B1 (ko) | 자연어 처리 기반 난독화된 식별자 인식 방법, 이를 수행하기 위한 기록 매체 및 장치 | |
US20240095371A1 (en) | Information processing apparatus, information processing method, and non-transitory computer readable medium | |
US10726109B2 (en) | Method and system for identifying whether an application is genuine by means of digital watermarks |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |