看着各位都在写,我也忍不住手痒,不是给大家介绍如何成功,而是希望避免我走过的弯路。
   我最初接触破解是在2000年左右罢,当时宿舍了刚买了一台电脑,128M的内存,但是流行的都是64M,也有更烂的机器。除了每天逃课去玩游戏外,在抢不到机器的时候,学完VB和汇编的基础知识,另外的基础就是以前在初中和高中的时候学了一点apple II下的Basic,大一的时候对无线电感兴趣,并没有看过计算机相关书籍。那时候流行的破解资料就是俞煌言的破解教程,用debug命令,不知道各位还有没有听说过这个名字。我想刚开始的时候学习破解不是为了破解,而是为了获得一种让别人崇拜的感觉。当时每天都拿本黑客教程招摇过市。现在想想,没有真实的基础做配合,对硬件结构的生疏,其实学习这些内容没有什么用处,很快就忘确了,这些内容现在根本就记不起来了。以后的日子又接触C/C++/Java/Perl/Html/css/js/vbs/photoshop/flash/asp,反正几乎只要是流行的都看了一个遍,现在知道人的精力是有限的,样样精通的结果就是样样稀松,反倒把自己的课程没学好。看雪的加密与解密出第一版的时候我狠狠心从伙食费里挤出40多块钱买了一本。以为读完了我就成大牛了。但是我没有等到我读完的那一天,一看不懂就放弃了。大学毕业的时候,挂了好几门科,灰溜溜的回小城市工作,过了几年月薪数百的日子。工作的内容和计算机完全无关,每月的工资吃饭穿衣人情世事后,几乎没有剩余,不过总算有收入了,买了一台电脑,显示器都没舍得买,还买了好几本系统设计的书籍。当时工作很忙,几乎没有休息的时候,也只能吃饭的时候挤出时间去玩玩游戏看看资料。在这满长的生活里,虽然没怎么学习过,但是每天看一点,时间长了也积累了不少。以前不懂得部分后来也慢慢懂了。对于硬件体系,对于cpu指令,对于操作系统原理,对于各种语言、结构对应的编译器生成的汇编代码有了一点了解。再后来我离开了这个看不见希望的工作,接着去继续我的学生生涯,继续去学习Banach空间等百年用不上的知识。现在再来看这些破解知识,就不会再有那种年轻时候的无从下手。尽管可以号称8年的破解经验,就像号称13年的编程经验一样,其实都是虚的,这有点像学术造假,实际上我自忖也就是看雪论坛上一年级菜鸟的水平。没有手动拖过一个壳,没有编写过一个驱动程序,所以这些年来也没有什么长进。所以我仅面向3个月以下的菜鸟谈谈我的心得:
1)心态。我一直想为什么这么多年来我这么平庸,这么多年了水平还比不上论坛上这些年轻的人们,应该就是我的心态不好对于技术没有那么狂热。在破解的时候如果一段代码10分钟看不出头绪的话我就觉得很烦,就放在一边去了。就像我看论文的时候经常会被一首歌曲,一部电影,甚至别人的一句话,自己的一个念头所吸引,所以什么都做不好。
2)基础知识。像汇编语言/C语言,Intel指令体系,Linux源代码,Windows系统编程,Pe结构,编译原理,windows internals这些可以接触到的资料都要熟练掌握 。这些知识并不比你课堂上学的知识复杂,因为你只需要记忆,并不难理解。不像一本专业书籍,啃上几年都不知道说的啥。从根本上说编程比破解要更有难度,因为编程要面面俱到,而破解只需攻其一点。当然我指的不是你写的helloworld程序。
3)熟练掌握一种调试器。一个用户模式调试器和内核模式调试器。刚开始用OD的时候,我连断点都不知道如何下,只是靠F7步进,效率低下,后来耐心看了看文档,才发现OD的强大。
4)如果上述都做到了,那就多练了。实践出真知。实践长了,一些关键地方一眼就能看出来。
    现在我还是很崇拜论坛上的那些大牛们,因为同样的一段代码,他们看几秒钟,也许我要看上几个小时。到现在我还是不清楚,如何加载调试符号。所以我很感兴趣,如果OD不在关键的地方做标志,比如引用的字符串,调用的函数名称上,那你们看这些代码会不会也有难度呢?