首先,需要大家端正一下学习态度-也就是对于破解的态度.每一个有一定修为的软件破解者,也就是CRACKER,都很清楚,我们破解掉软件的序列号,功能限制,时间限制等等东西都不是最终的目的,一个真正的CRACKER追求的是一种技术上的极致,一种对技术的无限渴望.不允许软件作者在它的软件里面留下一个充满未知的黑盒子,所以要分析这个软件,看看作者到底是如何实现软件的保护,这种保护机制有何优缺点,有什么值得借鉴之处.
最出色的保护*一定会用到最出色的技术,或者在算法上,或者在编程思想上,我们通过分析,研究,最终将它们搞清楚,那么我们就可以把这些心得用到自己编写的软件中去.很多CRACKER最终之所以都成为了优秀的PROGRAMMER或是优秀的系统分析员,就是因为如此.所以,CRACKING有个更加专业的名字:"Reverse Engineering",译成中文就是"逆向工程".
当然,不可否认,某些时候,对软件实施"逆向工程"的确会影响到软件开发者的个人利益.由于这种影响的存在,很多开发者对于CRACKER们可以说是抱有一种"仇视"的态度,其实细究之下,完全没有必要.真正对软件开发者造成严重损害的,不是CRACKER,而是无耻盗用CRACKER劳动成果的盗版商人,这些盗版者,不仅严重损害了开发者的利益,也严重损害了CRACKER的利益和声誉,软件作为程序员知识的结晶,其产权的概念当然和其他产品有所区别,知识的传播不应该有任何的阻碍,也不会有任何真正的阻碍,在信息化的时代,掌握知识固然重要,可是掌握获取知识的方法才是重中之重.CRACKER所使用的逆向工程技术就是一门教你如何从别人的软件中学习先进的软件设计思想的技术,其重要性可想而知.
CRACKER的成长之路
说"逆向工程技术就是一门教你如何从别人的软件中学习先进的软件设计思想的技术",似乎过于抽象了一点,我们可以从一个CRACKER的大致成长之路略窥一下CRACKING的全貌:
1.最初级的阶段.当然就是很简单的破解序列号,时间限制,功能限制之类的工作,大部分的人都是因为受不了很多共享软件的诸多限制而开始研究破解的.
2.当你掌握了最基本的技术后,就可以用它来分析,解决日常使用电脑所碰到的各种问题.这个时候,本来目的一致的人们会渐渐的产生了一些分歧,各自发现了自己感兴趣的领域,比如侧重于操作系统原理方面的朋友可以自己修改一些软件,让其更加适合自己使用,,如修改软件的菜单,快捷键,或者给软件增加一些自己需要的功能,比如打印等.而侧重于软件算法方面的朋友,则会学到更多的软件加密算法,侧重于加壳方面的朋友,会碰到更多的壳,可以学习到更多的壳方面的知识.总之,走到这一步,已经大致的分出了方向.
3.如果你有足够的毅力,时间,自学能力和天赋,就能越过第二层,达到大师的境界了.这个层次的CRACKER有个最大的共同点-都是优秀的PROGRAMMER,也就是说都有很深的编程功底,这就充分的体现了逆向工程技术的巨大作用.当然,编程只是最基本的要求,其他方面,每个人都会有自己独特的,理解特别深的方面,如系统的内核,密码学的算法等等.
接下来,我们就需要了解一下学好逆向工程技术,到底需要做出怎样的努力呢?
首先,最重要的是毅力,一种对技术的*.兴趣是最好的老师,如果你没有足够的兴趣作为动力支持,面对着大篇幅的汇编代码,很容易就会感到枯燥,厌烦,这样就永远都学不好CRACKING,国内CRACKING界的元老人物jojo在<看雪论坛精华3>的前言上就曾经说过:"让我们搞清楚作为一名CRACKER最需要具备的基本条件,其实那并不是扎实的汇编功底和编程基础,你可以完全不懂这些,CRACKING的秘诀就是勤奋+执着!记住并能做到这两点,你一样可以变得优秀."也许在纸面上说毅力和执着会让很多人觉得这很不值得一提,可是有些事自己不亲自常试过,就永远都不会知道其中的滋味.我曾经调试一个BlowFish算法保护的程序,那是我第一次接触密码学的保护体系,光其中的中间运算结果,重要地址断点,运算过程就差不多写了一个笔记本,整整10个小时都在不停的调试,看到的都是无边无际的汇编代码,如果不是后来查找到了BlowFish算法的相关资料,我还不知道要跟踪多久,而BlowFish算法算是密码学里面比较简单的算法,如果你碰到一个WinRAR,CloneCD等使用椭圆曲线密码算法的加密体系,那其中的艰难困苦就更加难以想象了.所以,要成为一个优秀的CRACKER,一定要有超人的耐心和执着精神.
其次,就是极其扎实的汇编功底和系统编程的知识.CRACKING是一件很低阶的事情,不像VB,Delphi等RAD工具,傻瓜似的拖动一下就能绘出一个窗口,在一个CRACKER的眼里,任何事件,都要深入到汇编级的了解才行,一个窗口,要彻底的分析它的消息响应函数,一个算法,要从寄存器和存储器的运算级别来理解清楚.可以想象,一个2-3M的软件,用VC开发都要几个月的艰苦劳动,如果要在没有源代码的情况下,完全通过汇编代码的阅读,搞清楚它的运作机制,没有扎实的汇编和系统知识作为坚强的后台支持,是完全不可想象的事,对于知识的积累,每一个学过计算机的朋友都清楚,那事没有任何捷径的,完全凭日常的留心和努力,厚积才能薄发.当你的基础知识扎实以后,从事任何与计算机相关的研究,都是很轻松的事情.
前面的两点,都是很"形式"的大道理,大家也许都觉得抽象了一点,不用担心,在日后的实践中,有很多的机会和时间让你慢慢体会个中真谛.
工欲善其事,必先利其器.逆向工程作为一个极其专业的领域,不光其指导思想与众不同,所使用的工具也是极具特色,和其他的领域差异巨大,要成为一个专业的CRACKER,一定要熟练掌握常用的一些工具,最出名的TRW,Soft-Ice,W32Dasm都是大路货了,接触电脑多一点的人,或多或少都应该听过这些名词,这些可以说是CRACKER们最基本的工具.可是不要认为会用这几个工具就足够了,入门之后,你会发现大堆的从来没有见过甚至没有听过的工具等着你去学习.CRACKER的工具有个普遍的特色-小而精,着眼于很小的切入点,不要看他们块头小就不以为然,很多时候,就是那些小东西可以帮上你的大忙,所以,对于工具的了解一定要全面,我在以后的"密界寻踪"栏目中,会专门为大家介绍CRACKER所需要的各种工具,希望能在最短的时间内,让大家获取最多最有用的CRACKING知识.
CRACKING的产生,发展
任何一门学科,都有其产生,发展的过程,逆向工程当然也不会例外,现在CRACKING界内部比较认同的时间划分方法是以操作系统的变化为根据的,具体的说,分为如下几个阶段:
1.萌芽: 20世纪70-80年代,DOS普及之前.那时,CRACKING完全是一种个人的行为,由于通信手段和计算机普及率的限制,CRACKING完全是一些电脑元老级人物业余的休闲,而且那时,"软件保护"这个概念完全没有成型,保护体系极其简单,逆向工程的任务大部分是在学习人家的编程思想,而且那时的逆向工程技术主要是应用在单片机,苹果机编程领域,而且几乎没有任何文献流传下来,现在已很难考证那个时代的技术发展水平和研究成果了.
2.发展:
...........
未完代续