一头特立独行的猪k帅的成长
kflnig
  我学习破解是在06年的3月。人是寂寞的猎手,在这个90后出生的人普遍开始有点寂寞。所以就在别的方面有点寄托。我对电脑本来就是很爱好。早在我没有电脑的时候,我就觉得电脑是个神奇的家伙,所以当我拥有第一台电脑的时候是非常的痴迷。
  所以你就可以理解,当我看到世上还有一本书叫《黑客x档案》的时候,我一点也没有犹豫就买了一本。
  我的电脑从来没有上网(一直到现在,我现在在哥家里),所以在那里,只有一个叫cracker的版块适合我。从此我就走上了我的破解之道。
  那里的文章现在看来是非常简单。所以在开头的时候我对破解是一点恐惧都没有。凡是在crack之途中的人,没有听说kanxue论坛,那才会是怪事。我偷偷的利用上信息技术课的时候下载看雪精华,和很多其它的东西。也正是这些看雪精华,使我走出了crack的第一步。
  当时我最爱的调试器是softice,直到现在,我还是很喜欢它,这是割不断的一段情。
  《软件解密加密技术》这本电子书在前期是对我影响比较大的。但是说实话,没有人的指导,你根本不知道,书中哪里是重点,哪里只要粗略的看一眼,所以进度缓慢。
  此时在破解之路上,我还是在瞎摸,而且似乎机会渺茫。当时所知道的,crack除了算法分析,按大的分,脱壳也可以算另一半。当在算法分析这里,我没有出路时,我把希望寄托在脱壳。我粗略的学了一点,但是要知道,我手头的资料《软件解密加密技术》是很旧的一本书,那里多以trw2000作为例子,softice也是多建立于windows98或me之上的。
  现在还有多少人听说过Procdump,这个曾经的自动脱壳和dump等常常用的王者。
  所以工具此时带来了很多的不便,所以到后来就没有学下去。
  我到现在为止还是壳盲,所以没有什么好谈的,但是要劝一句就是没有pe知识学脱壳,就像不懂原理学爆破只会改jnz为jz一样。

  这里还得谈谈编程对我的作用。
  我是先学编程的然后才学crack。那时学的是VB,这里要劝一句想学crack的初学者,学vb对crack而言是没有前途的,delphi或c要好得多。这时学校里刚刚还有讲编程,不过讲的是pascal。这几乎是对立的。VB出来的都是一些界面,而pascal出来的都是一些控制台程序。
  我怎么都想不通,根本同是编译器,两者的差别为什么这么大。为什么VB的书上讲的都是控件,界面编程,而pascal要编的都是一些数学计算。
  于是我期待看一些底层的东西。所以当听到这个最底层的softice时,不欣喜若狂才怪呢。
  编程是很重要的,编程对于cracker而言,有用的主要还是像古老的pascal一样的控制台程序。当然不排除去学windows编程。
  递归最好学会。不是说递归一定得学会,但是可以少很多代码和时间去实现非递归实现。
  指针也最好懂一点。当然我想,懂crack的人大半对指针都有一个很好的理解。
  现在的软件明码的都少起来了。要编程实现逆推的多了,所以学习编程辅助crack是前途问题。
  在我学习编程的时候是很痛苦的。要知道在这个所谓的重点中学中,有几个人会像我一样,只是喜欢看电脑书,而不去管所谓的成绩。这样就会有很多说法,我们学校有计算机竞赛的。我不是其中的好手。别人异样的目光很容易给自己解释成,你这么爱看计算机书,怎么竞赛的成绩还这么差呢?当时代潮流是好好读书的时候,你自己干另外的事情,那么你在别人的眼中就是一个白痴。还好我不怎么在意别人的目光,否则就不配特立独行的称号了。不过当有人稍有提及到的时候,我还是会很难过,只是没有表现出来而已罢了。
  
  库函数
  在delphi的库函数上我可是吃过大亏的。很难分析。最容易的一个是strlen。strtoint,inttohex这些个算比较简单的。copy,这个东西很……
  我曾经花过三个周末,分析了几个库函数。当时真的非常痛苦,以为这些个库函数都是重要的。不过好处就是现在我进去这类call里一看,就知道是什么库函数。不过实在是不值得。
  这里就突出粗跟踪的作用,首先得狠命的粗跟踪两三遍。可惜我明白的有点晚了。粗跟踪的诀窍有不少:
  1、遇到一个函数,你可以看看调用它的地方多不多,如果一个函数调用的特别多,一般来讲就是一个常用的库函数,像copy这类。调用的比较少的常常就是作者自己写的函数。
  2、观看内存和寄存器的值的变化。
  3、用插件分析,好像有个叫delphihelper。
  4、自己写个大量调用各类库函数的小程序分析一下库函数。(如果要掌握delphi破解,我还是比较推荐的。)

  指令
  看指令不是说你看懂了这条指令就说你一定能够破解掉这个软件。你得把指令连在一起看。这个忠告也有很多人曾经提过。我记得比较牢的一个例子是:一个学过汇编的学crack,指令是条条看的懂,可是就是找不到北,竟然会去api函数中打转。
  比如求c字符串长度的代码,一看一定要懂。
  对于指令并非一定得记熟。看到它时知道它是干什么的就可以了。还有有些个指令书里没有介绍,但是真的只要看着就会知道。比如说setg al。当我第一眼看到setg这条指令的时候,我是翻天覆地的找资料。把手头的资料翻了一下,然后就在看雪精华里找。花了老长时间硬是没有找到,其实根本没有必要。
  cmp eax,edx
  setg al
  如果if eax is greater than edx,then al=1;如果我没有记错,就是这么简单。

  密码学,现在似乎在论坛上有一个观点就是,学习crack一定要懂一些个密码学。
  密码学是一门很复杂的学科。我的观点是,如果你首先得明确你是要了解一点密码学在破解中充充数,还是要精通密码学,甚至是自己要去研究密码学造出一个自己专用的密码方法。
  说实话,我推荐大多数人只要了解一点就够了。而事实上论坛上大多的文章也只是皮毛而已,当然《ECC加密算法入门介绍》等得除外,这类文章让我多了一些数学知识外,还让我想去拿起闷棍劈死ecc。
  密码学的基础数学知识有:数论,离散数学,组合数学,线性代数等等。当然还有英文很重要,在里面大家都有一个习惯。比如说p,表示的就是明文,plaintext的首字母。如果不懂E文,那么但是这些个字母就是得看花眼睛。
  我在这个暑假打算好好搞搞密码学,所以去当当网上买了一些个数学资料。
  初等数论,离散数学,密码学原理和实践。
  本来我还以为初等数论自己已经可以了的。至少一般的解解同余方程这些个东西已经会了,谁知,里面的东西有些个难的不像话。看看例题还可以,一解习题,什么都得看答案。离散数学中,包括了一点近世代数。看到这里,我才明白当年为什么有著名的数学家对群环这些理论说是不可理喻。
  密码学的博大精深,是建立在它的数学基础上的。
  你不懂欧拉函数,不懂同余这些概念怎么知道RSA的原理。知道了rsa的原理,你可知怎么攻击rsa?
  一些经典的古典密码还可以懂一些。但是到了des,aes这些,迭代的作用啊,s盒的线性逼近这些个东西是比较难了的。
  就我感觉若不计移位密码和代换密码等,base64编码是最简单的,crc32也可以懂,而且碰撞很容易找,但要深入了解就很困难,什么生日攻击,根据密文推明文等。说实话,我这个自认为精通crc32的人,其实找碰撞也只会穷举而已。
  数学真的很重要,我还得举个例子。就像有不少算法都是基于离散对数问题的。
  看来我还得去买一本线性代数的数学书。但是书不是万能的。重要的还是靠你自己学习,我对数学颇有兴趣,愿意做一个业余的数学家。所以我把数学是当课外书看的,你没有必要去买这么多数学书,除非你也想当数学家。凭着《密码学原理和实践》这类密码学书中的预备知识,加上一只上网的电脑就可以了。
  好久没有来上看雪,发现已经有推荐的密码学读物了。

  上天的眷恋:
  上天还是比较照顾我。
  我买到了一本很老的书《加密解密全方位学习》(书不老,内容很老)。看似很没用,其实天知道这有多么有用。
  1、随时翻阅
  2、记笔记
  3、纠正书中错误
  韦编三绝,这种程度形容我并不过分。我记了很多很多的笔记在上面。笔记甚至可以和书的内容相比拟了。
  我们学校旁边的一家店,有《黑客防线》,《黑客手册》卖,说实话,《黑客防线》中的cracker版块最好,难度中等,适合需要成长的菜鸟看。而《黑客x档案》的最差,篇幅最少,十分十分简单,贬义词就是肤浅。
  看了这些杂志中的cracker版块使我的技术有了一点点提高。

  真正的使我对crack燃烧了激情是,一不小心投了一篇稿子中了。

  我手头有很多很多的电脑书籍。约有5,6本是经常翻阅的。
  现在:现在的话,只能说是一个中等菜鸟。

  再回忆一下往昔吧:
  往事不堪回首月明中。
  想当年,是拼了老命的想去上网。想上网去下载无数的电子书回来,这样便可以带到家里看,不知道你有没有这个经历?可是我的上网时间实在是非常非常少的。开始还可以在信息技术课上上网,后来的课,老师看到所有的学生都去上网,而没有人听他的,所以就拔了网线。天知道,我是多么希望凭空多处一些电子书出来啊。
  我可以说曾经的最初半年,我基本一无所获。有的只是一份狂热,当时很天真的以为,会汇编能够破解个把软件就是高手。想让自己也成为高手中的一个,所以就努力学习了。有电脑的时候最梦寐以求的是可以做一个无所不能的hacker,现在是半桶水的cracker。
  但是可贵的是我没有放弃,所以我就熬过来了。现在对crack已经懂得了一个大概。
  当时破解软件是ida开着,od开着。然后没有头脑的找。找到一个明码比较欣喜若狂。我还记得第一个找到的明码比较的是ghost mp3。那时常常搞到半夜,这是根本没有必要的,半夜之时,脑袋都已经昏了,还有什么心情看代码。其实只是在碰运气,看看是否可以遇到一个容易的明码。
  我拿当时的一张(忘了是什么杂志的)光盘开刀,里面的软件除了一些个恶心的asprotect加壳或者穿山甲的没有破出来啊,另外的基本都搞定了。
  对于过去,其实没有什么可以拿出来夸耀的,重要的一个是熬,坚持。也许,先拿crackme分析,到达一定实力后,然后在去破软件这样可能路好走些。
  我想说,练很重要,而且盲目相信权威不可取。我看到《看雪精华》中有很多错误,或者说有很多得改进的地方。不少都是曾经误导过我的。当然也有可能是我自己失着。
  这里再解释一个问题吧,是不是会想学crack就得学会汇编编程?这个问题呢答案是否。我至今还没有用masm编过程序。通常的masm编程书籍都只是教我们windows编程,而我们在crack中遇到的,大多是计算,也就是数据处理,风马牛不相及。当然学会一点还是好的,但主要是学习api的作用,和如何用api搭积木搭出一个程序。
  我之所以取这个题目,是因为那天被羡逝叫了一句k帅,心里暗爽了一下。很乐意听这个称呼,也比那个拼都拼不出来的kflnig好些。
  最后,写这篇文章的目的:我要高三了,要到很久之后(明年的6月中旬)才会回来。所以这篇文章是我近一年多来的纪实和经验,同时也有对未出道的小菜鸟朋友的忠告。明年高考之后再见!
  来来来,喝完这一杯还有一杯
  再喝完这一杯还有三杯……