记得第一次做与逆向有关的工作是2000年,当时由于项目的需要,做过一个钩子(hook)程序,用于截获一个第三方控件发出的消息,但是当时还不知道什么是逆向工程。第一次看到“逆向工程”这个词是在2001年的《机械工程学报》上的一篇文章中,主要是讲用三坐标测量仪测量产品中各个部件的三维尺寸并在计算机中快速建模、进而反推其设计思想和基本设计原则。第一次使用逆向工程工具也是在2001年,当时从网上下载了Numega SoftICE,具体哪个版本已经记不清了,在家里的旧电脑上折腾了好几天,直到系统崩溃才罢手。
之后呢,只是零零星星地看过一些相关的资料。因此,当初电子工业出版社和我联系此书的翻译时,我有些犹豫——近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月于西安电子科技大学






