CN102968330B - 一种固件代码反汇编中端模式差异的处理方法 - Google Patents
一种固件代码反汇编中端模式差异的处理方法 Download PDFInfo
- Publication number
- CN102968330B CN102968330B CN201210489305.4A CN201210489305A CN102968330B CN 102968330 B CN102968330 B CN 102968330B CN 201210489305 A CN201210489305 A CN 201210489305A CN 102968330 B CN102968330 B CN 102968330B
- Authority
- CN
- China
- Prior art keywords
- unit
- machine code
- array
- dis
- assembling
- 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.)
- Expired - Fee Related
Links
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明涉及一种固件代码反汇编中端模式差异的处理方法。首先初始化机器码;然后由检测模块进行机器码检测,检测机器码的长度L,保证L是N的整数倍,若不足则补零,将数组C转换成数组D。其中N是依据不同硬件情况决定,若硬件的存储单元大小为M bit,则N=M/2;再由局部逆置模块将数组D中的元素以每N个为一个单元U,单元内部对半调换;最后由全局逆置模块将单元U编号为0、1、……、n-1,分别将编号之和为n-1的两个单元的内容进行逆置。利用本发明可以有效解决各种微处理器的反汇编机器码的正确性问题,在反汇编之前对智能电能表内部MCU芯片提取的机器码的顺序加以调整,提高最终生成的高级语言的精确度。
Description
技术领域
本发明涉及一种涉及计算机学科中的硬件结构、固件逆向工程技术,尤其是涉及一种固件代码反汇编中端模式差异的处理方法。
背景技术
逆向工程技术是指分析特定目标系统的结构组成及其相互关系并建立更高级更具抽象化的系统的过程。固件代码的反汇编就是把目标固件中的机器代码转换为汇编代码的过程,亦即从低级语言向高级语言的转换,该技术被广泛地运用于计算机软件破解、病毒分析以及软件汉化等领域。
固件逆向工程是逆向工程技术的重要分支,其特征主要是由固件的差异引起的,计算机中的端模式差异是一个典型例子。
端模式差异,简而言之,就是计算机中内存中的数据存放顺序不同:数据的高位保存在内存的低地址,而数据的低位保存在内存的高地址中,这样的存储模式称为大端(Big-Endian)模式;与之相反,数据的高位保存在内存的高地址,而数据的低位保存在内存的低地址中,这样的存储模式称为小端(Little-Endian)模式。
由于内存中数据的存放方式的差异,固件代码反汇编的结果也会大相径庭。尽管近年来针对固件的反汇编工具不断涌现,其中有IDA、W32Dasm等,但是这些工具大多没有明确说明解决端模式差异的解决方案。
发明内容
本发明的上述技术问题主要是通过下述技术方案得以解决的:
提出问题:计算机端模式差异,大端和小端会影响机器码的真实 顺序和值。一般地,在反汇编之前要做的是将代码从固件之中提取出来,根据给定的硬件,可以很容易得知其内部的端模式,但是去除硬件的约束,任意给出一段机器码,怎样获知其运行环境下的端模式信息进而合理地反汇编?
分析问题:在运行环境确定,即微处理器型号已知的情况下,我们可以直接得到两种情况即两种端模式下的高级指令,分别进行语法语义判断,选取其中最合理的作为最优解,因为原始机器码表征的高级程序显然是确定并且在语法语义上是正确的,这样得到的最优解显然也是最接近原始高级程序的。
解决问题:反汇编的流程是由二进制代码得到指令,二进制代码的顺序直接影响最终结果。而端模式的差异恰恰体现在机器码的顺序差异方面。因此解决问题的思路即在反汇编处理(静态扫描或者动态扫描)之前调整机器码为合理的顺序。
因此,本发明涉及的一种固件代码反汇编中端模式差异的处理方法,其特征在于,包括以下步骤:
步骤1:由初始化模块将从芯片中提取的机器码存放在数组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-1,分别将编号之和为n-1的两个单元的内容进行逆置,即0单元和n-1单元交换内容;1单元和n-2单元交换内容;2单元和(n-3)单元交换内容……m单元和(n-m-1)单元交换内容。
因此,本发明具有如下优点:本发明根据硬件不同产生的端模式差异,调整机器代码顺序,有助于提升反汇编的准确度,并能有效解决各种微处理器的反汇编机器码的正确性问题。
附图说明
图1是本发明中Big-Endian模式下内存和数据映射示意图。
图2是本发明中Little-Endian模式下内存和数据映射示意图。
图3是本发明中Little-Endian模式下机器码处理示意图。
具体实施方式
下面通过实施例,并结合附图,对本发明的技术方案作进一步具体的说明。
实施例:
本发明的方法的目的是解决反汇编过程中微处理器端模式的差异引起的结果的不准确性,为了方便阐述,现在以M16C微处理器的反汇编为例进行说明。图1和图2分别是Big-Endian模式和Little-Endian模式下的内存和数据的映射示意图,从提取机器码的角度出发,我们默认提取出来的机器码的内存实际地址是从小到大递增的方向,那么在Big-Endian模式下,由于地址的方向性未被破坏,因此可以直接进行下一步的反汇编;而在Little-Endian模式下,机器码的地址递增的方向与真实指令的字节方向相反,所以需要进行处理。
在Little-Endian模式下,考虑M16C嵌入式微处理器,其内存 单元为8位,处理的过程如图3所示,假设提取的机器码用十六进制表示为“0123456789ABCDEF02468ACE”,那么在Little-Endian模式下,进行反汇编的代码应当为“CE8A4602EFCDAB8967452301”。经过分析发现,这一步的过程等价为:
这样,我们得到了在Little-Endian模式下机器码的预处理方式,因此本发明设计出处理代码的方法如下:
(1)初始化,机器码存放在数组中,每个数组元素用十六进制表示;
(2)将机器码长度设置为4的整数倍,不足的部分添零;
(3)部分逆置:将存放机器码的数组以4个元素为一个单元进行分割,并将每个单元内部对半逆置,即高低字节的逆置;
(4)前后逆置:将上面处理完的每个单元编号为0、1、……、n-1,分别将编号和为n-1的两个单元的内容进行逆置,即0单元和(n-1)单元交换内容;1单元和(n-2)单元交换内容;2单元和(n-3)单元交换内容……;
(5)结束。
整个方法中,将机器码长度拓展为4的整数倍是为了方便后面的循环。方法涉及到两个阶段的逆置:部分逆置过程是为了调整每个WORD的高低字节,此过程较为简单,采用一维数组即可实现;前后 逆置过程是为了得到正确的指令组合,此过程较为复杂,需要采用二维数组结构实现。
由于无法获知微处理器的端模式,我们得到两种机器码,分别进行反汇编得到两种不同的结果,一个实例的结果如表一(对应Big-Endian模式反汇编)和表二(对应Little-Endian模式反汇编)所示。
表一
表二
得到反汇编的指令结果后,再进行语法语义判断,这一步依据的是不同的微处理器的程序特征和基本的语法语义检查。对于较为复杂的反汇编指令,难以简单判断,可以采用代码结构分析技术加以决策,此处不做详细分析。由两幅图的对照结果容易发现,Big-Endian模式的程序结果偏离M16C的特点较大,而Litt-Endian模式的程序结果则符合所属特征。相比之下,得出结论:本段机器码在M16C内存中是按照Litt-Endian模式存储的。
本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。
Claims (1)
1.一种固件代码反汇编中端模式差异的处理方法,其特征在于,包括以下步骤:
步骤1:由初始化模块将从芯片中提取的机器码存放在数组C中;通常情况下机器码样本为二进制形式或十六进制形式,若为二进制形式,则将其转换为十六进制形式;
步骤2:由检测模块进行机器码检测,即:检测机器码的长度L,保证L是N的整数倍,若不足则补零,将步骤1中的数组C转换成数组D,N是依据不同硬件情况决定,若硬件的存储单元大小为M bit,则N=M/2;
步骤3:由局部逆置模块将步骤2中的数组D中的元素以每N个元素为一个单元U,单元内部对半调换,即前N/2个元素和后N/2个元素整体调换位置;
步骤4:由全局逆置模块将步骤3中的多个单元U编号为0、1、……、n-1,分别将编号之和为n-1的两个单元的内容进行逆置,即0单元和n-1单元交换内容;1单元和n-2单元交换内容;2单元和(n-3)单元交换内容……m单元和(n-m-1)单元交换内容;n为正整数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210489305.4A CN102968330B (zh) | 2012-11-27 | 2012-11-27 | 一种固件代码反汇编中端模式差异的处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210489305.4A CN102968330B (zh) | 2012-11-27 | 2012-11-27 | 一种固件代码反汇编中端模式差异的处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102968330A CN102968330A (zh) | 2013-03-13 |
CN102968330B true CN102968330B (zh) | 2015-08-19 |
Family
ID=47798488
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210489305.4A Expired - Fee Related CN102968330B (zh) | 2012-11-27 | 2012-11-27 | 一种固件代码反汇编中端模式差异的处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102968330B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105044653A (zh) * | 2015-06-30 | 2015-11-11 | 武汉大学 | 一种智能电表的软件一致性检测方法 |
CN110262802B (zh) * | 2019-06-25 | 2023-02-03 | 中日龙(襄阳)机电技术开发有限公司 | 一种取出机Sequence数据的新型执行方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5630084A (en) * | 1991-04-25 | 1997-05-13 | Kabushiki Kaisha Toshiba | System for converting data in little endian to big endian and vice versa by reversing two bits of address referencing one word of four words |
CN1838666A (zh) * | 2005-03-24 | 2006-09-27 | 华为技术有限公司 | 一种跨操作系统平台的字节序转换方法 |
CN102150139A (zh) * | 2008-09-12 | 2011-08-10 | 瑞萨电子株式会社 | 数据处理装置及半导体集成电路装置 |
-
2012
- 2012-11-27 CN CN201210489305.4A patent/CN102968330B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5630084A (en) * | 1991-04-25 | 1997-05-13 | Kabushiki Kaisha Toshiba | System for converting data in little endian to big endian and vice versa by reversing two bits of address referencing one word of four words |
CN1838666A (zh) * | 2005-03-24 | 2006-09-27 | 华为技术有限公司 | 一种跨操作系统平台的字节序转换方法 |
CN102150139A (zh) * | 2008-09-12 | 2011-08-10 | 瑞萨电子株式会社 | 数据处理装置及半导体集成电路装置 |
Also Published As
Publication number | Publication date |
---|---|
CN102968330A (zh) | 2013-03-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9954895B2 (en) | System and method for identifying phishing website | |
CN112104664B (zh) | 物联网数据的协议转换方法、装置及设备 | |
CN103345382A (zh) | 一种cpu+gpu群核超算系统及sift特征匹配并行计算方法 | |
CN102222004B (zh) | 交换机专用语言转换为c语言的方法 | |
CN107967152B (zh) | 基于最小分支路径函数胎记的软件局部抄袭证据生成方法 | |
CN102968330B (zh) | 一种固件代码反汇编中端模式差异的处理方法 | |
CN106778278A (zh) | 一种恶意文档检测方法及装置 | |
CN105096244A (zh) | 图像变换方法及其装置以及图像识别方法及其装置 | |
CN106445472A (zh) | 一种字符操作加速方法、装置、芯片、处理器 | |
CN107871128B (zh) | 一种基于svg动态图表的高鲁棒性图像识别方法 | |
CN112559954B (zh) | 基于软件定义可重构处理器的fft算法处理方法及装置 | |
CN105242932A (zh) | 一种基于delphi工具开发的软件的自动翻译方法 | |
CN107423030A (zh) | 基于fpga异构平台的马尔科夫蒙特卡洛算法加速方法 | |
CN116415718A (zh) | 能源用量的预测方法、装置、电子设备及存储介质 | |
CN102541738A (zh) | 加速多核cpu抗软错误测试的方法 | |
CN102930158A (zh) | 基于偏最小二乘的变量选择方法 | |
US10628542B2 (en) | Core-only system management interrupt | |
Wirawan et al. | Parallel DNA sequence alignment on the cell broadband engine | |
CN115734072A (zh) | 一种工业自动化设备的物联网集中监控方法及装置 | |
CN103902506A (zh) | 一种基于龙芯3b的fftw3优化方法 | |
CN104679196B (zh) | 基于处理器的自检测、异常时复位系统及其实现方法 | |
CN110334430B (zh) | 图纸中电缆托架的自动标注方法、系统、设备和存储介质 | |
CN104951618A (zh) | 一种可能性测度计算树逻辑检测模型的优化方法 | |
Payne | Rapid update cycling with delayed observations | |
CN106169094A (zh) | 一种基于分布式神经元的rnnlm系统及其设计方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150819 Termination date: 20161127 |