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