生命不熄,奋斗不止!
记得十年前决定开发操作系统和编译器的时候,我已经解接触了开源软件,但是接触开源代码还是后来的事。
开源软件产生是为了反对微软垄断和高收费,让人们用上免费软件,今天已经大功告成!进入2013年,我发现开源社区的激情似乎已经慢慢消失,推出的新的各种开源项目计划似乎已经越来越不行了,至少我在nix下面看到,gnome3,kde4.10已经不行了,漏洞百出,不堪使用。我也在今年发布了汉澳sinox2013server和sepl编译器和sepldevelop,但我也不焦急去推广它们,因为我觉得开源时代已经慢慢过去了,人类进入了逆向时代!至少对cracker来说是这样。
我并不是一个职业程序员,但我绝对是一个专业程序员,我在小公司跳来跳去,甚至还有自己单干,我自己单干的时间比上班还多。为什么单干还能活下来?就是去做一些程序员杂活,赚点钱。但是真正赚钱的是因为我成了逆向人员,其实就是代码破解黑客。
我当时去开发编译器时候知道要用汇编才能编译程序成可执行程序。不过汇编是比较可怕的事情,我大学考了3次汇编才及格,当然我不愿意作弊,我曾经考试作弊得了好分数,还得奖学金,我觉得非常可耻。不过大学不堪回首的事情我就不说了。但是编译器还是要写的,汇编还是要学的。学了一下觉得没动力了,似乎进展不大,看到网上有人找搞破解招人的,我就决定去他们那里边破解边学汇编。去那里做了不久,还是写程序的,觉得没有前途,改去一家公司上班,搞了一段时间又觉得去搞破解更有前途,后来终于会做调试分析了,还能写程序。不久我出来自己分析破解写一个程序卖给工作室,结果赚了钱,收入好高啊,还买了房子,不知房奴滋味。正如唐骏所说的,第11年一下赚回10年的钱。
破解与反破解,调试与反调试的斗争更加激励了。但是作为跟机器码打交道的代码调试员,幸运之手垂青,不再是苦逼程序猿,也许也不是每个黑客都那么幸运。从2003《加密与解密》发布,中国破解程序员越来越多,现在10年过去了,已经拥有数万奋斗在机器语言一线的代码挖掘黑客。黑客分成两种,网络破解黑客和程序代码破解黑客。我不是网络破解黑客,我没兴趣,我觉得他们入侵不会写程序,是工具客。我喜欢代码挖掘,在黑暗的机器语言世界里摸黑游走,找到入口和破绽。一旦找到代码,我会非常兴奋,没日没月挖掘的结果竟然这么简单,仅仅就是一个jump或者call。有时也赞叹程序算法设计之精彩,之前也未曾见过。代码挖掘者是孤独行者,置身在二进制世界里,只看到cpu,寄存器窗口,堆栈窗口,内存区,当前地址数据区,目不转睛,一对眼睛要同时看5个地方,只能慢点按 F8进入下一个机器码,实在搞不懂才按 F7进入下层函数,或者 CTRL+F9跳到上层函数。01二进制世界好黑啊,我们把它叫密界,秘密的世界。一般程序员看不到。一个程序员要成为调试黑客高手要用3到5年才成熟,因此没有公司能培养黑客,黑客要成长,可能有师傅指点,但必须自学成才。
金钱利益推动黑客程序员和黑客产业发展,如果没有金钱驱使,谁会去做黑客,尤其是专业程序员,引导他们的不只是兴趣。我当初学习汇编设计编译器,但是因为觉得破解有钱途我才会加入他们。黑客学习初期起早摸黑,经常熬夜,要看看你的身体能否扛得住。顶不住就做不下去了。黑客成长是痛苦的,幸运的是我是有运气的黑客,早期加入黑客公司为他们效力成长起来。现在黑客公司似乎少了。
因为软件保护太厉害了,甚至出现了驱动保护程序,因此调试更加艰难。我转身去破解专业软件。那些专业软件竟然没有加壳保护,有如进入无人之境,破解真是太容易了。不过这些专业软件年代久远,也不是省油的灯,竟然有win16位和win32程序共存,调试起来非常困难。16位程序调试工具差,没有内存断点。只能猜测分析函数,还好,16位程序程序段很小,程序也不大,功能大的程序需要用到dll动态链接库,他们有导出函数,这样通过函数名字逐个分析调试,找出关键代码,逐个排除,找出真正的功能代码。有时候实在没办法,只能猜。32位程序调试工具好,如果没有保护,我的天啊,这种程序简直就是开源软件,破解它们有如探囊取物。
二进制程序也是开源软件,机器汇编代码可以看,只要能调试,破解指日可待。有一种程序是真正的开源软件!
java程序其实是开源软件
sun设计java虚拟机的时候就有先见之明。破解java程序也可以直接用ida反汇编class文件,然后修改汇编代码直接破解掉。这个没什么惊奇的。我告诉你,用java反编译软件直接把class和jar还原出源代码,然后修改源代码重新编译后替换回去,其实也许你不要重新编译代码,而是看java代码就能逆向出算法,比如计算系列号算法,如果还是看不出来,可以修改编译调试他的代码,那就没有任何难度。java的class还不能加壳,所以java程序应该归入开源软件类别。C#也是。
逆向其实就是破解,一种很美化的说法,逆向和破解都免不了要反汇编和调试。不过逆向需要还原出高级语言,破解可能不需要,直接破掉就能完成任务,所以逆向比破解还要高一个等级,不过现在ida似乎可以把整个函数还原出c语言程序,不过我还是喜欢自己根据汇编思路写算法,而不是直接用。但是计算系列号算法要反过来的,并不能直接用里面的函数。比如流程 注册成功数=系列号*转换数,那么系列号=注册成功数/转换数,一些数学运算,并不能用二进制代码函数算法。
破解是解除软件的收费功能。如果软件很有价值,破解掉让人人能用,那开发公司就很难赚钱。破解其实还是比较容易的,有时修改一个t跳转就好。
逆向是破解软件功能,抽取核心算法和核心数据,然后可能模仿山寨出同样功能的软件,这个是高等级破解了。仿冒,仿造,山寨软件!核心数据和算法一但被取出和山寨,这个软件就可以被低价格仿冒者拍死。我现在做逆向就是干这种活,而不是简单破解掉其注册保护。我不会说我准备破解谁的软件,但是可能我已经破解了你的软件你还不知道!你不会求爷爷告奶奶叫我不要破解吧。
有一种人,苦逼程序员苦苦写出来的软件,他们就去破解逆向出他们的程序,掠夺他们的数据和算法。同是程序员,相逼何太急!这就是程序员和逆向工程师。
都是吃饭的干活,程序员竟然分裂成你死我活的两种人,可悲!不过大家尽可放心,我现在只是破解西方国家的软件,他们的价值连城软件就这样被破解和逆向,仿造了。
这就是鲁迅说的拿来主义?西方列强的东西,不要白不要。国内还没有核心技术软件要逆向吧?软件有国界。
随着软件保护的加强,现在出现了驱动保护,在内核保护软件让你不能调试分析。不过道高一尺魔高一丈,你有驱动,我也能写驱动,在内核废除你的保护功能。这不,游戏界出现了np,tp.xtrap,hs等驱动保护程序,现在我也开始写驱动了。没有设备驱动,游戏界都能推动黑客研究和开发驱动了。我觉得作为程序员,写破解游戏驱动保护也不是一件难事吧,我要悄悄地干活。
开源和逆向目的是一样的,都是金钱推动下收钱与反收钱的斗争,高价与低价的竞争,技术垄断与反垄断的斗争,一个更加诱人的行业,吸引数万密界高手在二进制机器语言黑暗世界里摸黑挖掘,寻找蛛丝马迹,挖掘出珍贵的机器代码,并还原成高级语言。何苦做破解,何必做逆向,但是都指向一个字:钱。
也许逆向推动中国核心软件技术发展,可能不是一个钱字能覆盖他们的功用。逆向变相促进软件开源,中国已经进入了逆向时代,另类开源时代。
有人说,既然这么厉害,为何不组织一个逆向团队大力挖掘?我说,这个行业并不是完全合法,还可能摧毁商业软件的根基,必须偷偷摸摸,不能做大做强,不然又要抓人了。
逆向在黑暗的世界孤独挖掘,见不得光,其实你自己也一样。