您好,欢迎访问三七文档
逆向工程是了解软件“所作所为”的一套最重要的技术和工具。正式地讲,逆向工程是“通过分析目标系统以识别系统组件以及这些组件之间相互关系并创建该系统另一种形式的表现或更高级的抽象过程(IEEE1990).这使得我们能够想象出软件的结构,他的工作方式以及驱动它行为的特征。分析技术和软件自动检测工具的应用程序,为我们理解软件的复杂度和弄清“真相”提供了切实可行的方法。逆向要求深入地理解这些较底层次的东西。逆向工程师必须完全了解在程序源代码与CPU之间传递的所有事物。逆向工作分成两个阶段,首先是对早期程序进行大范围的观察,这个阶段被称为系统级逆向。系统级逆向帮助我们确定程序的基本结构,有时甚至能帮我们找到感兴趣的区域。一旦对程序结构有了一个基础的认识,并确定了感兴趣的区域,你就可以使用代码级逆向技术进一步开展工作了。代码级逆向技术为我们提供所选代码块的详细信息。系统级逆向包括程序上运行各种不同工具、利用不同的操作系统服务获取信息、检查程序可执行文件、跟踪程序输入输出等等。这些信息大多数来自操作系统,因为根据定义,一个程序与外部世界任何交互都必须通过操作系统。这正是逆向工程者必须了解操作系统的原因——在逆向过程中,通过操作系统可以获取所研究的目标程序的大量信息。代码级逆向是一种艺术,从程序的二进制代码中提取设计理念和算法是一个复杂的过程,他要求逆向工程师不但要掌握逆向技术,而且还要对软件开发、CPU以及操作系统有相当深入地了解。软件的复杂度深不可测,即便能够得到编写良好、文档齐全的源代码,人们也会惊讶于理解它所面临的困难。破解构成程序所用的低级指令序列更是难上加难。必须熟悉软件工程的重要概念。代码级逆向从非常低阶层次观察代码,我们将会看到关于如何运转软件的所有微小的细节,这些细节大多由编译器自动生成,理解这些细节如何与程序及其功能联系起来成为一件困难的事情。操作系统在逆向工程中有着很重要的作用。程序与操作系统紧密联系在一起,通过探查程序与操作系统之间的接口来获取大量信息,另外,每个程序的关键之处在于它与外界之间的通信(程序接收用户输入,并将数据输出到屏幕、写入文件等等),了解关于操作系统的基础知识,首先理解操作系统的可执行文件格式是至关重要的,因为可执行文件头通常会包含相当多的关于程序及其结构的信息,另外,了解一下操作系统是怎样与外界通信,将会有助于我们利用各种破译程序。
本文标题:逆向工程的原理
链接地址:https://www.777doc.com/doc-1605848 .html