前言 作为一名软件开发人员,你是否因看到自己的软件被他人破解而痛恨?你是否因面对着猖獗的盗版而无奈?你是否正在寻找一套行之有效的软件保护方案?
如果你对上述问题的答案都是肯定的,那么本书对你而言实在是再合适不过的了。解决上述问题可以从提高用户版权意识和加强软件保护两方面入手。从目前情况来说,对软件进行加密保护是最直接有效的。但由于软件保护技术所带来的商业利益,掌握这方面技术的个人和公司都很保守,造成目前软件加密保护方面的资料比较匮乏。因此许多软件开发人员不得不自行摸索,导致在重复劳动中走了不少弯路,耗费了大量的时间和精力开发出来的保护产品在解密者眼中不堪一击,最终,他们的产品蒙受了巨大的经济损失。本书将公开许多极有商业价值的加密技术,以帮助读者更好地对软件实施加密保护。
作者 主 编:段
钢 编 委:dREAMtHEATER、王勇、印豪、罗翼、温玉杰、李江涛、于阳、Blowfish、王景泉、裴来隆、周文雄、郭春杨
(注:各位作者具体情况,见书的序部分) 关于本书 本书是由"看雪学院"(http://www.pediy.com)众多高手共同打造而成的。要了解本书的写作背景,先简单谈谈本站的发展历史。 在2000年初时想找一些研究加解密的朋友交流一下,但令人十分遗憾,那时国内这方面的技术资料很缺乏,大家的交流也有限,因此就创建了主页"看雪学院",与大家共同探讨加密与解密的知识。主页提供的论坛成了国内知名的加解密技术论坛,吸引了密界众多高手,当前最新的加解密技术都可从这里接触到。 为了填补国内Windows平台加密与解密书籍的空白,作者与看雪坛的密界一流好手合作努力,于2001年9月推出国内第一本全面介绍Windows平台下软件的加密与解密技术的书籍《加密与解密--软件保护技术及完全解决方案》。次年,在台湾发行了繁体版,深受台湾读者的欢迎。在这本书中,我们从加密和解密两方面对当今流行的软件保护技术进行分析,读过这本书后,读者能够对当今流行的软件保护技术及破解技术有所了解。这本书获得了2002年全国优秀畅销书奖(科技类)!同时还获得了2002年版权输出奖。 为了跟上技术发展的步伐,在2003年6月推出《加密与解密》(第二版)。这本书是在第一版的基础上写作而成的,补充了许多新技术,结构更加合理。这本书几乎囊括了Windows下的软件保护的绝大多数内容,是一本研究加密与解密入门的好书。 由于开发人员对当前流行的软件加密技术有进一步的需求,我们决定推出《软件加密技术内幕》,其内容侧重软件加密技术及其具体实施方案。这本书的创作历时两年,共有十余名对加解密有心得的好手参与。
《软件加密技术内幕》与《加密与解密》的联系 《加密与解密--软件保护技术及完全解决方案》与《加密与解密》(第二版)是同一本书的不同版次,主要讲解加密与解密的相互性,比较侧重一些软件解密技巧的讲述。
《软件加密技术内幕》内容是与前一本书承接互补的,并不重复。主要讲述当前流行的软件加密保护技术。这本书对读者软件调试技巧有一定的要求,这方面的知识可以从《加密与解密》(第二版)获得。 对读者的要求 要研究软件加密技术必须对系统底层有一定的了解,书中首先讲解了相关系统底层知识,如PE格式深入分析,调试API应用,未公开技术SEH的深入研究等。在了解这些底层知识后,就可以将这些技术应用到自己的软件保护方案中去,例如各种反跟踪技术的实现等。同时本书花了较大篇幅讲解了目前很热门的技术--如何编写加壳软件,以及如何将壳与程序结合起来。 本书各章节内容如下: 第1章
PE文件格式的深入分析 一个操作系统的可执行文件格式和数据结构揭示了藏在操作系统内部的秘密,理解EXE或DLL将有助于对操作系统的深刻理解。如果知道EXE和DLL里面的奥秘,你将成为一名知识更加渊博的程序员。 第2章
PE分析工具编写 编写PE分析工具可以加深对PE文件格式的了解,为以后编写加壳、脱壳等工具打好基础。 第3章
Win32调试API Win32中自带了一些API函数,它们提供了相当于一般调试器的大多数功能。利用调试API,可以编写自己的调试器、脱壳机、内存补丁等。 第4章
Windows下的异常处理 Windows下异常处理机制之一SHE的出现已绝非一日,但很多人可能还没有彻底了解SEH的工作机制;有关SEH的知识资料不是很多,详细资料就更少!仅有的一些资料大部分还是重复的,本章将使读者对SEH有一个全面的了解。SEH不仅可以简化程序错误处理,使你的程序更加健壮,还广泛应用于反跟踪及加解密中。本章对Windows操作系统内部提供的异常处理支持机制进行了深入探究,首先介绍最常见SEH的实现、原理及应用;然后,介绍VC++如何封装这些内部支持,从而实现众所周知的__try{}
__except{}/__finally{}语言;最后对Windows XP新引进的VEH异常处理做了简单的介绍。 第5章
反跟踪技术 好的软件保护都要与反跟踪技术结合在一起。如果没有反跟踪技术,软件等于直接裸露在解密者的面前。本章主要讲述防调试器、防静态反汇编、防监视工具和反加载技术等内容。读者可以根据实际情况在软件中采用相关的技术和代码。 第6章
加壳软件编写 软件最终发行之前一定要将可执行程序进行加壳/压缩,使解密者无法直接修改程序。但是外面流行的加壳软件,已被广泛深入地研究,有了通用的脱壳/解压办法,保护能力不强。因此十分有必要开发自己的加壳方法。由于外壳技术具有很大的商业价值,因此编写外壳的资料几乎没有。本章手把手地讲解如何编写自己的加壳软件,并介绍如何将前章节的反跟踪技术结合进去,打造你自己的加壳软件。 第7章
如何让壳与程序融为一体 不可能有不能脱的壳,那只是时间的问题。如果将壳与程序捆绑到一起,就会加大脱壳的难度,延长脱壳的时间,这也是壳现在的发展方向。本章就是讲述如何将壳与程序融合的技术和方法。 第8章
Visual Basic 6 逆向工程 现在所使用的语言无非是两种,一种是解释执行的语言,另一种就是编译后才能够执行的语言。解释语言的一个最大弱点就是能反编译,因此其保护的重点应放在如何防止反编译上。本章以Visual
Basic 6 为例,讲解如何对解释语言进行逆向工程,以便针对这类语言的特点研究出更好的保护方法。 附录A
在 Visual C++ 中使用内联汇编 在编写某些加密代码时,可能要用到汇编语言来编写一些特定功能的代码。使用内联汇编可以在
C/C++ 代码中嵌入汇编语言指令,而且不需要额外的汇编和链接步骤。 附录B 在Visual Basic中使用汇编 汇编代码不能直接插入VB程序,必须采用一些特殊方法。 对读者的要求 本书是针对具有一些编程经验和一定解密基础的程序员而写的。作为软件开发人员,有必要对软件保护(加密)和破解(解密)两方面同时进行研究。也就是说应该更多地从破解者的角度考虑,这样才可能比较合理地运用各种技术。这方面的知识可以从本书的姊妹篇《加密与解密》(第二版)中获得。 由于要与Windows的底层打交道,不可避免地要使用汇编语言,而且使用汇编语言来阐述将是最清晰直接和易于理解的,因此需要读者有一定的汇编基础。 本书适合以下读者:
对软件加密技术感兴趣的软件开发人员 进行商业软件开发的相关人员
对系统底层机制感兴趣的读者 对逆向工程感兴趣的读者 致谢 感谢博文视点公司对本书的大力支持! 感谢Sun
Bird、Aming、Arbiter、小牧童等看雪论坛众多朋友的支持和帮助! 感谢常州师范专科学校外语系顾晓波翻译的Brief
Introduction to P-code,Mr.Silver一文。 感谢参与写作的各位作者的技术共享的精神,是他们的无私让读者可以从本书中获得许多极有商业价值的技术。! 关于配套光盘 本书所有实例均在配套光盘里提供,大部分实例是以Masm或Microsoft
Visual C ++开发并测试的。笔者尽量使这些程序简短而完整,并将代码印刷在书里。对于那些较长的实例,需要读者阅读本书所附光盘上的那些文件。 请将光盘文件拷贝到硬盘,并去除只读属性再编译和调试。
所有的实例程序均带源码,并且实例在光盘上都是预编译好的,均可在Windows系统上直接运行(注意:有些实例仅可运行在Windows
9x平台或Windows NT内核平台)。 本书部分实例用汇编语言来描述,读者可利用内联汇编技术将汇编代码直接插入C++,Delphi等语言代码中去。
大部分实例虽是采用了VC来描述,但由于是Win32编程,所以读者仍然可以很容易地将代码移植到其他编译语言中去。 技术支持 虽然作者竭尽全力保证书中内容及所附光盘上内容的准确性,但错误可能在所难免。为此我们会在主页提供关于本书的更正内容: http://www.pediy.com 我们非常希望能够了解读者对本书的看法。读者可以将对本书的评论、疑问及其他意见发到我们的论坛里,我们乐意回答朋友们提出的任何合理的问题。同时,在这里你也能结识到许多兴趣相投的朋友。
看雪学院
2004年4月 |