- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第1章 软件逆向工程概述;1.1 逆向工程的概念和基本方法; 对于软件逆向工程而言,被理解的系统即软件。这一对象往往以可执行程序的形式存在。具体地讲,软件逆向工程即指通过构建通用等级的静态和动态模型来理解已知软件的结构和行为。因此,软件逆向工程的过程可以大致分为两个阶段,如图1-1所示。第一阶段是收集信息,被收集的信息可以是静态信息或动态信息。常用于收集静态信息的工具包括语法分析器、静态分析工具等,常用于收集动态信息的工具包括调试器、事件监控器等。第二阶段是信息抽象,以获得更高层的可理解的模型。此阶段得到的模型可构成不同的视图,包括动态视图、静态视图和混合视图。这些视图从不同的侧面反映了软件产品的功能、结构、处理流程、界面设计等要素。;; 从软件工程的一般过程来看,通常正向过程的先后顺序是需求分析、概要设计、详细设计和软件实现及测试。软件逆向工程的过程恰好相反,是从软件的实现起始的。但软件逆向工程的过程一般不会延伸到需求分析的层面,而是通过软件逆向工程的抽象过程得到抽象的系统模型,然后在该系统模型的基础上进行正向工程,实现一个新的; 而从更细粒度的程序实现的角度看,程序编译的过程与软件逆向工程的过程相反。图1-2给出了编译和软件逆向工程的过程流。可以看到,编译的过程是将源代码通过语法分析得到语法树,再通过中间代码生成得到控制流图和中间代码,然后通过最终代码生成得到汇编代码,再通过汇编得到机器码,最后链接为可执行程序。而软件逆向工程则是从程序的机器代码恢复出程序的高级语言结构和语义的过程,具体包括反汇编和反编译等步骤。反汇编是从机器码得到汇编语言代码,而反编译是从汇编语言代码得到高级语言结构和语义。;; 软件逆向工程的实现方法可以分为静态方法和动态方法两类。所谓静态方法,是指分析但不运行代码的方法,相比动态方法而言更为安全。常见的反汇编器IDA Pro、objdump等都采用的是静态方法。而动态方法则是指通过在虚拟环境或实际系统环境中运行和操作进???,检查进程执行过程中寄存器和内存值的实时变化的方法,常见的调试器如WinDbg、Immunity、OllyDbg、GDB等都采用的是动态方法。较为复杂的动态方法可能会将程序的二进制代码置于可控的虚拟环境中,通过虚拟环境中的CPU得到其执行轨迹,然后利用条件跳转指令泄漏路径约束信息,使用符号执行技术从执行轨迹中收集逻辑谓词,进而通过约束求解准确地推断出程序的内部逻辑。; 不同的反汇编引擎会采用不同的反汇编算法。反汇编算法首先确定需要进行反汇编的代码区域,然后读取特定地址的二进制代码并执行表查找,将二进制操作码转换为汇编语言助记符,此后对汇编语言进行格式化并输出汇编代码。如何选定下一条被反汇编的指令,不同的算法采取的策略不同。常见的策略包括线性扫描(Linear Sweep)和递归下降(Recursive Traversal)两种。GDB、WinDbg、objdump等均采用线性扫描的方法,而IDA Pro则采用的是递归下降方法。 ;1.2 软件逆向工程的应用; 软件逆向工程需解决的另一个重要问题是闭源软件的漏洞分析。这也说明了软件逆向分析不仅能应用于“恶意”软件,也能应用于“良性”软件。“良性”软件的开发过程中可能由于开发者的经验、编译器的配置等因素而引入很多漏洞,这些漏洞有时容易被攻击者利用。为了发现和分析这些潜在的漏洞,我们可以采用模糊测试(fuzzing test)或静态分析,而静态分析通常就以反汇编为基础。对“良性”软件的修改在二进制层面也有“良性”和“恶意”之分,通过反汇编和调试等逆向技术,我们可以开发出相应的补丁程序或破解程序(Exploit)。; 软件逆向工程的另一个典型应用是闭源软件的互操作性分析。如果我们只能获得一个软件的二进制码,而又要开发与其互操作的软件和插件,或者开发适用于其他硬件平台的程序(属于软件移植的范畴),那么往往需要通过逆向工程相关的技术来界定该软件的行为和接口。 此外,我们还可以利用反编译等技术来衡量编译器的正确性和安全性,验证编译器是否符合规范,寻找优化编译器输出的方法,并检查由此编译器生成的代码中是否能插入后门,从而判定编译器本身是否有安全问题。;1.3 软件逆向工程的合法性; 通常,当软件版权所有者无法进行软件错误修正时,我们可以通过逆向工程对软件错误进行修正和破解。而在不违反专利权或商业秘密保护的前提下,可以通过逆向工程确定软件中不受版权保护的部分(如一些算法)。 一般针对软件逆向工程的法规通常声明如下合法性限制: ① 逆向工程人员为合法用户; ② 逆向工程以互操作为目的,仅对实现互操作程序所必要的那部分程序进行逆向工程; ③ 需获取的“必要信息”不能
您可能关注的文档
- 机械专业英语(第三版)第25章.ppt
- 机械专业英语(第三版)第27章.ppt
- 机械专业英语(第三版)第29章.ppt
- 机械专业英语(第三版)第30章.ppt
- 机械专业英语(第三版)封面及目录.ppt
- 2014 ~ 2015学年1学期离散数学期末考试试卷(1_B)20141223152659.DOC
- 2014 ~ 2015学年1学期离散数学期末考试试卷(1_B)20141223152659答案.doc
- 2014 ~ 2015学年1学期离散数学期末考试试卷(2_A)20141223153227.DOC
- 2014 ~ 2015学年1学期离散数学期末考试试卷(2_A)20141223153227答案.doc
- 2014 ~ 2015学年1学期离散数学期末考试试卷(2_B)20141223153552.DOC
文档评论(0)