一种固件代码反汇编中端模式差异的处理方法

文档序号:6382351阅读:504来源:国知局
专利名称:一种固件代码反汇编中端模式差异的处理方法
技术领域
本发明涉及一种涉及计算机学科中的硬件结构、固件逆向工程技术,尤其是涉及一种固件代码反汇编中端模式差异的处理方法。
背景技术
逆向工程技术是指分析特定目标系统的结构组成及其相互关系并建立更高级更具抽象化的系统的过程。固件代码的反汇编就是把目标固件中的机器代码转换为汇编代码的过程,亦即从低级语言向高级语言的转换,该技术被广泛地运用于计算机软件破解、病毒分析以及软件汉化等领域。
固件逆向工程是逆向工程技术的重要分支,其特征主要是由固件的差异引起的,计算机中的端模式差异是一个典型例子。端模式差异,简而言之,就是计算机中内存中的数据存放顺序不同数据的高位保存在内存的低地址,而数据的低位保存在内存的高地址中,这样的存储模式称为大端(Big-Endian)模式;与之相反,数据的高位保存在内存的高地址,而数据的低位保存在内存的低地址中,这样的存储模式称为小端(Little-Endian)模式。由于内存中数据的存放方式的差异,固件代码反汇编的结果也会大相径庭。尽管近年来针对固件的反汇编工具不断涌现,其中有IDA、W32Dasm等,但是这些工具大多没有明确说明解决端模式差异的解决方案。

发明内容
本发明的上述技术问题主要是通过下述技术方案得以解决的提出问题计算机端模式差异,大端和小端会影响机器码的真实顺序和值。一般地,在反汇编之前要做的是将代码从固件之中提取出来,根据给定的硬件,可以很容易得知其内部的端模式,但是去除硬件的约束,任意给出一段机器码,怎样获知其运行环境下的端模式信息进而合理地反汇编?分析问题在运行环境确定,即微处理器型号已知的情况下,我们可以直接得到两种情况即两种端模式下的高级指令,分别进行语法语义判断,选取其中最合理的作为最优解,因为原始机器码表征的高级程序显然是确定并且在语法语义上是正确的,这样得到的最优解显然也是最接近原始高级程序的。解决问题反汇编的流程是由二进制代码得到指令,二进制代码的顺序直接影响最终结果。而端模式的差异恰恰体现在机器码的顺序差异方面。因此解决问题的思路即在反汇编处理(静态扫描或者动态扫描)之前调整机器码为合理的顺序。因此,本发明涉及的一种固件代码反汇编中端模式差异的处理方法,其特征在于,包括以下步骤步骤I :由初始化模块将从芯片中提取的机器码存放在数组C中;通常情况下机器码样本为二进制形式或十六进制形式,若为二进制形式,则将其转换为十六进制形式;
步骤2 :由检测模块进行机器码检测,即检测机器码的长度L,保证L是N的整数倍,若不足则补零,将步骤一中的数组C转换成数组D。其中N是依据不同硬件情况决定,若硬件的存储单元大小为Mbit,则N=M/2 ;步骤3 :由局部逆置模块将步骤2中的数组D中的元素以每N个元素为一个单元U,单元内部对半调换,即前N/2个元素和后N/2个元素整体调换位置;步骤4:由全局逆置模块将步骤3中的单元U编号为0、1、……、n_l,分别将编号之和为n-1的两个单元的内容进行逆置,即0单元和n-1单元交换内容;1单元和n-2单元交换内容;2单元和(n-3)单元交换内容......m单元和(n-m-1)单元交换内容。因此,本发明具有如下优点本发明根据硬件不同产生的端模式差异,调整机器代码顺序,有助于提升反汇编的准确度,并能有效解决各种微处理器的反汇编机器码的正确性问题。


图I是本发明中Big-Endian模式下内存和数据映射示意图。图2是本发明中Little-Endian模式下内存和数据映射示意图。图3是本发明中Little-Endian模式下机器码处理示意图。
具体实施例方式下面通过实施例,并结合附图,对本发明的技术方案作进一步具体的说明。实施例本发明的方法的目的是解决反汇编过程中微处理器端模式的差异引起的结果的不准确性,为了方便阐述,现在以M16C微处理器的反汇编为例进行说明。图I和图2分别是Big-Endian模式和Little-Endian模式下的内存和数据的映射示意图,从提取机器码的角度出发,我们默认提取出来的机器码的内存实际地址是从小到大递增的方向,那么在Big-Endian模式下,由于地址的方向性未被破坏,因此可以直接进行下一步的反汇编;而在Little-Endian模式下,机器码的地址递增的方向与真实指令的字节方向相反,所以需要进行处理。在Little-Endian模式下,考虑M16C嵌入式微处理器,其内存单元为8位,处理的过程如图3所示,假设提取的机器码用十六进制表示为“0123456789ABCDEF02468ACE”,那么在Little-Endian模式下,进行反汇编的代码应当为“CE8A4602EFCDAB8967452301 ”。
经过分析发现,这一步的过程等价为
权利要求
1. 一种固件代码反汇编中端模式差异的处理方法,其特征在于,包括以下步骤 步骤I :由初始化模块将从芯片中提取的机器码存放在数组C中;通常情况下机器码样本为二进制形式或十六进制形式,若为二进制形式,则将其转换为十六进制形式; 步骤2 :由检测模块进行机器码检测,即检测机器码的长度L,保证L是N的整数倍,若不足则补零,将步骤一中的数组C转换成数组D,N是依据不同硬件情况决定,若硬件的存储单元大小为M bit,则N = M / 2 ; 步骤3 由局部逆置模块将步骤2中的数组D中的元素以每N个元素为一个单元U,单元内部对半调换,即前N/2个元素和后N/2个元素整体调换位置; 步骤4:由全局逆置模块将步骤3中的单元U编号为0、1、……、n-l,分别将编号之和为η-l的两个单元的内容进行逆置,即O单元和η-l单元交换内容;1单元和n-2单元交换内容;2单元和(n-3)单元交换内容......m单元和(n-m-1)单元交换内容。
全文摘要
本发明涉及一种固件代码反汇编中端模式差异的处理方法。首先初始化机器码;然后由检测模块进行机器码检测,检测机器码的长度L,保证L是N的整数倍,若不足则补零,将数组C转换成数组D。其中N是依据不同硬件情况决定,若硬件的存储单元大小为Mbit,则N=M/2;再由局部逆置模块将数组D中的元素以每N个为一个单元U,单元内部对半调换;最后由全局逆置模块将单元U编号为0、1、……、n-1,分别将编号之和为n-1的两个单元的内容进行逆置。利用本发明可以有效解决各种微处理器的反汇编机器码的正确性问题,在反汇编之前对智能电能表内部MCU芯片提取的机器码的顺序加以调整,提高最终生成的高级语言的精确度。
文档编号G06F9/45GK102968330SQ20121048930
公开日2013年3月13日 申请日期2012年11月27日 优先权日2012年11月27日
发明者刘金硕, 王谢兵, 李少腾, 章喻龙, 刘源, 刘天晓, 王亚鸽, 曾秋梅 申请人:武汉大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1