b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

嵌入式软件反编译中静态库功能识别的实现方法

电脑杂谈  发布时间:2020-04-07 11:39:58  来源:网络整理

反编译.a静态库代码_易语言511可静态编译_lua编译静态库

专利名称: 嵌入式软件反编译中静态库功能识别的实现方法

技术领域:

本发明涉及嵌入式软件反编译技术领域,尤其涉及一种嵌入式软件反编译中静态库功能的识别和实现方法.

背景技术:

逆向工程是分析对象以了解其工作原理,目的是复制或增强对象. 它是从较旧的行业中获得的一种实践,现在经常在计算机硬件和软件上使用. 例如,在汽车工业中,制造商可以购买竞争对手的车辆,进行拆卸,然后检查车辆的焊点,铅封和车辆的其他组件,以达到使用类似零件来增强其车辆的目的.

软件的逆向工程包括使用编程语言语句将程序的机器代码(发送到逻辑处理器的0和1的字符串)逆转回编写的源代码. 软件逆向工程可能希望实现以下目标. 由于原始代码丢失,因此您想重新获得该程序的原始代码. 研究程序如何运行特定操作;改善程序的性能;修复程序错误(当原始代码不可用时,更正程序中的错误);识别程序中的恶意内容,例如病毒;或修改为微处理器编写的程序,以适应具有不同设计的微处理器. 仅出于复制程序的目的进行的逆向工程构成侵犯版权,并且是非法的.

在某些情况下,软件的许可使用明确禁止反向工程. 进行软件逆向工程的人员可能会使用某些工具来分解程序. 一种工具是十六进制转储设备反编译.a静态库代码,该设备以十六进制格式(比二进制格式更易于阅读)打印或显示程序的二进制数字. 通过了解代表处理器指令的位形式和指令长度,逆向工程师可以识别程序的特定部分以查看其工作原理.

lua编译静态库_易语言511可静态编译_反编译.a静态库代码

另一个常用工具是解析器. 解析器读取二进制代码,然后以文本形式显示每个可执行指令. 解析器无法区分可执行指令和程序所使用的数据,因此使用了调试器,这使解析器可以避免分解程序的数据部分. 解密主机可以使用这些工具来修改代码并获得对计算机系统的访问权限或造成其他危害.

硬件逆向工程涉及拆卸设备以查看其工作方式. 例如,如果处理器制造商想了解竞争对手的处理器如何工作,他们可以购买竞争对手的处理器,将其分解,然后再制造类似的处理器. 但是,此过程在许多国家都是非法的. 通常,硬件逆向工程需要大量的知识并且非常昂贵. 另一类逆向工程涉及生产所制造零件的3-D图案(当其蓝图不可用时)以重新制造零件. 为了对零件进行逆向工程,需要使用坐标测量机(CMM)测量该零件. 测量时,将生成3D线框图像并将其显示在监视器上. 测量完成后,将测量线框图像. 使用这些方法的任何零件都可以进行逆向工程.

动态跟踪和调试可以一个一个地跟踪和运行程序. 实际上,这就是使用单步中断和断点中断的原因,并且当前大多数跟踪和调试软件都使用这两个中断.

单步中断(INT1)是由机器内部状态引起的中断. 设置系统标志寄存器的TF标志(单步跟踪标志)后,将自动生成单步中断,以使CPU能够在执行指令后停止并显示每个寄存器的内容.

断点中断(INT3)是软中断. 软中断也称为陷阱指令. 当CPU执行捕获指令时,它将进入断点中断服务程序,并且断点中断服务程序将完成中断. 在该点显示每个寄存器的内容.

反编译是一种将目标代码转换为等效的高级语言形式代码的技术. 它是软件逆向工程的重要组成部分. 反编译分为基于可执行程序的反编译和基于虚拟机指令的反编译. 库功能的识别是整个反编译过程的重要组成部分.

发明内容

lua编译静态库_易语言511可静态编译_反编译.a静态库代码

本发明的目的是提供一种在嵌入式软件反编译中实现静态库功能识别的方法.

本发明为解决其技术问题而采用的技术方案如下: 1)中间代码识别利用汇编指令和机器指令之间的对应关系生成可执行程序的汇编代码. 2)提取功能模块. 功能模块以“ CALL地址”结尾. “ A”的形式出现在地址A的起始地址上,因此识别功能模块就是从“ CALL地址A”中的地址A开始识别模块,并通过以下方式确定功能模块: 寻找功能模块的起始地址和结束地址; 3)确定使用的编译器不同编译器附带的动态库的名称是不同的. 借助于编译器生成的其他特殊信息,可以很好地实现识别用于执行程序的编译器的目的. 4)提取相应的静态库可以通过阅读每个编译器的用户手册获取其静态库,并通过分析文件格式来获取库文件中所有函数的函数名称和功能代码,以及一个静态的可以建立其静态库功能;

5)识别库函数对于给定的功能模块代码,请从静态库创建的中查找一个函数,并且本节中功能模块代码的指令长度和操作代码序列相同.

与背景技术相比,本发明具有有益的效果,即本发明是一种用于识别嵌入式软件反编译中的静态库功能的方法. 其主要功能是结合反编译的特征. 该库将用户的功能模块与编译器的库函数进行匹配,并将中间代码中调用函数过程代码形式的函数入口地址替换为相应的库函数名称,以实现对静态库函数的识别.

(1)高效率. 该方法实现了嵌入式软件反编译中静态库功能的识别,有利于加快反编译速度,提高反编译效率.

(2)实用性. 将用户的功能模块与静态库的编译器库函数进行匹配,有助于将目标代码转换为等效的高级语言反编译.

附图是本发明实施过程的;具体实施方式

易语言511可静态编译_反编译.a静态库代码_lua编译静态库

本发明是嵌入式软件反编译中静态库功能识别的一种实现方法,下面结合

具体实施过程.

1)中间代码识别将执行程序转换为相应的中间代码是识别库功能的关键. 此步骤也是反编译中的拆卸过程. 本发明使用汇编指令和机器指令之间的对应关系来生成用于可执行程序的汇编代码. 生成的反汇编代码如下表所示

第一列(如“ 01006CBC”)是代码加载地址,第二列(如“ FF 75 08”)是指令的二进制代码,后继的“ push”是相应汇编指令Code的操作,以及最后是指令的操作数.

2)提取功能模块提取功能模块是为了识别出现在中间代码中的功能模块. 对于中间代码,由于功能模块最终以“调用地址A”的形式出现在地址A的开头,因此,要识别功能模块,就是要识别以“调用地址A”中的地址A开头的模块. 根据函数的定义和编译的特性,最终以“ retn”的形式返回中间代码形式的函数,因此根据程序本身的过程,以“”的返回形式为基础retn”,您可以将所有CALL都放在中间代码中. 识别出现在指令中的功能模块.

3)确定所使用的编译器. 编译器随附的动态库的名称不同. 借助于编译器生成的其他特殊信息,可以很好地实现识别用于执行程序的编译器的目的. 根据实际实现程序的特性,如果执行程序引用了动态库,则可以通过其动态库识别相应的编译器.

4)提取相应的静态库可以通过查看编译器的用户手册来获取每个编译器的静态库,并可以通过分析文件格式来获取库文件中所有函数的函数名称和功能代码,例如对于函数“ Fopen”,通过此方法可以获得下表

反编译.a静态库代码_易语言511可静态编译_lua编译静态库

通过获取所有库函数的函数名称和功能代码,可以建立其静态库函数的静态,并且所建立的的格式如下表所示

因为链接时编译器将执行重定位操作,所以类似“调用0000000F”指令的最后一个操作数将发生更改,因此上述构建的过程不会输入该操作数.

5)识别库函数对于给定的功能模块代码,请从静态库创建的中查找一个函数,并且本节中功能模块代码的指令长度和操作代码序列相同.

索赔

1. 嵌入式软件反编译中静态库功能识别的实现方法反编译.a静态库代码,其特征在于: 1)中间代码识别利用汇编指令与机器指令之间的对应关系生成可执行程序的汇编代码; 2)提取功能模块的功能该模块最终以“呼叫地址A”的形式出现在地址A的起始地址,因此要识别功能模块,是通过查看从“呼叫地址A”中的地址A开始的模块. 输入功能模块的起始地址并终止该地址以确定功能模块; 3)确定使用的编译器不同的编译器具有不同的动态库名称. 借助于编译器生成的其他特殊信息,可以很好地实现识别用于执行程序的编译器的目的. ; 4)提取相应的静态库. 可以通过阅读每个编译器的用户手册来获得其静态库,并且通过分析文件格式来建立其静态库功能,可以获取库文件中所有函数的功能名称,功能代码等. 静态; 5)识别库功能对于给定的功能模块代码段,从静态库中构建,以找到与操作代码序列和代码功能模块段的指令长度相等的功能.

全文摘要

本发明公开了一种嵌入式软件反编译中静态库功能识别的实现方法. 本发明的方法结合了整个反编译过程的特征,以使静态库的用户功能模块与编译器的库功能相匹配,并且以中间调用函数过程代码的形式将函数入口地址进行匹配代码用相应的库函数名称替换,以标识静态库函数. 该方法实现了嵌入式软件反编译中静态库功能的识别,有利于将目标代码转换为等效的高级语言反编译.

文档编号G06F9 / 44GK1818863SQ20061004980

公开日期2006年8月16日申请日期2006年3月13日优先日期2006年3月13日

发明家陈天洲,胡伟,谢斌,赵毅申请人: 浙江大学


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-166993-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...