https://static.jiayezz.com/02/89635e8174445efa9d39d28cc7efc8

90年代你的电脑经常崩溃吗?是的,很抱歉

在我17岁那年,我没事情可做,所以我自学编程。于是我决定自己写个病毒出来。

别担心。我完成的两个病毒Leprosy 和 Leprosy-B是针对MS-DOS电脑的。它们和因特网没有关系,因为那时还没有。现在它们就像天花一样绝迹了。

我想写出这些搞坏别人电脑的东西出来的原因有很多。首先,像我所说的,我那时才17岁。除了摆弄电脑,我的爱好还包括用烟花炸电话亭。可写计算机病毒都是比较不错的选择了。

但是最主要的原因是我当时有些自大,在计算机地下组织,我更有存在感。我就是想要证明给其他用电脑的人看,即使是不懂怎么编程的笨蛋也能写个病毒出来。


最佳时期

那是25年前,1990年,地下计算机世界还依赖于电子布告栏系统(BBSs)。那是一种社交聊天服务,你需要通过调制解调器拨号登录它。那时基本上各家各户都是这样。这意味着同一时间系统只能允许一个人登录;只有付更多的钱才能增加电话线。

那时的计算机地下组织在很多方面都有所涉猎,而软件盗版最吸引我。17岁的青年没有什么钱买软件。那时出现过一些偷接电话线的人,他们喜欢找法子打免费的长途电话,有的人是为了通过电话交接毒品的事。随后就出现了挂病毒的人。

https://static.jiayezz.com/76/488c6640662ee5d9907000c493b9e0

写个计算机病毒出来能有多难?这就是一小段真实的Leprosy源代码

许多计算机地下组织扰烦我,因为似乎他们表现得就像你已经做了什么显得自己很与众不同的事一样。那时周围都是“Leet”或“1337”,即“精英”,这样的词语出现。但是挂病毒的人最困扰我,因为他们喜欢留着他们的小把戏和秘密比如他们自己发明了Rosetta Stone但计划让人们只能看看而已。

我的看法是,如果你从草稿一点一点完成了整个电子表格系统,我会觉得这非常了不起。但是这些人都能做到的是写程序来实现类似向人们窗口扔石头这样的事。如果每个人都能做到,我想我也能。

所以我这样做了。


捉弄搞恶作剧的人

当我遇到一个叫做AIDS的病毒(真够粗鲁)时我再也没法忍受了。它的工作方式是找到你磁盘上的 .COM 文件(可执行程序)并覆盖它们,这样下一次你试图运行它们时其实就再次运行了病毒程序,以此类推。最终,你的整个系统都会因此崩溃。而且每次病毒骗你运行它时就会打印出来一条消息来嘲笑你是多么愚蠢。

这就是它的所做所为!隐形地藏在那里并且当你想要删除它时重新安装自己。它散布在你磁盘的各个角落等着你错误地运行它。

对我来说,这程序就像放屁坐垫一样。最糟的是,这是用Borland的Turbo Pascal编写的,所以它有14KB大。开始时它们没这么大,但是当它执行后就变成14KB大了,这使得这些病毒很容易被发现。

而且是谁写成嘲笑所有人是傻子的效果啊!

于是这就变成了我的工作。我想从头开始重写AIDS,只有我能做到。我用C语言写,我会保持它在666字节以内——一系列高明的选择,因为我是个少年天才。

我决定给我的病毒起名叫做 Leprosy,这样显得酷一些,起码比不经大脑的 AIDS强。而且我脑海里还有另一个目标。

不像有些写病毒的人,他们总想让人嫉妒他们已经发明了车轮——在我看来这没什么特别——我的病毒将会成为开源的软件。所有人都有,包括源代码的全部。


对不起,彼得诺顿

我的第一个问题是如何去构造这个东西。那个时候我的电脑是一台有着10MHz 的8088CPU和640KB RAM的IBM PC XT。不是一个伟大的机器,但更重要的是,我真的不知道如何编程。

我曾通过书籍和电脑杂志自学过C语言,但它是一种通用的,高层次的方式。我真的不是很了解PC或MS-DOS。以前我是一个苹果迷。我们没有C,我们甚至没有中断。

虽然如此,但是我有一个秘密武器,这是一本书,叫《彼得诺顿IBM PC程序员指南》。没错,“那本像粉红色T恤一样的书。”它告诉我我需要知道写一个如同艾滋一样的沉默但是恼人的病毒。

但我有一个额外的挑战。我想这个程序是很小的,只有666个字节。我的C编译器,当时Borland Turbo C,虽然它允许你编写各种存储模型的程序,即使是最小的可执行文件,有一定的开销,因为启动代码。当他们开始时,他们会分析命令行参数并做一些其他的任务。为了我的目的,我真的不需要这些功能。

https://static.jiayezz.com/ee/c330241d09e6de46c240456a432457

信不信由你,在那些日子里,你可以经常发现一个病毒,只是通过搜索它打印出来的文字。我解决了那个问题

对我的问题的答案,就像在那些日子里的许多答案一样,是以计算机杂志的形式出现的。具体而言,1989年12月26日那期PC杂志,它打印的汇编语言源代码来启动程序,可以让你的程序的大小降到最低可能的最小值(第297页)。我并没有真正理解它,但它解决了我的问题,所以我用它。

我通过使用一堆内联汇编语言完成我的代码,同样可以使得可执行程序变小。但这一切都很简单,就像我想的一样。并且我要把每一行代码都添加上注释,这样新手程序员就可以知道我在做什么。

并且我在其中添加了一些功能使得麻风比艾滋更牛逼(兄弟,这句话写出来真奇怪)我使用了一个简单的加密所有的文本字符串,使得它们很难通过文本编辑器分析。也不是嘲笑你,当你运行它,它抛出了一个貌似合法的系统错误消息,在让你再次尝试运行它的希望。它会感染一次超过一个文件。它知道如何在你的磁盘上跳转目录,一旦它用完了未受感染的文件。

如果你想知道我25年前的这一切,真的我不记得了,记得我曾提到过,这是一个公共领域的病毒?我多么希望“1337”病毒区的人可以嘲笑我,然后把这个软件给所有人,所有像我一样的小孩能够去学习。每当我写完代码,我在哪个概念的基础上把代码翻一番。

我写了一个手册:https://regmedia.co.uk/2015/09/02/leprosy-manual.txt


爆发

忏悔时间:我从来没有做过任何用麻风病毒来做坏事。我曾经感染过的唯一的人是我自己。因为毕竟,我必须运行它,看看它是否工作,我没有?所以我首先想到的是,“是的,它的工作!”我的想法是:“一分钟后,我需要在和我的编译器和我的所有工具同一目录下运行它。”

教训。有的时候他们来的太艰难。

但我不相信,当我写的时候我从来没有任何恶意的意图,。对我来说它已经成为你的基本编程项目。我只是想看看我能不能把它拉下来。我没有任何敌人,或我想伤害的人。我没有任何理由把它强加给任何人。

所以我把它给了那些做过的人。

https://static.jiayezz.com/9d/47efe199ae46f1e74af36b98292d55

 

太多的Iron Maiden:由于某些原因,我的病毒只需要666的字节就能运行,这对我来说很重要

长话短说,我给了一个家伙,我称之为论坛上的人,他并不认同我在“1337”社区中公认高贵的概念。他认为,麻风是伟大的,事实上,没有人让它更好。他认为他有一个0day病毒在他的手中,他认为这意味着他有吹牛的权利。他所做的第一件事就是把一个受感染的文件上传到一个论坛上。


傀儡

短期里,他得到了他想要的效果。那个论坛的管理者被他的上传吓坏了,尖叫着,喊着,挥舞着所有的旗帜。有一段时间我不知道谁更兴奋,不知是那个上传我病毒的人还是那个我从未听过但是感染了我病毒的人。他们俩似乎都认为他们很有名。

长期的,当然,这意味着,在不到24小时的时间里世界上的每一个防病毒供应商有一个签名的麻风病毒。因此,它是没有用的。几乎是在到达时死亡。源代码和手册都在那里供人阅读和学习,但是运气好的话可以通过它感染任何人。

所以我做了一个有责任感的人应该做的事:写了另外一个病毒程序。

执行B计划

自从我写了原始的Leprosy之后我一直在学习,并且我开始变得更加有野心。所以出现了Leprosy Strain B,我打算这样命名它,这次没用C语言编写而是选择了100%的汇编语言。这会给予我更多的控制权,而且更容易控制在666节的大小之内(666个字节对我来说仍然很重要)。

脑海中首先浮现的想法是原Leprosy可以被立即检测到,因为它对于所有人都可见。怎么办呢?毕竟我不能不停地写入这些东西。

我决定给病毒自身加密,即便是用比较简单的方法。方法是产生一个随机数,并用它来XOR自己的值——一个可逆二进制运算,这将使得病毒难以识别,因为每个拷贝都有所不同了。

诚实地说,这个改变可能确实不算什么。但是,我想象即便是解密了代码的一部分,其余的部分仍然能够给反病毒程序带来巨大的谜团使得破解它变得困难。这是我作为一个崭露头角的程序员的一项很大的挑战,而且我因加入了这个功能而对自己信心倍增。

https://static.jiayezz.com/9b/3f4fc329573f5ebca19a9159ba8874

我需要一个爱好,所以我自学了8086汇编语言。也许我需要一个更好的爱好

我给这个功能起名叫“Cybernetic Mutation Technology™”,主要是为了鄙视一个叫Omen Technology的公司,这是一个使通信软件变得重要的、同时也是一个爱好注册商标的公司。就像我说的,那段时间我有些太过自负了。

所以我写了Leprosy-B,我发布了它,故事到这里变得有些诡异,因为就是在那时我对整个事情失去了兴趣。谁知道什么分散了我编写计算机病毒的注意力。恐怖片?工作?还是女孩?我输给了时间,从那之后就没做出什么了。


几乎成名

从那以后我都没留意过相关的消息,直到几年之后,当我的朋友Thad去读大学了,他上网发现了一本关于计算机病毒的电子杂志叫做40HEX。

这本自称为“堕落与肮脏的电子杂志”发行的目的在于发布计算机病毒的源代码,这样人们就能更加了解病毒了。简而言之,这就是当我刚开始写Leprosy时希望病毒社区中发生的事。而你不会知道,第一个发布的源代码就是Leprosy-B.的,也许是我启发了他们,谁知道呢?

40HEX的编辑这样写道:“虽然这种病毒称不上什么神奇的发明,但是这种简单的加密方法被之后所有的病毒所使用。”

这句话让我愣了两三分钟,这是真的吗?我不知道其他的病毒用什么方法,因为我当时没办法看看一个病毒的源代码。至于 Leprosy-B,我只是梦想着通过使它每次看起来稍有不同让我的病毒难以被发现。

虽然这其实没什么必要。毕竟我的是开源的病毒。我已经发布了源代码。而且可以肯定的是,世界各地的黑客已经由它发展出了几十个甚至几百个变种。

其中的一些添加了新的功能,一些甚至对个人计算机做了比我想象过的更为过分的事。一些则是改变了文本字符串,这样病毒就能给女朋友,或者类似女朋友的人进行留言,我想这还挺浪漫的。


虚度的青春

40HEX称我的病毒是“不伟大的奇迹”并且它真的不是,并且从来也没有打算是。已经有病毒的时候,它会终止并驻留,感染硬盘的引导扇区,当你的列目录是,它会通过其他各种隐身的把戏来伪装自己。不过,我仍然认为,它无法和那些写出实际有用来帮助人们完成他们的工作、组织他们的生活的程序员们相提并论。

当我在1990年写病毒的时候,我从来没有听说过Richard Stallman,自由软件基金会或者GNU通用公共许可(GPL)。我大概在我离开BBS并且全职上网的时候才了解到。

但几年后,我的leprosy-b发布,与此同时这家芬兰的家伙叫Linus Torvalds向互联网上发布了Linux内核0.12版本,它在GPL许可下,这意味着它是免费软件。GNU项目已经有大量的免费工具,沿着这个内核,使之成为一个完整的UNIX操作系统,这样你可以免费。在那之后,世界开始变的很快。

我错过了我的机会可以成为世界一个好的和有用的一部分在短短几年中。相反,我是一个网络破坏者。但讽刺的是,当我开始做了一个让人不知道的公共领域病毒,在那里,代码将是免费的,可以提供给任何想要它的人,我有一个正确的想法。

那么,一个人如何浪费了他的少年岁月并向其他人的电脑中扔石头占据了他的成年生活的时间?我想这是显而易见的。他为The Register写下了上面这些文字。

文章原文链接:https://www.anquanke.com/post/id/82405