5.2 基本原则
在开始第一个逆向工程任务之前,让我们先为本书中涉及的每一个逆向工程任务定义一些基本规则。首先,本书中的逆向工程任务用的全都是离线代码分析技术,而不是现场
代码分析技术。这就是说你首先要阅读汇编语言程序列表,并设法理解他们的含义,这与在调试器里运行程序和单步调试程序是截然不同的。尽管很多时候你希望将这两种分析方法结合起来,但是我还是决定只采用离线分析(或称为dead listing),因为在有指导书指导的情况下你也可以轻松实施离线分析。
我应该在全书中使用现场调试技术来完成那些逆向任务,但是你却很难按照我讲解的一步一步做下去,因为任何环境方面的微小变化(比如完全不同版本的操作系统,甚至同一版本但不同补丁包的操作系统)都会造成无法解释清楚的差异(包括屏幕上显示的内容和打印在纸上的内容)。使用动态分析的好处是你可以一步一步跟着我做——只需要读代码列表中的代码并和我一起分析就行了。
在接下来的几章中,你会看到一些稍微有点儿长且未加注释的汇编语言代码列表,这些代码列表的后面是对它们的详细分析。我有意不对任何一句代码作注释,因为那等于是明目张胆的欺骗(因为代码并非像它表面上看起来的那样)。你所需要做的就是阅读这些在真正逆向工程任务中的那些“原汁原味”的汇编代码,并试着从代码中解读出你想要的信息。我已经对这些代码做了非常详细的分析,所以你可以轻易地理解整个分析过程。
本书中的汇编代码是用好几种反汇编器生成的,这是考虑到很少有逆向工程师会在整个逆向工程项目中只使用一种工具。总的来说,大多数代码列表都是用OllyDbg生成的——OllyDbg是最好的一款免费逆向工程工具(虽然这个工具是以共享软件的形式发布的,但注册是不收费的,只是一个形式而已)。尽管OllyDbg是一个调试器,但作为一款百分之百免费的调试器,我发现它内置的反汇编器功能非常强大。它能够提供非常准确的反汇编程序,并且它的代码分析引擎可以从反汇编代码中提取出相当多的高级信息。






