看见老大举办征文比赛,便支持一下,开始打这篇文了
平日我跟大家闲聊的机会不多,回想 2004 年的时候,我还是看不懂大部份简体字的,那时需要用繁简转换字型,才看得懂看雪论坛的东西
那时候,我很兴奋地发现了世界上有一个叫 softice 的东西,这是一个改变了软件世界步伐的东西,即使今天使用的人已经不多了,但是它在软件保护的历史中,永远有不能取代的位于。
刚来到看雪的时候,我就是怀着一颗学习爆破的心,希望研究一下怎样爆破跳转,使软件的运作都在我控制之下。我很喜欢这种在计算机世界中神奇的力量,也就是像神的力量。
那时候,我身边的朋友,没有人热爱编程,更绝对没有人喜欢研究系统结构。如果问喜欢研究软件解密的人,在香港是完全没有的,在这里只有学习 java 和 database 赚钱的人,在香港这里找一个懂得 (真是懂) 用 C++ 写系统程序的人也很难找到一个,只懂得说谎糊混过关的人却很多。
虽然没有人跟我分享成果,但不要紧,跟他们说只是浪费我时间。我的心里知道,中国有很多高手,深不可测,我到大陆看雪论坛,坚持着,必定可以找到人交流,学到实际东西。
就是因为这种意愿,于是开始了在看雪看东西,胡乱找软件来跟踪,也开始发现了世界上有一班人,一直努力地抵抗解密,他们写了 “壳” 这东西。当我遇上第一个加壳的软件时,我有点气馁,我发现自己的耐性很差,当迷途在一片大海代码中,我便很累。我真的很努力尝试了,但我发现我对于逆向分析是非常没有耐性。
我没有破解的天份,进步很慢。那时候,我的说话也不多,因为每次我要在看雪说话,便要打开 MS Word, 写了字,再用繁简字转换功能,再把字复制到论坛去 (直至今天,也是这样做)。那时候自己的功力低,没有甚么好说,很多尝试分析的软件,最后也没有成功。
在那时候,我主要努力研究的东西,包括了: ANSI C 语言 (就是国际 ISO标准化的 C 语言,在外国 usenet 上 comp.lang.c 上看文章) Windows SDK 编程 (使用 API 的编程,相对就是不使用 MFC 或 VB) 汇编 assembly (那时候我的汇编水平很差),在这三个东西中,一直缓缓前进,那时候我也研究过网络安全等的东西,但是对我来说,最感兴趣的不是网络,是我们每天都接触到的 “exe”。
某天,我知道了 exe 就是 “PE”,我走进了一个奇妙的新世界,感觉一新,我知道 exe 不是甚么奥秘,它也是有着自己的格式,我们调试的,就是它的代码部份。
某天,我知道了 +fravia,它对我的影响很深,因为在那里我学到了一些基础的知识和一些观念,很使我第一次感受到密界的「黑色气氛」。
某天,我知道了 crackme 其实是很有趣的,我玩了别人的 crackme,明白了 crackme 不是一个玩具,它的真正意义在于,把软件保护的理念用最简单的方法实现出来。那时候我想,我的逆向很差,但编程有信心,我就来开发 crackme,而且要努力写好玩的,每一个都是设计不同的,把我对破解和系统的知识,运用到另一种方式上去,就是「保护软件」。
某天,我跟老大说,我要当 crackme 区版主,我要推动大家对 crackme 的兴趣。
某天,我知道了操作系统的世界,我只走遍了它其中一个面: ring3。在 ring3 上我走了很多路,我要走到月球的另一个 : ring0 上去探索,我开始学习驱动编程。
某天,我发现了我已经不需要繁体字型文件,我可以直接看简体字,大部份用语也开始明白了。
某天,我发现我被大家误会是女孩子了。
某天,我跟朋友说: 我研究 windows 的,朋友说 : 我也是研究 windows, windows 的registry 修改,加速,BT ,photoshop,我全都很熟悉。我说: 不是这些。他说: 不是这些,是那些 ?
某天,我的表妹不理会我了,我的人生观进入了另一个阶段,我开始明白,这个世界我们不能控制的事很多,我们选举自己走的路,路的尽头是甚么,大家都不知道。
某天,我的 crackme 10 发表了,我用了刚学懂的 Directx 写这个 crackme,只是为了使它漂亮,它是我最漂亮的作品。我常常在计算机打开它,看它下雪。
某天,我发现自己的视力差了,我要调整一下坐姿和使用习惯。
某天,我写了第一个驱动 crackme,它是我学了一个月内核的成果,在 vmware 里重启了超过 100 多次以上,整个人都疯了,很多次放弃,很多次重拾起来,再加上了可以穿透 relocation 的 encryption (解密是把 relocation 逆向做一次,把代码解密,再做一次 relocation),终于完成了。
结果,还是很快被破了。
某天,我被大学取录了,日间上班,晚上回大学。这是我第一个学位,我的气力都被它花干了,很累,很累。
某天,我把大学学到的数学 linear system,matrix,用到 crackme 算法上,使用浮点运算,验证多条 x1+x2+x3 + …< 0.1 的公式, if equation1 < 0.1 and equation2 < 0.1 and ……… then success 。这是我第一次认真地写 crackme 算法部份。
某天,我在家中上网的时候,突然想到一个游戏,就是大家写一个最强的 crackme,分别在不同时间放出来,看看大家谁的支持最久。后来跟老大研究了很久,问了很多意见,修改了很多很多次规则,最后成为了竞赛活动。
某天,我决心开始写 vm crackme,但是当我把 intel 指令集一条一条地实践下去,到达了某一条 (很像是 0x30 , 不记得) ,我没有耐性的性格又来了,太累,睡觉了。
某天,我知道了我的表妹快大学毕业了。她比我早毕业,我衷心祝福她。
[注意]看雪招聘,专注安全领域的专业人才平台!