一种基于跳转表定位ARM固件装载基址的方法和装置制造方法及图纸

技术编号:16427619 阅读:30 留言:0更新日期:2017-10-21 22:06
本申请公开了一种基于跳转表定位ARM固件装载基址的方法和装置。该方法在确定固件中switch语句编译生成的跳转表后,对跳转表中存储的内存地址进行排序,并选取最小的内存地址作为switch语句中第一个case语句块的内存地址。进而,确定所述第一case语句块的偏移量,根据所述第一case语句块的内存地址以及所述偏移量,计算并输出所述固件装载基址。本发明专利技术可实现对固件装载基址的定位,从而更加有效地对固件进行逆向工程。

A method and apparatus for jump table positioning based on ARM firmware loader base

The invention discloses a method and a device for positioning ARM jumplists firmware loader based on base. The method to determine the firmware in the switch language compiler generated after the memory address of the jump table, storage table jump to sort and select the minimum memory address as the memory address of the switch statement in the first case block. Then, determine the offset of the first case block, according to the memory address of the first case block and the offset, calculate and output the firmware loader base. The invention can realize the positioning of the firmware loader base, and thus more effectively the reverse engineering of firmware.

【技术实现步骤摘要】
一种基于跳转表定位ARM固件装载基址的方法和装置
本申请涉及软件领域,更具体地说,涉及一种基于跳转表定位ARM固件装载基址的方法和装置。
技术介绍
嵌入式设备已经在生活变得越来越常见,比如数码摄像机、打印机、智能手表、固态盘等。所有这些设备运行着一个特殊软件,通常称为固件。固件是嵌入式设备的灵魂,因为一些嵌入式设备除了固件以外没有其它软件组成,因此固件也就很大程度上决定着嵌入式设备的功能及性能。和传统软件一样,嵌入式设备的固件通常有缺陷或者漏洞,可以导致设备失效或者安全威胁。当需要分析固件的安全性或者维护遗留设备时,需要对固件进行逆向工程。逆向工程(ReverseEngineering)是指从可运行的软件产品出发,运用反汇编、反编译等技术,对软件产品进行逆向拆解和分析,推导出软件产品的设计原理、结构、算法、处理过程、运行方法及相关文档等。在逆向工程中,当反汇编固件时,需要已知固件的运行环境的处理器类型和固件的装载基址。在对嵌入式系统固件进行逆向工程时,我们通常可以获得嵌入式系统的处理器类型,而无法得到固件的装载基址。
技术实现思路
有鉴于此,本申请提供一种基于跳转表定位ARM固件装载基址的方法和装置,以实现固件装载基址的定位。为了实现上述目的,现提出的方案如下:一种基于跳转表定位ARM固件装载基址的方法,包括:获取固件中switch语句编译生成的跳转表;对所述跳转表中存储的内存地址进行排序,选取最小的内存地址作为所述switch语句中第一个case语句块的内存地址;确定所述第一个case语句块的偏移量;根据所述第一个case语句块的内存地址以及所述偏移量,计算并输出所述固件装载基址。优选的,所述获取固件中switch语句的跳转表,包括:依次对固件中switch语句的指令代码进行检测,以判断当前位置最前面三条指令代码是否依次为CMP指令、LDRLS指令以及B指令;若是,则继续对所述B指令后的指令代码进行检测,以获取所述跳转表;若否,则跳过当前指令代码,对下一条指令代码进行检测。优选的,所述计算并输出所述固件装载基址,之后还包括:判断固件中switch语句的所有指令代码是否检测完毕;若是,则结束对固件装载基址的定位过程;若否,则继续对剩余的指令代码进行检测。优选的,所述确定所述第一个case语句块偏移量,包括:依次对固件中switch语句的指令代码进行检测,当检测到所述第一case语句块时,记录所述第一case语句块与固件文件起始位置之间的偏移量。一种基于跳转表定位ARM固件装载基址的装置,包括:跳转表确定单元,用于获取固件中switch语句编译生成的跳转表;语句块内存地址确定单元,用于对所述跳转表中存储的内存地址进行排序,选取最小的内存地址作为所述switch语句中第一个case语句块的内存地址;语句块偏移量确定单元,用于确定所述第一个case语句块与所述固件文件起始位置的偏移量;根据所述第一个case语句块的内存地址以及所述偏移量,计算并输出所述固件装载基址。优选的,所述跳转表确定单元具体用于:依次对固件中switch语句的指令代码进行检测,以判断当前位置最前面三条指令代码是否依次为CMP指令、LDRLS指令以及B指令;若是,则继续对所述B指令后的指令代码进行检测,以获取所述跳转表;若否,则跳过当前指令代码,对下一条指令代码进行检测。优选的,还包括:判断单元,用于判断固件的所有指令代码是否检测完毕;若是,则结束对固件装载基址的定位过程;若否,则继续对剩余的指令代码进行检测。优选的,所述语句块偏移量确定单元具体用于:依次对固件中switch语句的指令代码进行检测,当检测到所述第一个case语句块时,记录所述第一个case语句块与固件文件起始位置之间的偏移量。经由上述技术方案可知,本申请公开了一种基于跳转表定位ARM固件装载基址的方法和装置。该方法在确定固件中switch语句的跳转表后,对跳转表中存储的内存地址进行排序,并选取最小的内存地址作为switch语句中第一个case语句块的内存地址。进而,确定所述第一个case语句块的偏移量,根据所述第一个case语句块的内存地址以及所述偏移量,计算并输出所述固件装载基址。本专利技术可实现对固件装载基址的定位,从而实现更加有效地对固件的逆向工程。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。图1示出了本专利技术一个实施例公开的一种基于跳转表定位ARM固件装载基址的方法的流程示意图;图2示出了switch语句的汇编模型;图3示出了本专利技术公开的固件装载示意图;图4示出了本专利技术另一个实施例公开的一种基于跳转表定位ARM固件装载基址的装置的结构示意图。具体实施方式下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。参见图1示出了本专利技术一个实施例公开的一种基于跳转表定位ARM固件装载基址的方法的流程示意图。在本实施例中,该方法包括:S101:获取固件中switch语句编译生成的跳转表。当固件的源代码中存在switch语句时,并且switch中case的值是连续的并且是稠密的,gcc编译器通常把这些case的值通常存储在一个跳转表中,跳转表中的数字指定了所有的case语句块的内存地址,参见图2示出了switch语句的汇编模型。由图2可知,一般情况下跳转表之前为B指令,LDRLS指令,跳转表之后为case语句块。具体的,可依次对固件中switch语句的指令代码进行检测,判断当前位置最前面三条指令代码是否依次为CMP指令、LDRLS指令以及B指令,若是,则继续对所述B指令后的指令代码进行检测,以获取所述跳转表。若否,则跳过当前指令代码,对下一条指令代码进行检测。S102:对所述跳转表中存储的内存地址进行排序,选取最小的内存地址作为所述switch语句中第一个case语句块的内存地址。跳转表中包含n个内存地址,分别为addr_1、addr_2、…、addr_n,一般情况下,这n个内存地址中最小的内存地址指向跳转表后第一个case语句块,即jt[0]。S103:确定所述第一个case语句块的偏移量。具体的,依次对固件中switch语句编译产生的的指令代码进行检测,当检测到所述第一个case语句块时,记录所述第一个case语句块与固件文件起始位置之间的偏移量,即offset_case1。S104:根据所述第一个case语句块的内存地址以及所述偏移量,计算并输出所述固件装载基址。参见图3示出了本专利技术公开的固件装载示意图。由图3可知,当case语句块的偏移量和内存地址确定后,即可计算该固件的装载基址,即固件的装载基址等于case语句块的内存地址与偏移量的差。S105:判断固件的所有指令代码是否检测完毕。若是,则结束对固件装载基址的定位过程;若否,则继续对剩余的指令代码进行本文档来自技高网...
一种基于跳转表定位ARM固件装载基址的方法和装置

【技术保护点】
一种基于跳转表定位ARM固件装载基址的方法,其特征在于,包括:获取固件中switch语句编译生成的跳转表;对所述跳转表中存储的内存地址进行排序,选取最小的内存地址作为所述switch语句中第一个case语句块的内存地址;确定所述第一case语句块的偏移量;根据所述第一case语句块的内存地址以及所述偏移量,计算并输出所述固件装载基址。

【技术特征摘要】
1.一种基于跳转表定位ARM固件装载基址的方法,其特征在于,包括:获取固件中switch语句编译生成的跳转表;对所述跳转表中存储的内存地址进行排序,选取最小的内存地址作为所述switch语句中第一个case语句块的内存地址;确定所述第一case语句块的偏移量;根据所述第一case语句块的内存地址以及所述偏移量,计算并输出所述固件装载基址。2.根据权利要求1所述的方法,其特征在于,所述获取固件中switch语句编译生成的跳转表,包括:依次对固件中的指令代码进行检测,以判断当前位置的三条指令代码是否依次为CMP指令、LDRLS指令以及B指令;若是,则继续对所述B指令后的指令代码进行检测,以获取所述跳转表;若否,则跳过当前指令代码,对下一条指令代码进行检测。3.根据权利要求2所述的方法,其特征在于,所述计算并输出所述固件装载基址,之后还包括:判断固件所有指令代码是否检测完毕;若是,则结束对固件装载基址的定位过程;若否,则继续对剩余的指令代码进行检测。4.根据权利要求1所述的方法,其特征在于,所述确定所述第一case语句块偏移量,包括:依次对固件中switch语句的指令代码进行检测,当检测到所述第一case语句块时,记录所述第一case语句块与固件文件起始位置之间的偏移量。5.一种基于跳转表定位ARM固件装...

【专利技术属性】
技术研发人员:朱瑞瑾张宝峰毛军捷谭毓安骆扬
申请(专利权)人:中国信息安全测评中心
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1