基本信息
- 原书名:Reversing: Secrets of Reverse Engineering
- 原出版社: Wiley
编辑推荐
经典外版,完美呈现!
内容简介
作译者
目录
第1章 基础
1.1 什么是逆向工程
1.2 软件逆向工程:逆向
1.3 逆向应用
1.3.1 与安全相关的逆向
1.3.2 软件开发中的逆向
1.4 底层软件
1.4.1 汇编语言
1.4.2 编译器
1.4.3 虚拟机和字节码
1.4.4 操作系统
1.5 逆向过程
1.5.1 系统级逆向
1.5.2 代码级逆向
1.6 工具
1.6.1 系统监控工具
1.6.2 反汇编器
1.6.3 调试器
1.6.4 反编译器
译者序
之后呢,只是零零星星地看过一些相关的资料。因此,当初电子工业出版社和我联系此书的翻译时,我有些犹豫——近600页的逆向工程“巨”著,而且该书无论从深度还是广度上都较其他有关逆向工程的书更胜一筹。但褚华博士和王玉英博士的“加盟”,让我心里踏实了许多,她俩做过系统的逆向工程和程序理解的研究工作,也发表过不少相关的研究论文。
逆向工程这一术语最早来源于机械工程领域(我的老本行)。随着软件业的发展,逆向工程被引入软件工程领域。对于软件逆向工程,IEEE软件工程技术委员会行政秘书E. J. Chikofsky和J. H. Cross在他们的文章中给出了如下定义:软件逆向工程是分析目标系统,认定系统的组件及其交互关系,并且通过高层抽象或其他的形式来展现目标系统的过程。..
经过十几年的发展,软件逆向工程领域已有不少研究成果和商业化的产品;但是软件逆向工程仍然算不上成熟,这主要表现在对理论和实践的研究都还处于早期的探究阶段,并未形成统一的、系统的、科学的软件逆向工程的理论和方法。从工程实际的角度来看,大体上可以将软件逆向工程分为两大类:
第一类是从已知软件系统的完整代码出发,生成对应系统的结构以及相关设计原理和算法思想的文档。实际上,学习和研究别人的源代码就属于此类。Chikofsky在本书的序中特别指出:阅读别人写的代码或者自己以前写的代码实际上也是逆向工程在起作用。
第二类是从没有源代码的程序出发,生成对应的源程序、系统结构以及相关设计原理和算法思想的文档等,亦即本书重点讨论的二进制逆向工程。
本书共有13章和三个附录,涵盖了逆向工程的基础知识、应用、开发和拓展的方方面面问题。其中第5章、第9章和附录A、B、C由韩琪翻译,第3章、第11章和第13章由杨艳翻译,第7章、第8章和第10章由王玉英翻译,第4章和第6章由李娜翻译,第1章由褚华翻译,第2章由陈贵敏翻译,第12章由辛健斌翻译;全部译稿的校对由陈贵敏和褚华完成。所有的翻译和校对工作历时半年多,在此,我要感谢为本书的出版付出辛勤汗水的电子工业出版社博文视点的工作人员,特别要感谢本书的策划编辑朱沭红老师和责任编辑顾慧芳老师,她们的严谨认真工作使该译本可读性更高,她们的鼓励更使我信心百倍。
由于译者水平所限,加之时间仓促,译文中肯定存在错误和疏漏,敬请读者批评指正。我的E-mail:efoxxx@126.com。
陈贵敏
2007年5月于西安电子科技大学...
前言
其思想很简单:我们应当对底层软件有深入的理解,还要学习那些能够让我们轻松进入任何程序的二进制码并获取信息的技术。不知道系统为什么会以它那样的工作方式运转而且其他人也不知道答案的话,怎么办?没问题——你完全可以自己深入研究并找到答案。这听起来有点恐怖和不现实,是吗?一点儿也不,我写这本书的目的就是向你讲解并示范平常就可以用于解决各种各样问题的逆向工程技术。
不过我总是急于求成。也许你以前没有接触过软件逆向工程的概念,我在这里先简要介绍一下。
逆向工程和底层软件
在开始进入本书所讨论的各部分内容之前,我们应当正式地介绍一下该书的主题:逆向工程。逆向工程是指将工程制品(比如汽车、喷气发动机或者软件程序)以揭示其最底层的细节(如其设计和架构)的方式进行解构的过程。这与研究自然现象的科学研究有些类似,区别就在于一般没有人会把科学研究看做逆向工程,这仅仅是因为没有人确切地知道自然算不算是工程制品。
对软件而言,逆向工程归结起来就是拿一个既没有源代码又没有准确文献资料的现成程序,尝试恢复出它的设计和实现细节。在某些情况下,可以找到程序的源代码,但是找不到最初的开发人员了。本书所讨论的就是通常所说的二进制逆向工程。二进制逆向工程技术的目标是从没有源代码的程序中提取有价值的信息。在有些情况下可以从程序的二进制代码中恢复出准确的源代码(或者接近高级表示的代码),这会大大简化逆向工作,因为阅读用高级语言写的代码要比阅读低级汇编语言代码容易得多。在其他情况下,我们最终得到的只是用晦涩难懂的汇编语言程序清单。本书将讲述这一过程以及程序为什么这样运行,同时还将详细描述如何在各种不同的环境中破解程序代码。
我决定将这本书取名为“逆向(Reversing)”,这一叫法被许多在线社区用来描述逆向工程。因为你可以把逆向看做是逆向工程的别名,故我将在本书中交换使用这两种叫法。
大多数人在尝试想像从可执行二进制程序中提取有意义的信息的时候会变得有些焦虑,因此,我把这本书的首要任务定为证明这种害怕是没有必要的。二进制逆向工程如果行得通的话,它通常能解决用其他方法解决起来极其困难的问题,而且如果方法得当的话它也没有你想像的那么复杂。
本书主要讨论逆向工程,但事实上书中所讲述的内容要比逆向工程多得多。在软件行业内,逆向工程被频繁地应用于各种场合,本书的主要目标之一就是在讲授逆向工程的同时研究这些领域。
下面简要地列出了本书要讨论的一些主题:
IA-32兼容处理器的汇编语言以及如何阅读编译器生成的汇编语言代码;
操作系统内幕以及如何对操作系统实施逆向工程;
.NET平台上的逆向工程,包括.NET开发平台的简介及.NET平台汇编语言:MSIL(Microsoft中间语言);
数据逆向工程:如何破译未公开的文件格式或者网络协议;
逆向工程的合法性问题:什么情况下是合法的,什么情况下是非法的?
拷贝保护和数字版权管理技术;
破解人员是如何应用逆向工程使拷贝保护技术失效的;
防止人们对代码实施逆向工程的技术并认真尝试评价这些技术的有效性;..
目前恶意程序的基本原理以及如何应用逆向工程研究并清除这样的程序;
一个真实恶意程序的现场剖析和展示,以及揭示了攻击者是怎样通过程序通信获得被感染系统的控制权的;