CN109214149B - 一种mips固件基地址自动化检测方法 - Google Patents
一种mips固件基地址自动化检测方法 Download PDFInfo
- Publication number
- CN109214149B CN109214149B CN201811053611.7A CN201811053611A CN109214149B CN 109214149 B CN109214149 B CN 109214149B CN 201811053611 A CN201811053611 A CN 201811053611A CN 109214149 B CN109214149 B CN 109214149B
- Authority
- CN
- China
- Prior art keywords
- address
- firmware
- instruction
- base address
- mips
- 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
- 238000001514 detection method Methods 0.000 title claims abstract description 21
- 238000000034 method Methods 0.000 claims abstract description 22
- 230000008569 process Effects 0.000 claims description 9
- 238000010845 search algorithm Methods 0.000 claims description 5
- 238000012896 Statistical algorithm Methods 0.000 claims description 2
- 238000004458 analytical method Methods 0.000 abstract description 15
- 238000009825 accumulation Methods 0.000 abstract description 3
- 230000002776 aggregation Effects 0.000 abstract description 3
- 238000004220 aggregation Methods 0.000 abstract description 3
- 239000000463 material Substances 0.000 abstract description 3
- 238000010586 diagram Methods 0.000 description 6
- 239000012634 fragment Substances 0.000 description 4
- 230000001419 dependent effect Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000000630 rising effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000007619 statistical method Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/71—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
- G06F21/73—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information by creating or determining hardware identification, e.g. serial numbers
Abstract
本发明属于嵌入式设备逆向分析技术领域,特别涉及一种MIPS固件基地址自动化检测方法,首先,从二进制固件文件出发,对文件进行遍历搜索,通过搜索三种特征指令对,统计固件中出现的32bits绝对地址;然后,根据绝对地址的分布,作出绝对地址累积分布曲线,通过读取聚集部分坐标,确定候选基地址范围;对每一个候选基地址,计算统计到的字符串引用地址在此基地址下的固件内偏移,检查在固件中与实际字符串的匹配情况,得到匹配率;最后,利用字符串匹配率得到正确的基地址。本发明在不依赖于人工分析的情况下,自动化地获取MIPS架构固件的基地址,节省人力物力,提高检测MIPS固件基地址的效率。
Description
技术领域
本发明属于嵌入式设备逆向分析技术领域,特别涉及一种MIPS固件基地址自动化检测方法。
背景技术
当今,无处不在的嵌入式设备(如移动电话、无线路由器、以太网交换机、网络打印机等)给我们的生活带来了极大的便利,而且设备之间的互联形成了现在的物联网(Intentof Things,IoT),储存和传播着很多的敏感信息。但是,嵌入式设备的安全性却不容乐观,从嵌入式设备固件中发掘出的漏洞和安全威胁层出不穷。
逆向分析是指通过分析程序的二进制数据,反向推出对应的源程序,继而得到程序的系统结构以及相关设计原理。通过对设备固件进行逆向分析可以发现嵌入式设备固件中的后门、漏洞,从而为我们提高设备的安全性提供帮助。
通常,固件代码的反汇编是逆向分析的基础。在进行反汇编时,反汇编器需要知道固件的处理器类型和固件的基地址。处理器的类型关系到采用的何种指令集,可以初步地得到一些反汇编代码。但如果不在正确的基地址下进行反汇编,得到的通常是一些难以读懂的、结构混乱的错误代码,只有设置了正确的基地址,才能建立正确的交叉引用,产生正确的代码调用关系和和数据引用关系,帮助我们理解整个固件的结构和代码执行过程。对于处理器类型获取,利用一些固件分析工具(如binwalk、BAT等)可以很容易地获取固件的处理器类型,但检测固件的基地址却是一项困难的工作。现有的方法要么高度依赖于人工分析,不能自动地检测固件的基地址,要么针对于ARM指令集,不能分析MIPS架构下的固件。
发明内容
针对现有技术中存在的问题,本发明提供一种MIPS固件基地址自动化检测方法,在不依赖于人工分析的情况下,自动化地获取MIPS架构固件的基地址,节省人力物力,提高检测MIPS固件基地址的效率。
为了实现上述目的,本发明采用以下的技术方案:
本发明提供的一种MIPS固件基地址自动化检测方法,包含以下步骤:
步骤A,搜索MIPS指令集的特征指令对,统计固件中的绝对地址;
步骤B,根据统计到的绝对地址的分布,确定候选固件基地址的范围;
步骤C,利用特征指令对统计固件中的字符串引用地址;
步骤D,计算基地址范围内每个候选基地址下的字符串引用地址的匹配率,以确定正确的固件基地址。
进一步地,所述步骤A中,由于MIPS加载绝对地址是通过两条指令实现,因此提出了基于特征指令对匹配的绝对地址统计算法,即通过识别lui-ori、lui-lw和lui-addiu三种特征指令对来标识绝对地址加载,从而通过搜索以上三种特征指令对实现绝对地址的统计。
进一步地,在特征指令对搜索过程中,为了克服特征指令对之间间隔其他指令的情况对结果的影响,提出了基于滑动窗口的特征指令对搜索算法,即定义一定宽度且不断向前滑动的滑动窗口,将滑动窗口范围内顺序出现的两条特征指令判定为特征指令对,而不是只判定相邻的两条指令;
特征指令对的搜索是利用MIPS指令的定长特性,以四字节为单位,逐个搜索指令开始位置的6-bit操作码;
确定操作码符合条件后,确定特征指令对中两条指令的操作寄存器是否符合条件,即liu指令的目标寄存器rt与ori、lw或addiu指令的源寄存器rs相同,符合该条件的才判定为特征指令对。
进一步地,计算绝对地址的方法为:
利用特征指令对的两个16bits操作数计算32bits绝对地址时,需要区分16bits的操作数是否为有符号数;
对于ori指令的无符号操作数,只需将lui指令的操作数H作为高16bits,ori指令的操作数L作为低16bits即可,计算绝对地址Addr如公式(1):
Addr=H×216+L (1)
对于lw和addiu指令的有符号操作数,需要首先判断是否是有符号立即数,然后计算绝对地址Addr,如公式(2):
其中,L15表示L的第15bit。
进一步地,所述步骤B中,确定候选固件基地址的范围时,利用绝对地址在基地址附近积聚的特性,通过作出绝对地址分布曲线,读取分布曲线上急速上升的地址范围,作为候选固件基地址的范围。
进一步地,所述步骤C中,字符串引用地址的搜索是利用步骤A中基于滑动窗口的特征指令对搜索算法,搜索特征指令对lui-addiu,记录其32-bit操作数,即为字符串引用地址。
进一步地,所述步骤D中,每个候选基地址下的字符串引用地址的匹配率是指在某一候选基地址下,所有搜索到的字符串引用地址中恰好指向某个字符串的比率;
假设统计到的n个字符串引用地址存储于数组srAddr中,分别为sraddr1,sraddr2,…,sraddrn,对应于每个字符串引用地址,是否与字符串匹配的结果存储于判定向量J=(j1,j2,...,jn)中,那么:
最后,匹配率M按公式(4)进行计算:
匹配率M最高的候选基地址是正确的固件基地址。
进一步地,字符串引用地址指向某个字符串是指字符串引用地址减去该基地址得到的固件内偏移所对应的位置就是一个字符串的开始位置,判断为字符串开始位置需要同时满足以下三个条件:
条件1,该偏移位置的1字节数据是可显示字符的ASCII码;
条件2,该偏移位置的下1字节数据是可显示字符的ASCII码;
条件3,该偏移位置的上1字节数据是0x00。
与现有技术相比,本发明具有以下优点:
1、本发明的一种MIPS固件基地址自动化检测方法,根据MIPS指令集的特点搜索绝对地址,并利用统计的方法根据绝对地址分布确定基地址的范围,然后根据不同基地址下字符串引用地址与字符串位置的匹配情况,自动化地检测给定的MIPS架构固件的正确基地址,从而对固件的逆向分析提供帮助,极大地节省了人力物力,提高了工作效率。
2、该方法还可以应用于固件代码段运行时地址的检测,如被压缩代码段或被搬移代码段的运行时地址的检测,以帮助进行部分固件的逆向分析。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明的一种MIPS固件基地址自动化检测方法的流程示意图;
图2是MPIS架构立即数指令格式结构图;
图3是lui指令、ori指令、lw指令和addiu指令格式结构图;
图4是基于滑动窗口的特征指令对搜索和绝对地址统计过程示意图;
图5是中间包含其他指令的指令对示意图;
图6是寄存器不同的两条非特征指令示意图;
图7是四款常见固件中绝对地址的分布图;
图8是四款常见固件中绝对地址的分布曲线。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的核心是提供一种MIPS固件基地址自动化检测方法,在不需要进行人工代码分析的情况下,准确检测MIPS固件的基地址。
为了便于对本发明内容的理解,首先对本发明涉及到的基础知识进行介绍。
一、MIPS指令格式
在MIPS32中,每条CPU指令由一个32位的字组成,并进行字对齐,因而我们可以很容易地划分指令边界,搜索特定的指令。MIPS指令包括三种:立即数指令(I-type)、跳转指令(J-type)和寄存器指令(R-type),立即数指令格式如图2所示。使用少量指令格式简化了指令解码,允许编译器根据需要利用这三种格式合成更复杂(且使用频率较低)的操作和寻址模式。
在I-type指令中,常用来加载立即数到寄存器中的指令有四条,分别是lui、ori、lw和addiu,这对于基地址的检测是非常有用的。lui指令的功能是将一个16位立即数加载到寄存器的高16位中,它的指令格式如图3(a)所示。因为数据是从内存中加载到寄存器中,所以5bits的源寄存器区域rs全为0,目标寄存器区域rt为目标寄存器的通用编号,区域immediate是一个16位的无符号立即数。类似地,指令ori、lw和addiu的格式如图3(b)、(c)、(d)所示。特别地,lw指令和addiu指令的immediate区域是16位有符号立即数。
知道了这些指令的格式,便能够通过搜索它们的操作码很容易地搜索到它们,并能够获取它们的源寄存器、目标寄存器、操作数等。
二、三种有关32位绝对地址的典型情景
在MIPS固件中,有三种有关32位绝对地址的典型情景,包括32位立即数加载、字加载寻址和字符串引用。
对于32位处理器,加载一个绝对地址就是将一个32位的立即数加载到寄存器中。但是,不管是ARM还是MIPS,它们的指令长度都是32位,也就是说,无法只用一条指令将一个32位数据加载到寄存器中,因为这样的话操作数便占据了整个指令的32位,没有空间存放操作码。为了解决这个问题,ARM引入了LDR指令来将32位数据加载到寄存器中。LDR将一个数据从内存加载到寄存器Rd,当需要加载一个32位立即数时,需要先将该数据存放到内存中,然后调用LDR加载到寄存器。
相比而言,MIPS采用了一种不同的方案。MIPS使用伪指令li来将32位立即数加载到寄存器中。当使用li加载32位立即数时,实际上是利用一对指令lui和ori来实现的。因为lui能够将一个16位立即数加载到寄存器的高16位,同时将低16位置0。因此,使用li指令加载32位立即数的过程包括两步:首先,使用lui指令将32位立即数的高16位加载到目标寄存器的高16位,低16位置0;然后,利用ori指令对目标寄存器的低16位和32位立即数的低16位进行按位与操作。因为寄存器的低16位全为0,所以32位立即数的低16位便加载到了寄存器的低16位中。这样,就把整个的32位立即数加载到了32位寄存器中。
此外,在MIPS架构下,唯一受加载/存储指令直接支持的寻址方式就是“基址寄存器+16位有符号立即数偏移”。与32位立即数加载类似,该寻址过程也包括两个步骤:首先,利用lui指令将16位基址加载到基址寄存器中;然后,利用lw指令加上16位的有符号偏移。
第三个涉及绝对地址的情况是字符串引用。MIPS使用伪指令la来引用字符串,其操作数是字符串的地址。与前两个情况类似,伪指令la是由指令对lui-addiu实现的,引用过程也包括调用lui指令和调用addiu指令两个过程。
可见,上述三种情景分别可以通过指令对lui-ori、lui-lw和lui-addiu来标识。因此,相关的绝对地址可以通过搜索这些特征指令对然后提取它们的操作数来获取。
下面结合附图和具体实施方式对本发明作进一步的详细说明。
实施例一
本实施例的一种MIPS固件基地址自动化检测方法,该方法包含以下步骤:
步骤S101,搜索MIPS指令集的特征指令对,统计固件中的绝对地址;
步骤S102,根据统计到的绝对地址的分布,确定候选固件基地址的范围;
步骤S103,利用特征指令对统计固件中的字符串引用地址;
步骤S104,计算基地址范围内每个候选基地址下的字符串引用地址的匹配率,以确定正确的固件基地址。
检测过程如图1所示,首先,从二进制固件文件出发,对文件进行遍历搜索,通过搜索三种特征指令对,统计固件中出现的32bits绝对地址;然后,根据绝对地址的分布,作出绝对地址累积分布曲线,通过读取聚集部分坐标,确定候选基地址范围;对每一个候选基地址,计算统计到的字符串引用地址在此基地址下的固件内偏移,检查在固件中与实际字符串的匹配情况,得到匹配率;最后,利用字符串匹配率得到正确的基地址。
所述步骤S101中,三种特征指令对的选取是利用MIPS架构加载32位立即数时的指令特点,即利用两条指令(lui和ori、liu和lw或者lui和addiu)完成一个32位立即数从内存到寄存器的加载。因此,选取lui-ori、lui-lw和lui-addiu三种指令对作为32位绝对地址统计的特征指令对。
在搜索特征指令对时,利用MIPS指令的定长特性,即每条指令的长度为32bits,其中第23-31bit为指令的操作码,唯一标定该指令,对于该方法涉及的立即数指令,第21-25bit为源寄存器,第16-20bit为目标寄存器,第0-15bit为16bits的立即数操作码,如图2所示。因此可以在二进制固件文件中搜索特征指令对并计算出它们操作的绝对地址。
在指令搜索过程中,有两种情况会对搜索结果产生影响。
第一种情况就是当使用li指令(实际上是lui和ori指令)加载32位立即数,或者使用lui和lw指令进行寻址,或者la指令(实际上是lui和addiu指令)引用字符串时,在lui指令和ori指令、lw指令或addiu指令之间可能有若干其他指令。这种情况下,只判断lui指令的下一条指令是否与其组成特征指令对会导致特征指令对的漏识别。例如图5中,li指令(ROM:81F80448位置)实际上是一条与lui指令(ROM:81F80440位置)相配对的ori指令(因为其二进制表示中操作码为001101),只是为了方便阅读,MIPS反汇编器直接将其显示为li指令。我们可以看到,该li指令与之前的lui指令之间隔了一条sll指令(ROM:81F80444位置)。实际上,这种情况在MIPS固件中非常普遍。
在这种情况下,虽然指令对两条指令之间隔了若干指令,但它们的宽度一定是4字节的整数倍(一条指令长度的整数倍)。因此,为了避免这种漏识别,我们定义了滑动窗口及其窗口宽度wndsize:
定义1:滑动窗口对应于一段连续的文件内容,它所包含的位数是一定的。
定义2:滑动窗口的宽度wndsize定义为滑动窗口中所包含的指令的条数(也就是4字节的倍数)。
因此,在滑动窗口范围内出现的指令对都认为是特征指令对,无论它们中间是否有其他指令。
在每种特征指令对中,lui指令的目标寄存器一定是ori、lw或addiu指令的源寄存器。第二种会影响搜索结果的情况就是尽管有一条ori、lw或addiu指令与lui指令相邻(包括第一种情况),但lui指令的目标寄存器不是它们的源寄存器,如图6所示。lui指令的目标寄存器为$v0,而lw指令的源寄存器为$k0,因此这不是一对特征指令对,它们不是地址0x81F90010的加载指令。因此,如果不对这种情况加以区分,就会导致误识别。
针对这种情况,在发现两条特征指令后,需要对lui指令的目标寄存器和ori、lw或addiu指令的源寄存器进行比较,如果是相同的,才将这两条指令判定为特征指令对。
下面举一个具体例子说明搜索特征指令对并计算固件中的绝对地址。
绝对地址的搜索过程如图4所示(wndsize=4的情况),其中矩形框表示滑动窗口。对整个文件进行搜索时,滑动窗口不断向前滑动,每次的滑动距离为一条指令的长度(4字节)。滑动窗口每滑动到一个位置,判断窗口内的第一条指令是不是lui指令(也就是判断该指令机器码的前6位是否为lui指令的操作码001111)。如果不是(如图4(a)所示),则滑动窗口继续向前滑动一个指令长度(如图4(b)所示)。如果第一条指令是lui(如图4(b)所示),记录它的目标寄存器rt,然后依次判断它的下一条指令直到窗口内的最后一条指令是否为ori、lw或addiu。如果发现了这三条指令中的任何一条,则判断其源寄存器rs是否与lui的目标寄存器rt相同。如果相同,则判定他们为特征指令对,记录lui指令的16位操作数(如图4(b)中的0xABCD),用H表示,以及ori、lw或addiu指令的16位操作数(如图4(b)中的0xEFGH),用L表示。如果指令对为lui-ori,由于ori的immediate域为16位无符号数,所以绝对地址Addr用公式(1)计算得到。
Addr=H×216+L (1)
如果指令对为lui-lw或lui-addiu,与ori不同的是,由于lw和addiu的immediate域为16位有符号数,所以绝对地址Addr用公式(2)计算得到。
其中,L15表示L的第15位。
然后,保存Addr的值并继续搜索ori、lw或addiu。如果在滑动窗口中发现了另外一条lui指令,则将滑动窗口滑动到该位置并从该lui指令的下一条指令开始重新搜索ori、lw或addiu。如果滑动窗口内的指令都已经搜索过,则将滑动窗口向前滑动wndsize的距离(到图4(c)所示的位置)。继续该过程直到文件的结尾。
所述步骤S102中,确定候选固件基地址的范围时,利用绝对地址在基地址附近积聚的特性,通过作出绝对地址分布曲线,读取分布曲线上急速上升的地址范围(也就是积聚区域范围的开始和结束坐标),作为候选固件基地址的范围。
下面举一个实例说明如何确定固件基地址的范围。
四款常见固件在Addr中统计到的绝对地址的分布情况如图7所示,其中x轴为数组Addr的序号,y轴为存储在Addr中的绝对地址的值。我们可以看到在四幅图中,这些地址在某些特定的y值附近有明显的聚集现象,最明显的是2×109和2.5×109之间的某个值。此外,由于搜索顺序是从固件文件的开始到结尾,而且搜索到的结果是顺序地存储在Addr中的,所以Addr的序号可以粗略地代表在固件中的顺序。因此,x轴可以粗略地代表固件中的位置,图7可以看做绝对地址在固件中的分布。很明显,在某些固件片段中,绝对地址紧密地聚集在一起,而其他的片段中,绝对地址均匀地分布开来。可以推断,这些绝对地址聚集的片段是固件的代码段,而分布松散的片段为固件的数据段或者压缩数据段。而且,根据MIPS“基址寄存器+16位有符号数偏移”的寻址方式,这些绝对地址聚集的位置很可能就在固件基地址附近。
为了更清楚地分析这些地址的聚集情况,我们将地址空间划分为4.5×104段,每段包含105个地址,这样,最高的地址为4.5×109(即0x10C388D00),完整涵盖了整个地址空间。每一段的最高地址作为x轴坐标,Add中小于x坐标的地址的个数作为y轴,图8显示了以上四款固件的Addr中地址的分布曲线。
从图8中可以看出,在每条曲线中均有一段急速上升的片段,这就意味着在该范围内绝对地址的个数急速增加,即有大量的绝对地址(约为1/3)聚集在该范围内。基于以上分析,这个范围就是固件基地址的范围。
因此,我们便得到了一种确定固件基地址范围的归纳方法:首先,根据统计到的绝对地址作出绝对地址的分布曲线;然后,读取急速上升部分开始和结束位置的x轴坐标,该坐标就是固件基地址的范围。
所述步骤S103中,字符串引用地址的搜索是利用步骤S101中基于滑动窗口的特征指令对搜索算法,搜索特征指令对lui-addiu,记录其32-bit操作数,即为字符串引用地址。
所述步骤S104,匹配率是指在某个候选基地址下,统计到的字符串引用地址与所引用的字符串相匹配的数目与总数目的比率,即所有搜索到的字符串引用地址中恰好指向某个字符串的比率。
由于该方法为静态分析方法,因此某基地址下字符串引用地址与字符串相匹配,实际上是指字符串引用地址减去该基地址得到的固件内偏移所对应的位置就是一个字符串的开始位置,用公式(5)表示偏移位置Offset为:
Offset=srAddr-base′ (5)
srAddr表示字符串引用地址,base′表示候选基地址。
然后,判断srAddr是否指向一个字符串的开始位置,当且仅当与其对应的偏移Offset满足以下三个条件:
条件1:该偏移位置的1字节数据是可显示字符的ASCII码;
条件2:该偏移位置的下1字节数据是可显示字符的ASCII码;
条件3:该偏移位置的上1字节数据是0x00。
假设统计到的n个字符串引用地址存储于数组srAddr中,分别为sraddr1,sraddr2,…,sraddrn,对应于每个字符串引用地址,是否与字符串匹配的结果存储于判定向量J=(j1,j2,...,jn)中,那么:
最后,匹配率M按公式(4)进行计算:
在正确的基地址下,字符串引用地址一定指向某个字符串的开始位置,而在不正确的基地址下只可能在很小概率下恰巧对应,因此正确基地址下的匹配率一定高于其他候选基地址。因此,匹配率最高的候选基地址就是正确的基地址。
该方法还可以应用于固件代码段运行时地址的检测,如果将一段固件单独分析,如一段解压后的代码或者一段搬移后的代码,利用该方法分析这段固件,可以得到它在运行时的加载地址,以帮助进行部分固件的逆向分析。
最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (7)
1.一种MIPS固件基地址自动化检测方法,其特征在于,包含以下步骤:
步骤A,搜索MIPS指令集的特征指令对,统计固件中的绝对地址;由于MIPS加载绝对地址是通过两条指令实现,因此提出了基于特征指令对匹配的绝对地址统计算法,即通过识别lui-ori、lui-lw和lui-addiu三种特征指令对来标识绝对地址加载,从而通过搜索以上三种特征指令对实现绝对地址的统计;
步骤B,根据统计到的绝对地址的分布,确定候选固件基地址的范围;
步骤C,利用特征指令对统计固件中的字符串引用地址;
步骤D,计算基地址范围内每个候选基地址下的字符串引用地址的匹配率,以确定正确的固件基地址。
2.根据权利要求1所述的MIPS固件基地址自动化检测方法,其特征在于,在特征指令对搜索过程中,为了克服特征指令对之间间隔其他指令的情况对结果的影响,提出了基于滑动窗口的特征指令对搜索算法,即定义宽度为4字节的整数倍,且不断向前滑动的滑动窗口,将滑动窗口范围内顺序出现的两条特征指令判定为特征指令对,而不是只判定相邻的两条指令;
特征指令对的搜索是利用MIPS指令的定长特性,以四字节为单位,逐个搜索指令开始位置的6-bit操作码;
确定操作码符合条件后,确定特征指令对中两条指令的操作寄存器是否符合条件,即lui 指令的目标寄存器rt与ori、lw或addiu指令的源寄存器rs相同,符合该条件的才判定为特征指令对。
4.根据权利要求1所述的MIPS固件基地址自动化检测方法,其特征在于,所述步骤B中,确定候选固件基地址的范围时,利用绝对地址在基地址附近积聚的特性,通过作出绝对地址分布曲线,读取分布曲线上急速上升的地址范围,作为候选固件基地址的范围。
5.根据权利要求2所述的MIPS固件基地址自动化检测方法,其特征在于,所述步骤C中,字符串引用地址的搜索是利用步骤A中基于滑动窗口的特征指令对搜索算法,搜索特征指令对lui-addiu,记录其32-bit操作数,即为字符串引用地址。
7.根据权利要求6所述的MIPS固件基地址自动化检测方法,其特征在于,字符串引用地址指向某个字符串是指字符串引用地址减去该基地址得到的固件内偏移所对应的位置就是一个字符串的开始位置,用公式(5)表示偏移位置Offset为:
Offset=srAddr-base′ (5)
srAddr表示字符串引用地址,base′表示候选基地址;
然后,判断srAddr是否指向一个字符串的开始位置,当且仅当与其对应的偏移位置Offset满足以下三个条件,srAddr指向一个字符串的开始位置:
条件1,该偏移位置的1字节数据是可显示字符的ASCII码;
条件2,该偏移位置的下1字节数据是可显示字符的ASCII码;
条件3,该偏移位置的上1字节数据是0x00。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811053611.7A CN109214149B (zh) | 2018-09-11 | 2018-09-11 | 一种mips固件基地址自动化检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811053611.7A CN109214149B (zh) | 2018-09-11 | 2018-09-11 | 一种mips固件基地址自动化检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109214149A CN109214149A (zh) | 2019-01-15 |
CN109214149B true CN109214149B (zh) | 2020-04-21 |
Family
ID=64986828
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811053611.7A Active CN109214149B (zh) | 2018-09-11 | 2018-09-11 | 一种mips固件基地址自动化检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109214149B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111552511B (zh) * | 2020-05-14 | 2023-06-16 | 山东省计算中心(国家超级计算济南中心) | 一种VxWorks系统物联网固件解包恢复文件名的方法 |
CN112965724A (zh) * | 2021-03-22 | 2021-06-15 | 中国信息安全测评中心 | 一种固件的装载基址范围的确定方法及系统 |
CN115022414B (zh) * | 2022-04-20 | 2023-08-22 | 华东师范大学 | 一种面向车辆电子控制单元的can id逆向及确定方法 |
CN116880858A (zh) * | 2023-09-06 | 2023-10-13 | 北京华云安信息技术有限公司 | 固件实际基地址的获取方法、装置、设备以及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6598166B1 (en) * | 1999-08-18 | 2003-07-22 | Sun Microsystems, Inc. | Microprocessor in which logic changes during execution |
CN1595351A (zh) * | 2004-06-25 | 2005-03-16 | 中国科学院计算技术研究所 | 一种基于mips指令集的处理器的多线程方法和装置 |
CN101645005A (zh) * | 2008-08-06 | 2010-02-10 | 中国人民解放军信息工程大学 | 基于多维可变描述表的处理器结构与指令系统表示方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100478915C (zh) * | 2007-09-20 | 2009-04-15 | 福建星网锐捷网络有限公司 | 一种基于mips架构cpu的异常点定位诊断方法 |
US20150178078A1 (en) * | 2013-12-21 | 2015-06-25 | H. Peter Anvin | Instructions and logic to provide base register swap status verification functionality |
-
2018
- 2018-09-11 CN CN201811053611.7A patent/CN109214149B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6598166B1 (en) * | 1999-08-18 | 2003-07-22 | Sun Microsystems, Inc. | Microprocessor in which logic changes during execution |
CN1595351A (zh) * | 2004-06-25 | 2005-03-16 | 中国科学院计算技术研究所 | 一种基于mips指令集的处理器的多线程方法和装置 |
CN101645005A (zh) * | 2008-08-06 | 2010-02-10 | 中国人民解放军信息工程大学 | 基于多维可变描述表的处理器结构与指令系统表示方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109214149A (zh) | 2019-01-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109214149B (zh) | 一种mips固件基地址自动化检测方法 | |
US10200391B2 (en) | Detection of malware in derived pattern space | |
US9342429B1 (en) | Counting events using hardware performance counters and annotated instructions | |
US10268454B2 (en) | Methods and apparatus to eliminate partial-redundant vector loads | |
US20110047532A1 (en) | Methods and apparatuses for selective code coverage | |
US11048798B2 (en) | Method for detecting libraries in program binaries | |
CN101964036B (zh) | 漏洞检测方法及装置 | |
US20090158017A1 (en) | Target-frequency based indirect jump prediction for high-performance processors | |
US9626170B2 (en) | Method and computer program product for disassembling a mixed machine code | |
US20150033211A1 (en) | Program debugger and program debugging | |
US20110047531A1 (en) | Methods and apparatuses for selective code coverage | |
CN108763094B (zh) | 测试用例生成方法、装置、设备及存储介质 | |
US9134977B2 (en) | Compiler operation for handling conditional statements | |
CN106547587B (zh) | 用于生成目标程序的配置文件的装置和方法 | |
CN104714885A (zh) | 栈溢出位置的检测方法及装置 | |
CN110990058A (zh) | 软件相似性度量方法及装置 | |
US7725692B2 (en) | Compact representation of instruction execution path history | |
EP3087527B1 (en) | System and method of detecting malicious multimedia files | |
US9652245B2 (en) | Branch prediction for indirect jumps by hashing current and previous branch instruction addresses | |
US8756580B2 (en) | Instance-based field affinity optimization | |
CN110457046B (zh) | 混合指令集程序的反汇编方法、装置、存储介质及终端 | |
Zhu et al. | Determining the base address of MIPS firmware based on absolute address statistics and string reference matching | |
US10909243B2 (en) | Normalizing entry point instructions in executable program files | |
CN115729797A (zh) | 代码相似函数检测方法、装置、电子设备及存储介质 | |
US11520587B1 (en) | Instruction decoding using hash tables |
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 |