9.
西西再次感到对头潜藏在黑暗深处的力量。据西西的所知,唐镇没有历史,或者说没有值得书写的历史。唐
镇此时此刻的在,并不是历史的在。它没有一个规定的统一出处,也不是一个家族式的树状脉落。西西小时
候住在唐镇,从来没听人说过唐镇有一个何姓始祖,更没有一个叫衙门的所在。周围的邻居来自不同的地
方,说着不同地方的方言。有时他甚至认为正是由于不同的方言太多,影响了他语言系统的发肓,使得在他
的一生中,语言总在关键时刻拉他的后腿。比如,他在小三家说小明打了小刘,到小四家要说小明掌了小
刘,而到了小五家则必须说小明捶了小刘。非常复杂,但彼此之间却能够互相理解沟通。“我们来自五湖四
海,为了革命目标走到了一起来。”西西想起小学课本中的一句话。
对头的阴险目的,一目了然。用虚拟的事物置换掉真实的事物,进一步偷天换日,换掉形式,让西西完全无
法分清真实与幻想,分不清敌人来自何处。对头显然知道西西对时间的恐惧感,准备在时间中击败他。西西
知道不能被对头牵着鼻子走,不能党指到那儿就打到那儿,而应该像阿凡提的那头驴子。
尽管故事本事的虚假性一目了解,但中间也包含一些真理。郑道士关于出生问题的说法,明显在混淆视听,
但有一点是对的。搞清楚自己的出生问题,搞清楚自己的成长经历,有助于发现对头的弱点。西西庆幸自己
以前曾经对这个问题有过深入的了解,对头在这点上似乎犯了一个错误。
“对头是在故意卖一个破绽吗?”西西在心里问自己。
我是你大妈•刘关于我出生时情形的说法,依赖于她的心情、说话的时间和在场人数,变化莫测,完全没有定
数。有时我甚至怀疑她是不是在拿我开涮,但鉴于我和她的特殊关系,我认为这种可能性就算存在,也应该
比较小,这使得我感到自己对她的强制性关系对她完全没起作用,因而开始对自己玩游戏的能力感到怀疑。
上大学四年级的时候,我终于有了一点空闲时间,更重要的原因是这个时候我有了足够的知识,可以把出生
问题放在科学的体系之中来进行研究。尤其是我刚刚从一本撕了一半的书中学到了数理逻辑,对用科学方法
解决疑难问题产生了浓厚兴趣。“如果给我一个儿子,我就可以推出我的父亲。”我敬若神明的大逻辑学家
tarski在书中的这句话深得我心。我对自己重新充满信心。
我画了一张龟背推演图,接下来花了大约两个月的时间,建立了一个数学模型,用prolog语言编了一个程
序,对我是你大妈•刘的每个说法进行分析评分。在一个美好的夜晚,我开始对它们进行最后的筛选。程序在
计算机里发出欢快的叫声,像我小时候见过的那头名叫“迈丫”的小母羊第一次发情。当时我很狐独,由出
生问题导致的自卑感使我几乎没有朋友。如果不是当时的青年歌手大奖赛给我灵感,对这些数据的分析将花
去我一生的时间,我将不能幸运的遇见我的对头。
“去掉一个最高分,去掉一个最低分,五号歌手的最后得分是……”当我的程序计算出分数时,正逢通俗歌
手也在评分。我抬头,看见五号歌手。她露出笑容,我觉得有点面熟,终于想起来,她就是将来成为我偶象
的田震。
“山上的野花为谁开又为谁败,
静静地等待是否能有人采摘;
我就象那花一样在等他到来,
拍拍我的肩我就会听你的安排。”
这是后来我为她写的歌词。我很喜欢这歌,有一种切断时间喉咙的感觉。
不过当时,我的注意力不在她的身上,而在她的得分9.85。我根据这个分数,选择了一个暗合此时此刻的地
点。我看了看横躺在那个分数下的汉字,那两个汉字我也觉得面熟:医院。
这使我有点失望,但完全没有办法。这也许是真的。
我去过我是你大妈•刘说的那个医院,它以前的名字叫工人医院,后来改为第六人民医院。医院很破,当我小
时候沿着它旁边的路走着去上学时,靠路边的墙已经开裂。缝不算大,但经不住我们几个半大小子童子尿的
进攻,逐渐象少女一样长大,宽到可以长进一些青草。我们的目光变成比目鱼,顺着细缝游入,在弗尔马林
空间里闲逛,与那些白布、瓶子和钢铁支架,构成彼此无不干挠的危险关系。当时,我们并没有认识到其实
这是一种带有宿命性质的危险关系。
这种关系一直持续到有一天,当我们比赛着谁能尿到矮墙上的水泥瓦时,突然从房里面冲出一个人来,脸色
白得吓人。我们不知道他是从哪里钻出来的,那道墙上没有门也没有窗户。
“哪里来的野种!”
头发很乱,白大挂下面穿着绿色军裤和变成黄色的军用胶鞋,军裤挽了一截,露出小腿。
“是男的还是女的?”这件事后来阿程问过我一次,我不知道他为什么关心这个问题。
“我怎么知道。”我说。
第二天,医院里派人到学校来问话,说医院里丢了一具尸体。那时我们才知道,那些平房是医院停尸房。从
此,我和阿程上学回家都绕路从大河边回家。这样做的后果是第二年一个小孩回家时掉进河里淹死了。这个
小孩也是我当时的朋友,我忘了他的名字。
“他叫什么?”我后来问阿程。
“叫何三娃。”他回答的时候,正在看一本书。
“不对吧。我记得何三娃是骑自行车摔进河里的,而且是我到学校之前的事。”
“是吗?反正是淹死的,名字倒是有可能记错了。”
我再次去这家医院,是在很多年以后。靠墙的平房已经拆掉,修起了一座漂亮的公寓,据说是医院里年轻护
士的宿舍。我走过时,那里很静。一排排自行车停在下面,在黑夜里像一堆堆正在休息的黑色骨架,互相叠
压着。轻微的鼾声从房间里传出来,使我感到这里的确和以前不同。我看了看周围,四周没有一件东西可以
作为时间的跟班,让我感到自己刚刚穿越时间而来。这对没有影响。我认定我所站立的地方正是我以前来过
的地方。时间和空间毕竟不同,它们时刻铭记着彼此无法消解的仇恨。当然,也许差三米,有这种可能,毕
竟我不是在实验室里做精确的回忆测试。
在我的正对面,是住院部的大门,一个老头在里面看报纸,抽着烟。炉子上的水壶烧得辟剥乱响,像从破旧
录音机里放出的加速了的肚子消化不良的声音。这种声音在夜色里传得很远,使我感到正在钻入一个人的肠
道,不良的气味围绕着我,钻入我的肌肤。水螅,讨厌的水螅。我明白这是走向过去的代价,这是过期后的
时间发出的气味,我理解它们对逝者不可追的恨意。穿过铁门,一条路由法国梧桐夹着。由于是冬天,这条
路从夏天壅塞的空间中解放出来,发出慵懒的喘息,时刻准备升腾而去。那些干枯的树枝由于见识大多,在
冬天的风中起舞,等待着最后一天的来临。这引起我的同感,虽然我在等待我第一天的来临,但紧张感与陌
生感是相同的。我的第一天藏我前面的一堆建筑物里,我要找到他,问他一句话。
我站在旧住院部的老手术室里,知道我的选择正确。我不能肯定自己是否在这里降生,但可以肯定一定有很
多人在这里降生。墙面带着儿孙满堂的老人特有的慈祥。惨白的灯光从门口一直照着我,脚步声在空荡荡的
过道里像恐怖电影一样夸张响起。过道里坐着很多人,默默抽着烟,他们正等待自己儿女们的到来。他们看
着我,显得失望。我想告诉他们,我跟他们不同,我在寻找父亲,但想到他们不会相信,便把嘴边的话吞下
去,使我不再饥饿。这不怪他们,逻辑上他们很正确,无可挑剔,他们是文字意义上标准的人。但自从我发
现我的出生是一件可疑之事后,再也不相信逻辑。
“走吧。这里已经没有人了。”我终于忍不住对着他们中的一个说。
他们看着我,没有理我。
“你当我们是傻子?”有一个人抽完烟后回答。
他站立的地方,有一个窗口。从那里看下去,那条指引我前来的道路,被光秃秃的梧桐枯枝夹住,像在黑夜
丰满的肚皮上,竖着划开一刀,然后顺着两边垂直方向划出乱七八糟的刀口,从里面爆出乱七八糟粘着黑色
汁液的内脏。
“我刚刚从那里穿过。”我说。
“你走错了,应该走那边。”他用被香烟熏得黑乎乎的手指着医院的新大门。
他说得不错,但我不能告诉他我来自时间的另一端。
“我老婆要给我生另一个儿子了。”他接着说。
我没有理他。我知道在游戏里时间常常会出现一些小小的混乱,我无法把我理解的告诉他们。
我推开门走进手术室。里面与外面有相当大差异。白色的光线混合一些红色的灯光,像一个孕妇的脸,布满
兴奋的红潮。我看不清这张脸,不能肯定是我的母亲或是当时在里面正等待分娩的某个我不认识的人。“手
术中”,每间房门上方的灯都亮着,波光流动发出低低的高频丝丝声。在灯光照射下我继续前行,一直到最
后的那间,看着门上的字,出生地:一九六八。和我是你大妈•刘的描述很接近,我只能相信她的确没骗我。
她以前是这间医院的护士,如果她骗我,我将永远无法证实。
我从来没想像过这里应该是什么样,我本来就不应该来到这间房间。里面的陈设让我大失所望。我不是重要
人物,又处在一个过时的游戏中,但我还是希望我的出生能够干净一些,能够合理一些。用现在的标准看,
这间房子肯定不符合起码的卫生条件,连一些宾馆卫生间也赶不上。一个烧得很红的电灶放在墙的角落,房
间里的温度比外面要高一些。朝外的窗户拉着白布,下面是一些放消毒工具的台子。中间一张手术床,托腿
架已经锈迹斑斑。我低头,看见头板的前端写着:中国沈阳。我摇着手柄,把托腿架升起来,然后平躺在上
面,把双脚放在托脚架上,我看见头顶上的无影灯,慢慢熄灭。
“出来吧。”我说。
“我说过不是我。”西西的屏幕上出现这样的一行字。
西西看了看表,已经凌晨三点。换句话说,他登入这个服务器已经超过六小时,接近黑客在一个服务器上停
留时间的极限。
“你怎么能让我相信这是巧合?”西西把这个信息发送过去。
“这倒是,换成我,我也不信。”
“告诉我,到底是为什么?”
“不是我干的,所以我不知道是为什么。”
西西从永丰公司的入侵者留下的IP,以及他登陆过的IP中,发现几个奇怪的地址。他试着以用户名twin、
hantu、blackwatert和密码hax0r、blackwater的组合登陆其上,很幸运,他登上了其上的一个。在那台机
器上有一个用户名为daoism的人。
“我只想知道你是谁。”西西对daoism说。
“我是一个黑客。”
“我知道,而且我也是黑客。但我想知道,是不是你发了那些依妹儿?”
“没有。我说过很多次了。你一上来就问我,我认为你可能认错了人。”
“好吧。你不承认,我也没办法,那么你进入过这台机器server.flink.com.cn没有?”
“我进入过很多机器,实在想不起来。不过就算进去过,又怎么样?你是‘禁止非法进入委员会’的人?”
“不是。只是那个人给我留下了一封信。”
“有趣。求爱信?”
“不是。是一封与我过去经历有关的信。”
“他要干什么?”
“我猜他是我的对头。”西西说。
Daoism过了很久才回话,“没想到是这么严重的事,对不起。我说过,我不是。”
“好的,谢谢。对了,我还想问一件事,当然,如果你没有进入过那台机器也就算了。”西西说。
“你说吧。也许我进入过那台机器。”
“是这样。我发现你进入那台机器时,利用了它的DNS漏洞,你使用了‘溢出’大法。你知道,根据‘禁止非
法进入委员会’的最新规定,破怀性进入是一件比较严重的违法行为……”
“我知道,但现在非破坏性进入的机会实在太小了。”
“你精通‘溢出’大法?”
“精通说不上,会一点。”
“你精确的找到了buffer overflow[注1]的返回地址……这很不简单。”
“这是黑客营的标准课程。”
“你指kevin的《溢出大法讲义》?”
“是的。”
“《讲义》只给出了‘溢出’大法的原理,而要找出正确的返回地址,必须依赖于天份或者奇迹。我发现你
只试了两次就进入了……”
“你检查得非常仔细。”
“只试两次就进入的人,我还是第一次见到。”
“实际上我只试了一次,第一次是我把地址输错了。”
“那么,告诉我,你是谁的后人吧?”
“你听说过唐镇吗?”
西西听到这里,头一下子大了。他突然认识到,虚拟的故事不是在干挠生活,而是本来就在生活当中。
“你到底是谁?”
“我说了你也不会知道的。我还有点事,得走了。”
“好的。谢谢。”
“再见。好好应付你的对头吧。”
Buffer overflow是近十年来黑客们的基本大法,一般称作“溢出”大法。这是黑客世界中C语言导致的严重
后果之一。西西的对头对西西公司的网关以及永丰公司网站的入侵全部使用了“溢出”大法,这是一种并不
完全靠技术就能领会的方法,更多的时候是天份。西西感到有必要对它作一番认真的研究。西西全凭天分掌
握了这种技术,这点深为阿程所艳羡,但他对大法的来龙去脉了解并不多。西西也想知道自己的这种天分是
从何而来的。他实在不愿意相信它来自自己童年时的独特经历,如果那是真的,他不知道自己是生活在一个
什么样的世界里。西西查阅了一些资料,发现整个事情越来越复杂。
关于“溢出”大法的基本原理,在黑客营的培训里有专门的课程,前面提到的《溢出大法讲义》便是这门课
的教科书。给西西上这门课的老师是一个极端古板、严谨的黑客。上课时用了极多的行话,使这门课成了一
门非常难懂的课,有的学生甚至说出了“只有黑掉这个老师本身,这门课的成绩才可能及格”这样非常出格
的话。这位老师有一段话是这么说的:
“……作用于堆栈[注2]上的操作主要有两个:Push和Pop,既压入和弹出。堆栈的特点是LIFO(Last
in ,First out),既最后压入堆栈的对象最先被弹出堆栈……”
这话有一定的难度,尤其对于那些刚进入黑客营的黑客来说。一些黑客为了应付考试,把这段话中的“堆
栈”换成“女人”二字,这样虽然有助于记忆,但对理解这段话,并无实质性的帮助。这段话的意思是指
“溢出”大法跟堆栈有一定的关系。
更有甚者,如果这位老师刚和一个女黑客学生上了床,或者刚喝了二两烧酒,他会在黑板很邪门的写下这样
的一段程序:
void 学习(知识)
{
上课(大脑,知识); // 通过上课将知识装入大脑
读书(大脑,知识); // 通过读书将知识装入大脑
}
void 生命主程序()
{
生命初始化过程(); // 出生问题
while(活着) {
学习(外部世界知识);// 调用学习这个过程,
//即通过上课、读书学习外部世界知识
工作(); // 无参过程。工作永远是自己的工作。孤独。
生活(); // 无参过程。生活永远是自己的生活。独孤。
}
}
这段程序绝不象它表面看起来那样简单,里面藏着巨大的圈套和错误。在中国的古代典籍中,这段程序没有
内部的while循环[注3],直接是学习、工作、生活,接下来便是死亡。尽管有个别人,也认识到这个流程有
一定问题,比如庄子所说,“虽然,方生方死,方死方生;方可方不可,方不可方可;因是因非,因非因
是。是以圣人不由而照之于天,亦因是也。”但这只是极少数人的看法。同时,还存在一些非主流的学术流
派,比如一些民间传说中,在“死亡”后面紧接着一个“go to”语句[注4],直接跳转到生命的初始化过
程,有一个通俗的说法来形容这种直接的跳转,叫做“转世投胎”。人们经过长时间的实践,认识到死亡并
不是一个明显滞后的过程,而只是一个作为否定的先决条件,因而最终被人们认识到“非活着”是一种状
态,而非过程。这个程序所包含的错误直到信息时代,准确的说是到了计算机时代才被改正。虽然“go to”
语句已经被证明是一种经常导致生命过程无法理解的不好的编程方法,但导致上面的程序发生错误的根本原
因,在于C语言中对数据的无判断能力的复制,即在学习过程中缺少对知识的正确性及大小的估计。人们可能
学习过时的知识,无用的知识,甚至错误的知识,导致人们行为的异常或segmentation violation[注5]。
最可怕的是,当一个人被迫学习他所不能正确理解的知识时,他的内部容器,比如大脑,会发生溢出,会导
致他的事件发生链产生错位,转到一些不知所云的事件中去。比如,一个人按照社会的合理性,他做完A事,
应该做B事,然后做C事……但当他的大脑发生“溢出”时,他则可以做完A事,直接做C事,然后在做过许多
错事后再回过头做B事。这种状况,用非技术性的通俗的话来说,就是这个人“疯了”,“神经了”。人的这
种“溢出”行为,可以被人用来控制人的思想。只要对一个人强迫他接收他所不能正确理解的知识,而这种
知识被恶意的设计,那么这个人的行为从表面上看是一个正常人,但实际已经被人控制。现在世界上有很多
种从“溢出”大法上发现起来的各种大法,比如西方的“圣法”,中国的“转法轮”。
“溢出”大法还可以被应用到非精神方面,比如金钱、财物、女人、地位等,原理同前面所说的一样。只要
给予一个人他所不能正确处理的足够多的金钱、财物、女人、地位等,他们就会按照事先规定的行为去生
活。
尽管“溢出”大法在原理上不是一个复杂的东西,但要真正实现它,在技术上则相当麻烦,如果再用一些黑
客的行话把它表述出来,理解起来就有相当的难度了。
“……我们可以通过Buffer Overflow来改变在堆栈中存放的过程返回地址,从而改变整个程序的流程,使
它转向任何我们想要它去的地方。这就为我们提供了可乘之机。最常见的方法是:在长字符串中嵌入一段代
码,并将过程的返回地址覆盖为这段代码的地址,这样当过程返回时,程序就转而开始执行这段我们自己编
写的代码。一般来说,这段代码都是执行一个Shell程序(如\bin\sh),因为这样的话,当我们入侵一个带有
Buffer Overflow缺陷且具有suid-root属性[注6]的程序时,我们会获得一个具有root权限的shell,在这
个shell中我们可以干任何事。 因此,这段代码一般被称为Shell Code……”
这段话的意思实际上和前面的意思大致相同,只不过换了一个角度。如果一个人能够读懂这段话,再通过几
十次试验,就能免强称之为黑客了。
虽然西西天赋过人,“溢出”大法无师自通,但还是认为黑客营的大法课程过于教条与专业,极大影响了黑
客事业的普及。西西不止一次的表示过,如果他有机会来教这门课的话,一定会以真正的科普精神来传达
“溢出”大法的核心思想,而不是像一些黑客教师那样,炫技的成分占得太多。
我会怎样来开始我的课程呢?只是这样想想,西西的头脑里就会出现很多想法,身体发生重大的生理反应。
这些想法彼此差别很大,但有一个共同点,那就是故事。一定要通过故事来描述“溢出”大法,除此而外,
西西想不出任何更好的办法来讲解它。西西有时会在头脑设想自己应该这样来开始他的课程。
[注1]buffer overflow:缓冲区溢出。计算机程序中的重大缺陷,经常被黑客用来非法入侵计算机系统。
[注2]堆栈:计算机编程中常用的数据结构,用于存贮数据,但满足先进后出原则。
[注3]while循环:计算机程序语言中的常见语句,通常具有形式:while(条件) 语句,当条件为真时,循环
执行语句。否则执行下一条语句。
[注4]goto语句:计算机程序语言中的常用语句,通常具有形式:goto 标号,当执行这条语句时,转到标号
处开始执行。标号可以放在任何可执行语句之前。
[注5]segmentation violation:段错误,当计算机程序转到一个它不能操作的段开始执行时,操作系统会
提示段错误。
[注6]suid-root属性:在UNIX系统中,具有该属性的程序能够执行有ROOT权限才能执行某些操作。
|