这篇文章是05年写的,本来是写着玩的,后来认真起来,就把以前的东西找了出来,搞了这么个有图有文字的东西,当时本来准备贴到论坛上的,后来一读,满篇的沾沾自喜和信口开河,实在不好意思,就扔一边去了。前几天脑子发热答应了kanxue,也没精神去重新修改,就这么贴出来吧,凑个热闹。

如果有言语不当之处,请原谅,两年前比现在更轻狂一些,虽然那时也不再是少年。

---------------------------------------------------------------------------------------------------------------------------------------------------------------

七年一剑

By softworm 

 

从入行到现在,刚好整7年时间。论时间可以算老鸟了,可惜受资质和基础所限,水平始终是差强人意。好在我也想开了JJ,江山代有才人出,天外有天,随你什么高手,总会有更厉害的人。能挑战高手当然好,更重要的是保持平常心。也许永远也无法达到别人的高度,只要不断超越自己就是进步。我现在更愿意把crack当作游戏,或者一种修身养性的方式,因为它可以极大地磨练人的意志。

有付出,也有收获,很好。

 

近来看雪论坛上有些写cracker感受的文章(二哥退出江湖的感慨,以及从菜鸟开始的自励),我很喜欢看,看完自己也想写一篇,顺带小结一下。希望写得有趣味些,能给初学者些启示。前辈高人嘛,博君一笑。

 

自古风云出我辈

(1998 – 2000)

______________________________________________________________________________________

开始接触Crack是在1998年夏天。当时资料极度缺乏,也没有条件上网(直到1999年才有了些拨号上网的机会),唯一的知识来源就是淘来的杂烩盗版光盘。运气还好,找到些教程。有张盘上收有Fravia网站的镜像(后来成为我几年之内最大的crack知识来源)。另外就是一些台湾人写的破解教程,主要是俞煌男和软体蛀虫的作品(几年后我取了一个与之类似的网名)。从那个年代过来的cracker,无人不知“78”大法。使用的工具是SoftIce v3.0IDA Pro v3.6DOS界面的,开始不会用,很长时间都是用W32Dasm)。

 

最初的半年时间,动手不多,万事开头难。第1次成功是Virtual CDROM v1.0,TimeLock保护的。当时完全是碰运气撞上的,在SoftIce内一路按下去(相当长一段时间后才摸索出符号化调试的方法),在某个call后堆栈内出现了serial number明码字符串。

 

初学阶段的第一个硬骨头是个脱狗类型的国产软件,前后坚持了大概三个星期。带狗获取到数据后,patch狗的vxd驱动(狗是金天地的,型号忘了,这个公司后来与Rainbow合并为彩虹天地,现在叫SafeNet)。值得一提的是,我第一次在这个vxd里见识了花指令。

 

经过半年多时间,有点感觉了,开始密集的破解,对象主要是盗版光盘上的shareware。这段时期大概是最有劲头的时候,也不觉得累,不间断地一个接一个破解。各种类型的都碰过,KeyFileSerial NumberDonglelicense,还到Linux下用Gdb干掉了两个。不过绝大部分是patch类型的暴力破解,几乎没有研究过算法。最接近的也就是写点小程序或在SoftIcein-line patch,穷举一段数据。这两年多时间是打基础的时候,一旦上手后进步很快。

 

也破解过几个大块头的行业软件,大部分是Flexlm保护的。

Flexlm v5.12写的Vericut v3.3 KeyGen,图片也取自Fravia

 

相比之下,中文教程我看得很少。经典的句式大概是这样:

“执行到xxxxxxxx,按F10,显示试用期结束,抬头一看,xxxxxxxx处有个jz/jnz……”,郁闷,怎么我什么也没看见J

Fravia,当年的经典网站,永远的怀念

Fravia网站上的教程与之相比,真是一个在天上,一个在地下。这是我迄今为止见过的最好的Crack网站,可惜1999Fravia退出Crack界,网站交给+Tsehp管理,文章质量江河日下,人气一落千丈,最终停止更新,令人唏嘘。现在的RCE Message Board上还保留有Favia网站的archieve。即使现在,不客气地说,我认为整体水平上中文教程与老外的文章相比仍然有不小的差距,这种差距倒不完全是技术上的,更多的是写作者的心态及写作水平上的。一些中文文章,总是遮遮掩掩,预言又止,不知是怕别人看懂了,还是驾驭文字的能力有限,小家子气十足。反观老外的文章往往深入浅出,足斤足两,我始终偏爱读老外的教程。当然,我这样说并不表示自己的文章就写得有多好,纯粹个人感受而已。

Fravia本人,出生在Suomi-Finnland,是芬兰吗?

 

Fravia 网站上还可以见到另一位世界级顶尖高手,IDA Pro的作者Ilfak Guilfanov的照片。

Ilfak Guilfanov

 

Fravia停止更新后,另外一个常去的网站是CrackZ,也是个很棒的站点。当时需要通过代理,很是麻烦。主要是为了下载新出的IDA ProFlexlm SDK

CrackZ千禧年版

 

还有个SuddenDischarge,收集有很全的crack工具。还有SandmanCrackStore……,这些当年如日中天的网站,今天都已是历史。在一些网站的Archieve,还能找到它们的身影。

 

徘徊不前

(2001 – 2002)

______________________________________________________________________________________

很可惜,进入2001年后,技术的进步基本停滞了。这段时间大部分是在重复自己,很少再有什么突破。主要的一个原因是最喜欢的网站停止更新后,很少再去读别的教程(直到2002年我才买了自己的机器)。同时,没有看到(也可以说是没有引起足够的重视)crack领域内两个新兴的方向,此时已经是山雨欲来风满楼,一两年后将成汹涌之势,即密码学算法的使用与软件加壳。另外,没有交流,井底之蛙,感觉还不错,似乎没几个软件能从自己手下活着出去。

 

这两年里并没有停止crack,实际上,积累的经验还是相当有益的。最重要的是开始培养cracker的思维方式,有意识地去猜想、揣摩对手的思路。此时已经开始逆向一些简单的算法,但并没有正规地从密码学方向去学习,更多的是一些cracker的花招。

比如,计算Serial Number的函数是否可逆,把结果送进去是否会得到原来的参数?是否存在参数代表加解密标记,只需设置一下就可以用同一个函数得到结果?逆算法是否存在(于程序内)?是否可以穷举?如此等等。

 

期间写了个用于crack的小工具,DllSniper(最终的版本是v2.5 Final),目的是从PE文件里输出自己需要的函数。写这个工具的念头是在破解UG v16的时候萌发的。

DllSniper v1.00

 

应该说,这种cracker的直觉是非常宝贵的。在这两年,这种感觉达到了颠峰,最得意之作就是在对密码学算法一无所知的情况下写出了MultiGen Creator v2.5KeyGen。这次破解在我的crack生涯里绝对是最辉煌的一次。

 

这是个三维仿真的建模软件。在调试过程中发现软件使用了一个叫Elan的商业保护。在网上搜索才知道,这个Elan原来是Flexlm的前身,当时已经很少使用了,只找到一篇教程,也下不到SDK。文章的办法是修改keyfile数据来延长试用期,对我的情况不适用,试了也不管用。但具有决定意义的是提供了一个Sig文件和Elan APIHlp文件。

 

以我当时的水平(现在也未必行)与算法正面较量是不切实际的,看看教程中长达数十位的key就可以明白。看起来似乎只有patch一条路可走了。

 

不过,cracker是不会轻易放弃的J。如果不知道该干什么,读代码。

 

软件的license检查使用了ElanDll。猜测,调试,里面似乎包含有可创建license的代码。为什么不让Elan自己为我生成license ? 想通了这一点,前景立即开阔了。

DllSniper输出创建license的函数。下一步是获取正确的调用参数。Hlp文件中提供的关键数据结构与当前版本有差异,这部分生成license的代码软件自己当然不会调用,无法断出需要的信息,只有靠自己猜。在IDASoftIce中反复分析调试,这很费工夫。按从易到难的顺序,可以逐渐拼出全部的field。后面就容易了。

 

当时是周末,已经调试了一个白天。晚上大约9点开始往这个方向走。最后的突破是凌晨4点。看着软件顺利的运行起来,那种挣脱牢笼一飞冲天的快乐,前面所有的挣扎全都值了。

得到的Key及生成的KeyFile

 

  2003年开始真正接触密码学算法后,这种直觉开始减退了,真是可惜呀。对密码学有所了解后,想问题的方式变了,首先考虑的是这是个什么样的算法,如何拦截密钥,是否可逆等等。这种对算法使用(不是算法本身呵呵,还没有那么狂妄)的攻击类似于直接踢门,而以前那种办法则更象是在房子后面找个可以进去的漏洞,具有四两拨千斤的效果。

真是个两难的问题啊。密码学算法绝对是应该了解的,但抛弃这种来之不易的直觉绝对错误。

两年的时间就这么流逝过去了。

 

看雪学院与CCG

(2003)

______________________________________________________________________________________

这一年终于上了宽带,到看雪学院报到了。其实看雪学院以前就有所耳闻(原来地址好象是www.toye.com),只是上网不方便,也没有意识到交流的重要。现在时机到了,我也加入了新兵论坛J

现在看看当时的帖子,还是相当狂妄的。这句“Think like a cracker”,现在想来似乎是我杜撰的呵呵,Fravia站里的文章用的是Zen。估计是灵机一动的意思。

 

  这一年,单位的局域网上架了个论坛,也开设了个加解密的版面,由此认识了yesky(可惜大约半年后他考研走了,不知现在可好?)。能有个同行方便地讨论,的确是很有益处的事。从yesky那里了解了两样东西,一是OllyDbg,二是Cracking Group

yesky用的是OD,我还在用SoftIce

 

先说OD。我很是花了点时间才习惯了这个东东,SoftIce用了好几年,真有点舍不得。不过一旦上手,感觉在易用性上的确比SoftIce强得多的多。最好的是,我不必再用纸和笔记东西了,可以直接paste到文件里J

 

在认识yesky前,我从没注意过什么Cracking Group,真是孤陋寡闻啊。Yesky领先一步加入了CCG(后来还加入了几个破解组织,还把ROR的题破了,佩服啊佩服),我也想入个伙,是份荣誉啊。

 

  下回来CCG的试题有点晕,都要写KeyGen呀。直到此时我从未学习过密码学算法的。四选二,Win98的直接放弃了。KeyFile的没费多少手脚,把汇编码直接剥出来就行(现在想来那是个RC4)。RSA+MD5+Base64的,费了不少劲,也差不多了,不料结果却不行。再到网上一瞧,好多人卡在这,气人啊(过了很久才在别人的帖子上隐约猜测到那个“龌龊”的暗桩,不过我自己一直没有再去看这个程序)。最后把VB Pcode的破了,也是头一次玩,很费事。

 

  破CCG的这几道题,学了不少东西。从这里开始,再碰到算法的时候,一般要翻翻密码学方面的书了。不过数学不行,看起来很是痛苦。好在这方面也不用太急,碰上就看看,没碰上也不管它,慢慢学吧。

  真正急需解决的问题是脱壳。

 

脱壳,脱壳!

(2004)

______________________________________________________________________________________

  进入2004年,学习脱壳已成为当务之急,尤其在shareware这个级别(行业软件加壳的很少),不会脱壳已经是寸步难行了。记得我曾经在fly的文章后面跟贴,感叹手动脱壳是最痛苦的事。

 

第一次跟壳是ExeCryptor v1.5.3保护的一个网络工具软件,GeoWhere v2.21,当时这个壳还远没有今天这样复杂,不过对我而言是足够猛了,结果半途而费没有跟完,软件本身倒是磕磕碰碰弄得可以跑了。当时在看雪论坛发帖求助,引来高手竞技,最终爆发口水大战,所以我至今对tDasm印象深刻J

 

真正入门是“五一”放假期间。连续脱掉Unpacking Saga4道试题,对脱壳找到些感觉了。这一年似乎又恢复了初学时的狂热,大部分的精力都耗在脱壳上面。

 

  第一次全程跟壳是用SDP110保护的记事本。脱掉后引来作者,在论坛上聊了几句,这对脱壳者真是极大的荣耀。

SDP作者Randy li的回帖

  提起脱壳,怎么说呢,还是那句话:代码说明一切。不自己去实战跟一跟,别人的教程怎么看都难以变成自己的知识。有位朋友转贴了一篇介绍用OllyDbg脱壳的文章,我不客气地指责“误人子弟”。的确是这样的,文中不厌其烦描述按F4到哪里,数着越过多少次异常,或者直接搜索某个二进制字节串,却没有一句为什么这样做的讲解。这样的文章我认为真的没什么价值,懂的人一看就知道,不懂的看了还是不懂。我不相信谁能通过读这种教程学会脱壳,而且对着文章照葫芦画瓢真的能搞定一些壳,这样弊端更大,造成误导,完全是走歪了路。

  我自己的感受,还是老老实实找一两个壳从头到尾走一遍,很多东西自然就明白了。熟练一些后,也就不再需要总是从头跟了。这个玩艺急不得的。

 

  脱壳我一般是用OllyDbg,不到万不得已不用SoftIce,实在是不习惯。用OD脱壳,最大的优点是可以使用脚本。脱壳的时候跟飞是常事,用脚本可以接着玩,在SoftIce下就没这么方便了。而且脚本也是IAT修复、Replaced code修复的利器。再有嘛,就是方便做笔记了J

 

有些高手直接就用debugger解决战斗,我玩不了。还有的人动不动就“秒杀”,我也始终不懂,怎么能这么快。对我而言,除非是直接用脱壳机。我自己还是喜欢和IDA搭配着来(除非是特别容易的壳),虽然慢些,但是稳当啊。为此写了个IDA插件,把被调试进程解出的代码读到IDA里,去掉Junk code慢慢看,不怕把板凳坐穿J

Unpack Assistor v0.8

 

2004年几乎都在脱壳,后来就少些了。Ring3的壳脱过不少,但Ring0XprotectorThemida却始终不敢动。兴趣倒是有,不过我的机器蓝屏一次N久才能起来,实在是受不了。

 

  这以后陆续发了些脱壳的文章,也结识了不少朋友,包括一些壳的作者,在此保存以作纪念。

wfsEncryptPE 20050314保护记事本,谁打谁?!

simonzh2000unpackme

PESpin v1.3 beta2 unpackme

 

嘿嘿,还有没脱出来的,就不贴了。

 

Ring0

(2005)

______________________________________________________________________________________

今年脱壳少了,一个原因是太耗时间精力,另外觉得重复性的东西比较多,没必要老是去追。经常费了半天工夫,要绕过去的原来是个已经知道的Anti-Debug手法。于是萌发了修改OllyDbg的念头。我的如意算盘是,如果能够把OD藏好,让被调试进程顺顺当当跑起来,那么脱壳岂不是简化成ESP定律了么J。当然实战没这么容易,不过隐藏debugger也是件有趣的事。

 

在脱壳的过程中,有两样东西让我很感兴趣。一是壳中普遍使用的多态引擎,为此从29AVX Heavens下了些教程,还读了一两个病毒源码。Z0mbieMistfall引擎给我留下的印象只能用震撼来形容。不过我试了几次,始终没能用起来。

29A 最牛的病毒杂志

 

更多的兴趣放到了进程隐藏方面,这样不可避免地涉足另一个领域,即rootkit

www.rootkit.com

rootkit所展现的,完全是一片激动人心的全新天地。进入操作系统的底层,如迷宫般错综复杂,阴暗无比。对这个世界里的顶尖高手,只能用深不可测来表达我的景仰。学习这些东西,绝不是件轻松的事,经常陷入要学A需要先学B,要学B又得了解C的泥潭。这个网站的一位高手说过,真正的rootkit都是kernel mode的。我很认同这个观点,在Ring0对抗Ring3,犹如热兵器对冷兵器,高下立判。问题是我还没搞清楚保护模式L

美女高手Joanna Rutkowska

  

一切又从零开始。一边看一边试,我的OllyDbg也逐渐能抵挡一些壳的anti-debug了。不过,最近在ExeCryptor v2.2.6主程序和q3 watcherRegClean面前又败下阵来了。

加载WASMumpackme_by-read-me

真正的问题是对操作系统底层的东西了解太少,造成系统时有崩溃。这些东西需要长时间的学习积累。以我目前的水平,连入门都还谈不上,也就无法多说了。

 

不管怎样,毕竟开始了J

 

下一站

______________________________________________________________________________________

如果说要对crack领域未来几年的走向作出预测,无疑是超出我的水平了。不如换个角度,想想自己未来一段时间想干些什么。

 

就目前而言,最吸引我的仍然是rootkit

 

有个问题不能不考虑。走到今天,许多知识已经与别的领域交叉了。主要表现在rootkit与病毒引擎,这两样都是从脱壳牵涉而来的。这些东西本身就是庞大的系统,绝非走马观花就能搞出点名堂的。虽然知识不分门派,但毕竟得有个侧重点,能做好一件事就不错了。

crack的联系仍然在壳上。迟早得自己学着写个壳,无论如何站在对手的角度实战一次是极为有益的。病毒方面,需要学习的主要是多态技术。rootkit方面则主要是进程隐藏与调试器检测。

未来的两三年,壳还不会退出舞台。

 

  其次是密码学算法的问题。这个是细水长流的类型,能时常实战一次就可以了。

  .Net(以及Java)平台上的crack是个新方向,也许是未来的大势所趋。不过现在我还不大感兴趣。软件保护中的虚拟机使用也是个值得关注的方向。

 

 

  写到这里,也该结束了。入行七年,写这么篇小文,也算是对自己的一个交代。看雪论坛就象个江湖,不断有新的人加入进来,也不断有人退出,我自己也总有离开的一天。祝愿论坛上高手辈出,也祝愿离开的人一路走好。

                                                           softworm20051114