一种固件的装载基址范围的确定方法及系统与流程

文档序号:25480759发布日期:2021-06-15 21:39阅读:165来源:国知局
一种固件的装载基址范围的确定方法及系统与流程
本发明涉及数据处理
技术领域
,具体涉及一种固件的装载基址范围的确定方法及系统。
背景技术
:为保证嵌入式系统的安全,需利用反汇编的方式对嵌入式系统的固件进行安全评估,但是对固件进行反汇编无法直接获取固件的装载基址。目前确定固件的装载基址的方式为:由逆向工程师利用特定工具扫描固件,并依据自身的经验和直觉确定固件的装载基址范围,进而定位得到装载基址。但是,一方面,逆向工程师需要花费大量的时间对固件进行处理才能确定装载基址范围,确定装载基址范围的效率较低,另一方面,确定装载基址范围依赖于逆向工程师的经验和直觉,无法保证所确定的装载基址范围的准确性。技术实现要素:有鉴于此,本发明实施例提供一种固件的装载基址范围的确定方法及系统,以解决目前确定装载基址范围的方式存在的效率低和无法保证准确性等问题。为实现上述目的,本发明实施例提供如下技术方案:本发明实施例第一方面公开一种固件的装载基址范围的确定方法,所述方法包括:搜索目标固件中用于加载绝对地址的目标指令,并将每一所述目标指令所加载的绝对地址添加至预设的第一地址多重集中;对所述第一地址多重集包含的绝对地址进行去重处理和排序处理,得到第二地址集合;根据所述目标固件的文件大小和所述第二地址集合包含的绝对地址的取值范围,将所述第二地址集合划分为多个地址分组,所述多个地址分组按照自身对应的分组取值范围排序;统计每个所述地址分组包含的绝对地址个数的累积分布频率;根据每个所述地址分组的分组取值范围和所述累积分布频率,构建累积分布频率图,所述累积分布频率图的横坐标为每个所述地址分组的分组取值范围的中心点,所述累积分布频率图的纵坐标为所述累积分布频率;基于每个所述地址分组对应的所述累积分布频率和分组取值范围,计算所述累积分布频率图中每个所述地址分组的分组斜率;确定分组斜率最大的所述地址分组为第一目标地址分组,以及确定所述第一目标地址分组的下一个所述地址分组为第二目标地址分组;确定所述第一目标地址分组或所述第二目标地址分组的分组取值范围为所述目标固件的装载基址范围。优选的,所述基于每个所述地址分组对应的所述累积分布频率和分组取值范围,计算所述累积分布频率图中每个所述地址分组的分组斜率,包括:利用gi=(pi+1-pi)/(ci+1-ci),计算所述累积分布频率图中每个所述地址分组的分组斜率,gi为第i个地址分组的分组斜率,pi为第i个地址分组包含的绝对地址个数的累积分布频率,ci为第i个地址分组的分组取值范围的中心点。优选的,所述统计每个所述地址分组包含的绝对地址个数的累积分布频率,包括:针对每一个地址分组,利用所述地址分组包含的绝对地址个数,结合li=si+li-1,确定所述地址分组的绝对地址的累积个数,li为第i个地址分组的绝对地址的累积个数,si为第i个地址分组包含的绝对地址的个数,l0为0;针对每一个地址分组,利用所述地址分组的绝对地址的累积个数,结合pi=li/k,确定所述地址分组包含的绝对地址个数的累积分布频率,pi为第i个地址分组包含的绝对地址个数的累积分布频率,k为所述第二地址集合包含的绝对地址的总个数。优选的,所述根据所述目标固件的文件大小和所述第二地址集合包含的绝对地址的取值范围,将所述第二地址集合划分为多个地址分组,包括:利用v=(max-min)/filesize,确定所述第二地址集合的分组数目v,max为所述第二地址集合包含的绝对地址中的最大值,min为所述第二地址集合包含的绝对地址中的最小值,filesize为所述目标固件的文件大小;根据所述分组数目,以所述目标固件的文件大小为分组取值范围的长度,将所述第二地址集合划分为v个地址分组。优选的,所述搜索目标固件中用于加载绝对地址的目标指令,并将每一所述目标指令所加载的绝对地址添加至预设的第一地址多重集中,包括:搜索目标固件中的ldr指令,将每一所述ldr指令所加载的绝对地址添加至预设的第一地址多重集中。优选的,确定所述目标固件的装载基址范围之后,还包括:利用所述装载基址范围,确定所述目标固件的装载基址。本发明实施例第二方面公开一种固件的装载基址范围的确定系统,所述系统包括:搜索单元,用于搜索目标固件中用于加载绝对地址的目标指令,并将每一所述目标指令所加载的绝对地址添加至预设的第一地址多重集中;处理单元,用于对所述第一地址多重集包含的绝对地址进行去重处理和排序处理,得到第二地址集合;划分单元,用于根据所述目标固件的文件大小和所述第二地址集合包含的绝对地址的取值范围,将所述第二地址集合划分为多个地址分组,所述多个地址分组按照自身对应的分组取值范围排序;统计单元,用于统计每个所述地址分组包含的绝对地址个数的累积分布频率;构建单元,用于根据每个所述地址分组的分组取值范围和所述累积分布频率,构建累积分布频率图,所述累积分布频率图的横坐标为每个所述地址分组的分组取值范围的中心点,所述累积分布频率图的纵坐标为所述累积分布频率;计算单元,用于基于每个所述地址分组对应的所述累积分布频率和分组取值范围,计算所述累积分布频率图中每个所述地址分组的分组斜率;第一确定单元,用于确定分组斜率最大的所述地址分组为第一目标地址分组,以及确定所述第一目标地址分组的下一个所述地址分组为第二目标地址分组;第二确定单元,用于确定所述第一目标地址分组或所述第二目标地址分组的分组取值范围为所述目标固件的装载基址范围。优选的,所述计算单元具体用于:利用gi=(pi+1-pi)/(ci+1-ci),计算所述累积分布频率图中每个所述地址分组的分组斜率,gi为第i个地址分组的分组斜率,pi为第i个地址分组包含的绝对地址个数的累积分布频率,ci为第i个地址分组的分组取值范围的中心点。优选的,所述统计单元具体用于:针对每一个地址分组,利用所述地址分组包含的绝对地址个数,结合li=si+li-1,确定所述地址分组的绝对地址的累积个数,li为第i个地址分组的绝对地址的累积个数,si为第i个地址分组包含的绝对地址的个数,l0为0;针对每一个地址分组,利用所述地址分组的绝对地址的累积个数,结合pi=li/k,确定所述地址分组包含的绝对地址个数的累积分布频率,pi为第i个地址分组包含的绝对地址个数的累积分布频率,k为所述第二地址集合包含的绝对地址的总个数。优选的,所述划分单元具体用于:利用v=(max-min)/filesize,确定所述第二地址集合的分组数目v,max为所述第二地址集合包含的绝对地址中的最大值,min为所述第二地址集合包含的绝对地址中的最小值,filesize为所述目标固件的文件大小;根据所述分组数目,以所述目标固件的文件大小为分组取值范围的长度,将所述第二地址集合划分为v个地址分组。基于上述本发明实施例提供的一种固件的装载基址范围的确定方法及系统,该方法为:搜索目标固件中用于加载绝对地址的目标指令,并将每一目标指令所加载的绝对地址添加至预设的第一地址多重集中;对第一地址多重集包含的绝对地址进行去重处理和排序处理,得到第二地址集合;根据目标固件的文件大小和第二地址集合包含的绝对地址的取值范围,将第二地址集合划分为多个地址分组;统计每个地址分组包含的绝对地址个数的累积分布频率;根据每个地址分组的分组取值范围和累积分布频率,构建累积分布频率图;计算累积分布频率图中每个地址分组的分组斜率,确定分组斜率最大的地址分组为第一目标地址分组,以及确定第一目标地址分组的下一个地址分组为第二目标地址分组;确定第一目标地址分组或第二目标地址分组的分组取值范围为目标固件的装载基址范围。本方案中,通过对目标固件中的目标指令所加载的绝对地址进行去重处理和排序处理,得到第二地址集合。将第二地址集合划分为多个地址分组,并计算每个地址分组的绝对地址个数的累积分布频率。利用每个地址分组的分组取值范围和累积分布频率,构建累积分布频率图,计算累积分布频率图中每个地址分组的分组斜率,确定分组斜率最大的第一目标地址分组,及确定第一目标地址分组的下一个地址分组为第二目标地址分组。将第一目标地址分组或第二目标地址分组的分组取值范围作为目标固件的装载基址范围。不需要依赖逆向工程师确定装载基址范围,提高确定装载基址范围的效率和保证装载基址范围的确定准确性。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。图1为本发明实施例提供的固件加载示意图;图2为本发明实施例提供的一种固件的装载基址范围的确定方法流程图;图3为本发明实施例提供的搜索目标指令的流程图;图4为本发明实施例提供的ldr指令机器码格式示意图;图5为本发明实施例提供的累积分布频率图的示意图;图6为本发明实施例提供的一种固件的装载基址范围的确定系统的结构框图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。在本申请中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。由
背景技术
可知,目前在确定固件的装载基址时,主要依赖于逆向工程师自身的经验和直觉确定固件的装载基址范围,进而定位得到装载基址。但此种方式一方面需要耗费大量时间,导致确定装载基址范围的效率较低,另一方面,确定的装载基址范围是否准确依赖于逆向工程师的经验和直觉,无法保证准确性。因此,本发明实施例提供了一种固件的装载基址范围的确定方法及系统,通过对目标固件中的目标指令所加载的绝对地址进行去重处理和排序处理,得到第二地址集合。将第二地址集合划分为多个地址分组,并计算每个地址分组的绝对地址个数的累积分布频率。利用每个地址分组的分组取值范围和累积分布频率,构建累积分布频率图,计算累积分布频率图中每个地址分组的分组斜率,确定分组斜率最大的第一目标地址分组,及确定第一目标地址分组的下一个地址分组为第二目标地址分组。将第一目标地址分组或第二目标地址分组的分组取值范围作为目标固件的装载基址范围。不需要依赖逆向工程师确定装载基址范围,以提高确定装载基址范围的效率和保证装载基址范围的确定准确性。需要说明的,本发明实施例中所涉及的装载基址为固件映射到嵌入式系统内存中的起始位置,如图1示出的固件加载示意图所示,示出了固件映射到嵌入式系统内存的示意图。进一步需要说明的是,经发明人研究发现,在目标固件(比如arm固件)中,在对绝对地址进行操作时,通常是利用目标指令(比如ldr指令)将绝对地址加载到寄存器中,所加载的绝对地址指向目标固件的内存映射范围中。故可利用前述原理,通过以下本发明实施例提供的固件的装载基址范围的确定方法,确定目标固件的装载基址范围,具体说明详见以下实施例示出的内容。参见图2,示出了本发明实施例提供的一种固件的装载基址范围的确定方法流程图,该确定方法包括:步骤s201:搜索目标固件中用于加载绝对地址的目标指令,并将每一目标指令所加载的绝对地址添加至预设的第一地址多重集中。需要说明的是,目标指令用于加载绝对地址,比如:ldr指令用于加载绝对地址,该绝对地址通常为字符串地址、函数地址或结构体地址等的绝对地址。可以理解的是,目标固件中存在大量指令,故需要从目标固件的所有指令中,搜索用于加载绝对地址的目标指令,在具体实现步骤s201的过程中,从目标固件的起始位置,逐一判断每条指令是否为目标指令,当搜索到目标指令时,计算该目标指令所加载的绝对地址,并将计算得到的目标指令的绝对地址添加至第一地址多重集中。通过前述方式,搜索得到目标固件的每一目标指令,并将每一目标指令所加载的绝对对照添加至第一地址多重集中。在具体实现中,搜索目标固件中的ldr指令,将每一ldr指令所加载的绝对地址添加至预设的第一地址多重集中,该目标固件可以是arm固件,也可以是其它类型的固件,目标指令可以是ldr指令,也可以是其它能够用于加载绝对地址的指令,在此对于目标固件和目标指令不做具体限定。为更好解释如何查找目标固件中的目标指令,通过图3示出的内容进行解释说明,需要说明的是,图3仅用于举例说明。参见图3,示出了本发明实施例提供的搜索目标指令的流程图,其中以目标固件为arm固件和目标指令为ldr指令为例,包括以下步骤:步骤s301:判断arm固件的当前指令是否为ldr指令。若是,执行步骤s301,若否,执行步骤s304。在具体实现步骤s301的过程中,从arm固件的起始位置开始,逐一判断每一条指令是否ldr指令,当前指令为当前用于进行前述判断内容的指令。若当前指令为ldr指令,则执行步骤s302,若当前指令不是ldr指令,则执行步骤s304。步骤s302:计算ldr指令所加载的绝对地址。步骤s303:将ldr指令所加载的绝对地址存储至第一地址多重集中。步骤s304:当前指令是否为arm固件的最后一条指令。若当前指令是arm固件的最后一条指令,结束流程,若当前指令不是arm固件的最后一条指令,跳转至下一条指令并返回执行步骤s301。可以理解的是,在计算目标指令的绝对地址时,利用目标指令的机器码计算该目标指令所加载的绝对地址,为更好解释说明如何计算目标指令所加载的绝对地址,以目标固件为arm固件和目标指令为ldr指令为例,结合图4示出的ldr指令机器码格式示意图,通过以下内容进行解释说明。在arm状态下加载立即数到寄存器的ldr指令的机器码格式如图4示出的内容,假设:arm状态下ldr指令加载字符串“asystem”,ldr指令的内存地址为0x20004864,ldr指令的机器码为“e59f00b4”。通过解析ldr指令的机器码格式和机器码,得到rd=(0000)2=r0,imm12=(000010110100)2=0xb4。arm状态的ldr指令寻找地址为(pc&0xfffffffc)+imm12。由于arm处理器采用3级流水线技术,故在arm状态下,pc的取值为pc=current+8,故ldr指令的寻找地址如公式(1)。根据上述公式(1)可得到ldr指令的寻找地址为0x20004920,假设在内存地址0x20004920处开始的4个字节为(e0350020),且本示例中的arm固件为小端存储,则ldr指令所加载的绝对地址为0x200035e0,该0x200035e0地址处所存储的内容即为上述字符串“asystem”的实际内容。步骤s202:对第一地址多重集包含的绝对地址进行去重处理和排序处理,得到第二地址集合。由上述步骤s201的内容可知,将目标固件的所有目标指令所加载的绝对地址存储至第一地址多重集。也就是说,第一地址多重集中存储了该目标固件中的所有绝对地址,其中可能出现重复的绝对地址。在具体实现步骤s202的过程中,对第一地址多重集包含的绝对地址进行去重处理,对于重复出现的绝对地址,仅保留一个即可,对进行去重处理之后的第一地址多重集的绝对地址进行排序处理(按照绝对地址的大小进行排序),得到第二地址集合。可以理解的是,第一地址多重集和第二地址集合中的每个元素即为一个绝对地址。为更好解释说明如何对第一地址多重集进行去重处理和排序处理,通过以下过程a1至过程a3进行解释说明。假设第一地址多重集为m,其中包含了目标固件中所有目标指令所加载的绝对地址。a1、对集合n置空。对第一地址多重集m中的每一绝对地址mi循环执行过程a2。a2、若绝对地址mi不属于集合n,将绝对地址mi加入至集合n中。需要说明的是,过程a2用于去除第一地址多重集m中重复出现的绝对地址。a3、对第一地址多重集m中的所有绝对地址均执行过程a2之后,按照绝对地址的大小,对n中的绝对地址进行排序,得到第二地址集合。步骤s203:根据目标固件的文件大小和第二地址集合包含的绝对地址的取值范围,将第二地址集合划分为多个地址分组。需要说明的是,每个地址分组都存在相应的分组范围,该分组范围基于第二地址集合包含的绝对地址的取值范围划分得到,多个地址分组按照自身对应的分组取值范围排序。由前述步骤s202的内容可知,第二地址集合中的绝对地址为已经进行去重和排序后的绝对地址,故第二地址集合的绝对地址存在相应的取值范围,第二地址集合的绝对地址的取值范围为(min,max),max为第二地址集合包含的绝对地址中的最大值,min为第二地址集合包含的绝对地址中的最小值。在具体实现步骤s203的过程中,根据目标固件的文件大小,将第二地址集合包含的绝对地址的取值范围划分为多个子范围,每个该子范围即为一个地址分组的分组取值范围。在具体实现中,利用公式(2)确定第二地址集合的分组数目v,在公式(2)中,max为第二地址集合包含的绝对地址中的最大值,min为第二地址集合包含的绝对地址中的最小值,filesize为目标固件的文件大小。v=(max-min)/filesize(2)根据该分组数目v,以目标固件的文件大小为分组取值范围的长度,将第二地址集合包含的绝对地址进行分组,得到v个地址分组,每个地址分组中绝对地址的取值处于该地址分组的分组取值范围内。比如:假设第二地址集合n={0、1、2、3、5、11、23、44、55、67、79、99、100},该第二地址集合n总共有13个元素(绝对地址),其中第二地址集合n的绝对地址的取值范围为(min=0,max=100),假设目标固件的文件大小为20。利用公式(2)可计算得到第二地址集合n的分组数目为(100-0)/20=5。以分组取值范围的长度为20(目标固件的文件大小),将第二地址集合n的绝对地址划分为5组,得到5组地址分组,每组地址分组的分组取值范围和所包含的绝对地址如表1示出的内容。表1:分组取值范围所包含的绝对地址[0、20]0、1、2、3、5、11[21、40]23[41、60]44、55[61、80]67、79[81、100]99、100由上述表1可知,将第二地址集合进行分组划分后,每组地址分组包含的绝对地址的取值处于该地址分组的分组取值范围内。步骤s204:统计每个地址分组包含的绝对地址个数的累积分布频率。在具体实现步骤s204的过程中,先确定每个地址分组包含的绝对地址的累积个数,再利用每个地址分组包含的绝对地址的累积个数和第二地址集合包含的绝对地址的总个数,计算每个地址分组包含的绝对地址个数的累积分布频率。具体实现方式为:针对每一个地址分组,利用地址分组包含的绝对地址个数,结合公式(3),确定该地址分组的绝对地址的累积个数,其中,在公式(3)中,li为第i个地址分组的绝对地址的累积个数,si为第i个地址分组包含的绝对地址的个数,l0为0。li=si+li-1(3)通过公式(3)计算得到每一个地址分组的绝对地址的累积个数。针对每一个地址分组,利用地址分组的绝对地址的累积个数,结合公式(4),确定该地址分组包含的绝对地址个数的累积分布频率,其中,在公式(4)中,pi为第i个地址分组包含的绝对地址个数的累积分布频率,k为第二地址集合包含的绝对地址的总个数。pi=li/k(4)比如:结合上述步骤s203中的表1及其相应的示例,通过表2示出的内容,结合公式(3)和公式(4),对如何计算地址分组的绝对地址的累积个数和绝对地址个数的累积分布频率进行解释说明,其中第二地址集合n包含的绝对地址的总个数为13。表2:需要说明的是,上述表1和表2示出的内容仅用于举例说明。步骤s205:根据每个地址分组的分组取值范围和累积分布频率,构建累积分布频率图。在具体实现步骤s205的过程中,以每个地址分组的分组取值范围的中心点作为横坐标值,以每个地址分组包含的绝对地址个数的累积分布频率作为纵坐标值,构建累积分布频率图。也就是说,累积分布频率图的横坐标为每个地址分组的分组取值范围的中心点,累积分布频率图的纵坐标为累积分布频率。步骤s206:基于每个地址分组对应的累积分布频率和分组取值范围,计算累积分布频率图中每个地址分组的分组斜率。在具体实现步骤s206的过程中,利用公式(5),计算所构建的累积分布频率图中每个地址分组的分组斜率,在公式(5)中,gi为第i个地址分组的分组斜率,pi为第i个地址分组包含的绝对地址个数的累积分布频率,ci为第i个地址分组的分组取值范围的中心点。gi=(pi+1-pi)/(ci+1-ci)(5)步骤s207:确定分组斜率最大的地址分组为第一目标地址分组,以及确定第一目标地址分组的下一个地址分组为第二目标地址分组。在具体实现步骤s207的过程中,计算得到每个地址分组的分组斜率后,从中选择分组斜率最大的地址分组为第一目标地址分组。由上述步骤s203的内容可知,多个地址分组按照自身对应的分组取值范围排序,将第一目标地址分组的下一个地址分组作为第二目标地址分组。步骤s208:确定第一目标地址分组或第二目标地址分组的分组取值范围为目标固件的装载基址范围。在具体实现步骤s208的过程中,将第一目标地址分组(分组斜率最大)或第二目标地址分组的分组取值范围作为目标固件的装载基址范围。可以理解的是,预先设置相应的选择条件,当第一目标地址分组满足该选择条件时,将该第一目标地址分组的分组取值范围作为目标固件的装载基址范围。当第一目标地址分组不满足该选择条件时,将第二目标地址分组的分组取值范围作为目标固件的装载基址范围。比如:将选择条件设置为普通情况对应的条件,当第一目标地址分组满足该选择条件时,也就是在普通情况下,将该第一目标地址分组的分组取值范围作为目标固件的装载基址范围。当第一目标地址分组不满足该选择条件时,也就是在特殊情况下,将第二目标地址分组的分组取值范围作为目标固件的装载基址范围。又比如:假设每个地址分组的分组取值范围的长度为10,且假设第一目标地址分组(分组斜率最大)的分组取值范围为[21,30],第二目标地址分组的分组取值范围为,[31,40]。在普通情况下,第一目标地址分组的分组取值范围[21,30]即为目标固件的装载地址取值范围。相应的,在特殊情况下,第二目标地址分组的分组取值范围[31,40]即为目标固件的装载地址取值范围。优选的,确定目标固件的装载基址范围之后,利用装载基址范围,结合指定的装载基址确定方法,确定目标固件的装载基址。优选的,在确定目标固件的装载基址后,可利用相应的反汇编工具验证所确定的装载基址的正确性。比如:假设所确定的目标固件的装载基址为0xc3421000,利用idapro(某种反汇编工具)加载目标固件的文件,设置目标固件对应的处理器类型,设置装载基址为0xc3421000。当所获取的数据符合预设检验要求,则确定通过上述各个步骤所确定的目标固件的装载基址正确无误。该预设检验要求为:反汇编代码结构清晰且有意义,确定字符串交叉引用匹配正确,具有完整的二进制函数结构,二进制函数存在匹配的序言和尾声。在本发明实施例中,通过对目标固件中的目标指令所加载的绝对地址进行去重处理和排序处理,得到第二地址集合。将第二地址集合划分为多个地址分组,并计算每个地址分组的绝对地址个数的累积分布频率。利用每个地址分组的分组取值范围和累积分布频率,构建累积分布频率图,计算累积分布频率图中每个地址分组的分组斜率,确定分组斜率最大的第一目标地址分组,及确定第一目标地址分组的下一个地址分组为第二目标地址分组。将第一目标地址分组或第二目标地址分组的分组取值范围作为目标固件的装载基址范围。不需要依赖逆向工程师确定装载基址范围,提高确定装载基址范围的效率和保证装载基址范围的确定准确性。为更好解释说明如何确定目标固件的装载基址范围,通过过程b1至b6示出的内容进行举例说明。b1、假设从目标固件识别出28191个ldr指令,也就是第一地址多重集中包含了28191个ldr指令加载的绝对地址。b2、对第一地址多重集中的28191个绝对地址进行去重处理和排序处理后,得到包含12656个绝对地址的第二地址集合,其中,第二地址集合中的绝对地址均已完成排序。b3、假设目标固件的文件大小为5679356字节(5.41mb),也就是每个地址分组的分组取值范围的长度为5679356,且假设第二地址集合中绝对地址的最小值为1,最大值为4294967295,结合上述公式(2),第二地址集合的分组数目为:(4294967295-1)/5679356=756.2(向上取整),即将第二地址集合划分为757个地址分组。b4、将第二地址集合的12656个绝对地址划分为757个地址分组,并结合上述公式(3)和公式(4),统计每个地址分组的绝对地址的累积个数,并依据每个地址分组的累积个数,计算每个地址分组的绝对地址个数的累积分布频率。b5、根据每个地址分组的分组取值范围和累积分布频率,构建累积分布频率图,该累积分布频率图如图5示出的累积分布频率图的示意图。b6、计算图5示出的累积分布频率图中每个地址分组的分组斜率,确定分组斜率最大的第一目标地址分组,以及确定第一目标地址分组的下一个地址分组为第二目标地址分组,第一目标地址分组和第二目标地址分组如图5中由椭圆圈出的部分,其中,第一目标地址分组的分组取值范围为[533859465,539538821],第二目标地址分组的分组取值范围为[539538821,545218177]。假设第一目标地址分组满足预设的选择条件,则将第一目标地址分组的分组取值范围作为目标固件的装载基址范围,具体实现中,将[533859465,539538821]转换为十六进制得到[0x1fd20c89,0x2028b585],则目标固件的装载基址范围为[0x1fd20c89,0x2028b585]。需要说明的是,图5中的(533859465,539538821,30%)中的“30%”为累积分布频率。与上述本发明实施例提供的一种固件的装载基址范围的确定方法相对应,参见图6,本发明实施例还提供一种固件的装载基址范围的确定系统的结构框图,该确定系统包括:搜索单元601、处理单元602、划分单元603、统计单元604、构建单元605、计算单元606、第一确定单元607和第二确定单元608;搜索单元601,用于搜索目标固件中用于加载绝对地址的目标指令,并将每一目标指令所加载的绝对地址添加至预设的第一地址多重集中。在具体实现中,搜索单元601具体用于:搜索目标固件中的ldr指令,将每一ldr指令所加载的绝对地址添加至预设的第一地址多重集中。处理单元602,用于对第一地址多重集包含的绝对地址进行去重处理和排序处理,得到第二地址集合。划分单元603,用于根据目标固件的文件大小和第二地址集合包含的绝对地址的取值范围,将第二地址集合划分为多个地址分组,多个地址分组按照自身对应的分组取值范围排序。在具体实现中,划分单元603具体用于:利用上述公式(2),确定第二地址集合的分组数目;根据分组数目,以目标固件的文件大小为分组取值范围的长度,将第二地址集合划分为v个地址分组。统计单元604,用于统计每个地址分组包含的绝对地址个数的累积分布频率。在具体实现中,统计单元604具体用于:针对每一个地址分组,利用地址分组包含的绝对地址个数,结合上述公式(3),确定地址分组的绝对地址的累积个数;针对每一个地址分组,利用地址分组的绝对地址的累积个数,结合上述公式(4),确定地址分组包含的绝对地址个数的累积分布频率。计算单元606,用于基于每个地址分组对应的累积分布频率和分组取值范围,计算累积分布频率图中每个地址分组的分组斜率。在具体实现中,计算单元具体用于:利用公式(5),计算累积分布频率图中每个地址分组的分组斜率。第一确定单元607,用于确定分组斜率最大的地址分组为第一目标地址分组,以及确定第一目标地址分组的下一个地址分组为第二目标地址分组。第二确定单元608,用于确定第一目标地址分组或第二目标地址分组的分组取值范围为目标固件的装载基址范围。在本发明实施例中,通过对目标固件中的目标指令所加载的绝对地址进行去重处理和排序处理,得到第二地址集合。将第二地址集合划分为多个地址分组,并计算每个地址分组的绝对地址个数的累积分布频率。利用每个地址分组的分组取值范围和累积分布频率,构建累积分布频率图,计算累积分布频率图中每个地址分组的分组斜率,确定分组斜率最大的第一目标地址分组,及确定第一目标地址分组的下一个地址分组为第二目标地址分组。将第一目标地址分组或第二目标地址分组的分组取值范围作为目标固件的装载基址范围。不需要依赖逆向工程师确定装载基址范围,提高确定装载基址范围的效率和保证装载基址范围的确定准确性。优选的,结合图6示出的内容,该确定系统还包括:基址确定单元,用于利用装载基址范围,确定目标固件的装载基址。综上所述,本发明实施例提供一种固件的装载基址范围的确定方法及系统,通过对目标固件中的目标指令所加载的绝对地址进行去重处理和排序处理,得到第二地址集合。将第二地址集合划分为多个地址分组,并计算每个地址分组的绝对地址个数的累积分布频率。利用每个地址分组的分组取值范围和累积分布频率,构建累积分布频率图,计算累积分布频率图中每个地址分组的分组斜率,确定分组斜率最大的第一目标地址分组,及确定第一目标地址分组的下一个地址分组为第二目标地址分组。将第一目标地址分组或第二目标地址分组的分组取值范围作为目标固件的装载基址范围。不需要依赖逆向工程师确定装载基址范围,提高确定装载基址范围的效率和保证装载基址范围的确定准确性。本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1