造物主的漏洞
第1章 封杀(上)
凌晨三点,陈零盯着屏幕上密密麻麻的代码和数值,手里端着一杯已经凉透的速溶咖啡。他的眼神里没有愤怒,没有狂热,只有一种近乎麻木的无聊。
在他面前,是《永恒纪元》的测试服后台。这款由"星耀互娱"斥资三亿、耗时三年打造的史诗级MMORPG,正处在公测前最关键的内部压力测试阶段。作为曾经业内最顶尖的系统策划之一,陈零被高薪聘请来做最后的数值平衡。
但他现在要做的,不是平衡,而是毁灭。
"无聊。"陈零轻声嘟囔了一句,手指在键盘上敲击出清脆的节奏。
《永恒纪元》的经济系统是他亲手搭建的。为了追求极致的拟真和动态平衡,他设计了一套极其复杂的"双轨制"货币流转模型。一条是玩家打怪掉落的"基础货币",另一条是系统回收道具产生的"流通货币"。这两条线在正常逻辑下是平行的,通过一个名为"世界熔炉"的隐藏算法进行动态汇率调节。
但陈零在半年前写底层代码时,故意留下了一个极其隐蔽的交叉点。
那是一个只有在他这种对系统了如指掌的人眼中,才会显现的"漏洞"。
他打开了一个测试账号,角色ID:Zero。
第一步,他走到主城拍卖行,上架了一件毫无价值的白色装备,标价100金币。第二步,他切出另一个账号,用100金币买下这件装备。第三步,在交易完成的0.01秒内,他利用一个极其刁钻的宏命令,同时触发了"世界熔炉"的汇率结算和拍卖行的延迟扣款。
屏幕上,两个账号的金币数字开始跳动。
100,200,400,800。
"看啊,这就是你们引以为傲的'完美闭环'。"陈零对着空无一人的房间举起咖啡杯,像是在敬一杯酒。
他感到一种病态的愉悦。这种愉悦并非来自于破坏,而是来自于"证明"。他证明了再精密的系统,只要是人写的,就一定有缝隙。而他,就是那个拿着放大镜在缝隙里跳舞的幽灵。
测试服的崩溃只用了三分钟。服务器负载瞬间拉满,后台报警声响成一片。陈零知道,测试服的数据会在明天早上被清空,这不会造成实质性损失。
但这只是开胃菜。
他关掉测试服,打开了一个加密的虚拟机。里面躺着十二个早已准备好的正式服账号。这些账号都是他用不同身份信息注册的,没有任何关联,且都拥有正常的游戏行为记录。
"好了,该上正餐了。"
陈零的眼神终于有了一丝波澜。他深吸一口气,手指再次落在键盘上。这一次,他的操作快得几乎只能看到残影。
十二个账号在同一时间登录了正式服。同样的操作,同样的漏洞,同样的指数级增殖。但这一次,是在正式服。是在那个拥有三千万真实玩家、承载着数亿流水的虚拟世界里。
金币的洪流像是一场无声的海啸,瞬间淹没了《永恒纪元》的经济系统。拍卖行里,原本稳定的物价开始剧烈波动;世界频道里,玩家们惊恐地发现,自己辛苦攒了半年的金币,在短短几分钟内变得一文不值;交易行里,无数脚本和工作室像是闻到了血腥味的鲨鱼,疯狂地涌入这个刚刚出现的"财富密码"。
陈零没有停手。他像一个冷酷的指挥家,精准地控制着这场灾难的节奏。他没有让系统立刻崩溃,而是让它处于一种"将死未死"的濒死状态。他要让每一个在线的玩家,都真切地感受到这场经济雪崩的寒意。
十分钟后,他停下了手。
他打开了一个国内最大的游戏论坛,用一个新的匿名ID,发布了一个帖子。标题很简单:《关于<永恒纪元>经济系统"双轨制"模型的一个小漏洞》。帖子的内容没有嘲讽,没有炫耀,只有极其冷静、极其专业的技术分析。他一步步拆解了自己是如何利用规则交叉点,制造出这个无限增殖的逻辑闭环。他甚至贴心地附上了三段不同角度的操作录像,以及一份长达二十页的PDF分析报告,里面用数学公式和代码截图,将这个漏洞的成因、影响范围、以及修复难度,剖析得清清楚楚。
在帖子的最后,他写道:"这个漏洞的存在,证明了贵司的'完美闭环'只是一个美好的愿望。它不是被黑客攻击,也不是被外挂破坏,它只是……一个规则上的必然。祝你们好运。"
点击,发送。
陈零靠在椅背上,长长地吐出一口气。他感到一种前所未有的平静。那种无聊感又回来了,像潮水一样,重新淹没了他。
他知道接下来会发生什么。帖子会在半小时内被顶上热搜,然后被星耀互娱的公关团队疯狂删帖,但为时已晚。截图和备份会像病毒一样在各大论坛、贴吧、QQ群里传播。一个小时后,星耀互娱的股价会在美股开盘后应声暴跌。两个小时后,公司的CEO会在内部会议上暴跳如雷,要求彻查此事。三个小时后,技术总监会带着安全团队,顺着他留下的、故意没有清理干净的蛛丝马迹,找到他。
一切都在他的预料之中。这就像是一场精心编排的戏剧,他只是按下了播放键。
陈零站起身,走到窗边。窗外是城市沉睡的夜景,零星的灯火像是散落在黑色天鹅绒上的碎钻。他看着这一切,感觉自己就像那个躲在幕后的造物主,冷眼旁观着自己创造的微小世界走向毁灭。
"真无聊啊。"他再次感叹。
他不知道的是,在他按下发送键的那一刻,在某个他无法感知、无法触及的维度里,有一双眼睛,也正因为他的这个举动,而缓缓睁开。那双眼睛没有情绪,没有愤怒,只有一种超越了人类理解的、冰冷的"观察"。它看到了陈零。不是看到了一个名叫陈零的人,而是看到了一个"异常变量"。一个试图用有限的逻辑,去触碰无限规则的"错误"。
造物主没有干预。它只是静静地记录下了这个坐标,然后,启动了"修正"程序的预备序列。
而陈零对此一无所知。他只是觉得,这场游戏,玩得有点太简单了。
他回到电脑前,关掉了所有窗口,打开了一个空白的文档。他需要写一份辞职信。或者说,一份告别信。
他知道,从明天开始,他将不再是那个在聚光灯下接受掌声和唾骂的明星策划。他会被整个行业封杀,他的名字会成为"危险"和"不稳定"的代名词。没有公司敢再雇佣他,没有项目敢再让他碰。
但他不在乎。他只是在思考,下一个"漏洞"会在哪里。或者说,这个世界本身,是不是也存在着某个,等待被他发现的、更加无聊的"漏洞"?
他敲下了辞职信的第一行字:"致星耀互娱管理层:"然后停住了。他看着这行字,忽然觉得有些可笑。他是在向一群连规则都看不懂的人解释,自己为什么要毁掉他们的玩具吗?
不,没必要。
他删掉了那行字,重新输入:"世界是个巨大的草台班子,而我,只是不小心踢翻了其中一块木板。祝好。"
发送。
陈零合上笔记本电脑,走到床边,和衣躺下。他闭上眼睛,听着窗外偶尔驶过的汽车声,感受着一种奇异的安宁。他不知道,这种安宁,是他此生最后一次能够沈砚入睡的夜晚。
在黑暗中,那个被称作"修正"的序列,已经悄无声息地,锁定了他的命运。
第二天早上九点,天穹互娱的安全团队找到了陈零的公寓。
他们来得很专业,穿着黑色的夹克,戴着白色的手套,动作干净利落。领头的是一个三十多岁的男人,姓周,是星耀互娱安全部门的主管。他看着陈零,眼神里有一种混合了愤怒和敬畏的复杂情绪。
"陈零先生,"周主管说,"我是星耀互娱安全部门的主管,姓周。我们需要你配合调查一起……技术事件。"
陈零正在厨房里面泡方便面,听到这话,手顿了一下。
"什么事件?"他问。
"《永恒纪元》正式服的经济系统,"周主管盯着他的眼睛,"昨晚遭到了不明攻击。我们的监测系统检测到异常的数据流动,追踪源头后……发现是你。"
陈零嗦了一口面,点了点头。"是我。"
周主管似乎没想到他这么干脆,愣了一下。"你承认了?"
"承认什么?承认我写了一段代码?"陈零把方便面桶放到桌上,"周主管,你们查了我的代码,应该知道那不是攻击。那只是一个……漏洞。一个你们自己没发现的漏洞。我只是把它展示了出来。"
"你故意触发了这个漏洞,然后在论坛上公开发布了详细的技术分析。"周主管说,"这导致了游戏股价暴跌,公司损失超过两亿。你知不知道这是什么行为?"
"我知道。"陈零说,"这叫'白帽子'。"
"白帽子不会在攻击之后发帖子炫耀。"
"我没有炫耀。"陈零说,"我只是……陈述了一个事实。"
周主管看着他,沉默了好一会儿。然后他叹了口气。
"陈零先生,我不跟你绕圈子。你已经被行业封杀了。全国Top50的游戏公司都不会再录用你。你的技术能力我们承认,但你的……行为方式,我们不敢再冒险。"
"我知道。"陈零说,"所以我来拿我的东西。"
他指了指卧室方向。
"你的东西我们已经收好了,"周主管说,"包括你的工牌、电脑、钥匙。另外,你的个人物品我们也检查过了,没有发现任何公司机密文件。"
陈零点了点头,没说话。他走到卧室,拿起床头柜上的一个钱包,里面装着几百块钱现金和一张银行卡。这就是他全部的身家了。
"你要去哪里?"周主管问。
"不知道。"陈零说,"也许去旅行,也许去打工。"
"你……就没有什么想说的?"
陈零想了想。
"有。"他说,"你们的那个'世界熔炉'算法,还有一个更隐蔽的漏洞。在汇率调节的第三层逻辑里,当基础货币和流通货币的比值超过1:7.3的时候,会出现一个浮点精度误差。这个误差很小,正常情况下不会触发,但如果有人故意制造极端的市场条件……"
周主管的脸色变了。"你说的这个漏洞,存在多久了?"
"从我写代码那天就在了。"陈零说,"不过我不打算告诉你们怎么修。"
他拎起钱包,走出了公寓。
周主管站在门口,看着他的背影,忽然喊了一句:"陈零!"
陈零停下脚步,回过头。
"你……"周主管犹豫了一下,"你为什么要这么做?为了钱?为了出名?"
陈零想了想,摇了摇头。
"不是为了钱,也不是为了出名。"他说,"只是……太无聊了。"
他转身走了。
周主管站在原地,看着空荡荡的走廊,忽然觉得一阵莫名的寒意。
不是因为陈零的话。而是因为陈零说这话时的表情——那种纯粹的、不带任何伪装的无聊。
一个人可以为了钱去犯罪,可以为了出名去冒险,可以为了复仇去策划。但一个人如果只是……无聊,那他是不可预测的。
而不可预测的东西,才是最危险的。
陈零走出大楼,站在阳光下,深吸了一口气。
他掏出手机,打开地图App,搜索"三线城市 小卖部 招聘"。
搜索结果跳出来一堆信息。他随便点了一个,地址显示在南方某座他从来没听说过的城市。
陈零把手机收起来,走进阳光里。
他要去一个没有人认识他的地方。
一个没有游戏、没有公司、没有漏洞的地方。
至少理论上是这样。
==================================================
第2章 封杀(下)
临川市,一座连高铁都刚刚通了两年的三线城市。
这里的空气里总是弥漫着一股潮湿的、混合着炸串和下水道的气味。街道不宽,两边的梧桐树长得肆无忌惮,枝叶交错,把本就狭窄的天空切割成一块块不规则的碎片。
陈零拖着一个行李箱,走在建设路上。行李箱的轮子在一个坑洼处卡了一下,发出一声刺耳的摩擦声。他没有低头去看,只是凭着惯性,用力一拽,轮子"咔哒"一声弹了出来,继续向前滚动。
他穿着一件洗得发白的灰色T恤,一条宽松的黑色长裤,脚上是一双不知道穿了多久的帆布鞋。他的头发有些长了,乱糟糟地盖住了额头,整个人看起来就像是一个刚从网吧里熬了三个通宵出来的无业游民。
事实上,他也确实像个无业游民。
距离他在《永恒纪元》正式服制造那场"经济雪崩",已经过去了整整三个月。这三个月里,他经历了预料之中的一切。星耀互娱的律师函、行业内的全面封杀令、前同事们的避之不及、以及网络上铺天盖地的谩骂与嘲讽。他像是一个被戳破的脓包,被整个行业迫不及待地挤干净了最后一滴价值,然后随手扔进了垃圾桶。
他没有辩解,没有反击,甚至没有接受任何一家媒体的采访。他只是默默地收拾了行李,退掉了北京的出租屋,然后买了一张最便宜的硬座火车票,来到了这个他在地图上随机点选的城市。
为什么是临川?没有特别的原因。只是因为在地图上,这个城市的名字看起来比较顺眼。
陈零停下脚步,抬头看了一眼面前的招牌。
"唯品超市"。
招牌是那种老式的红底黄字,边角已经有些褪色,上面的"品"字还缺了一角,看起来像是被什么重物砸过。招牌下面,是一扇卷帘门,此刻正拉起一半,露出里面昏暗的光线。
他弯腰钻了进去。
超市不大,大概只有四五十平米。货架上的商品摆得满满当当,但也乱糟糟的。薯片和洗衣液挤在一起,方便面和酱油挨着放,空气中弥漫着一股混合了灰尘、廉价香精和过期食品的复杂味道。
收银台后面,坐着一个女人。
她看起来二十七八岁,穿着一件宽松的碎花连衣裙,头发随意地挽在脑后,几缕碎发垂在耳边。她正低着头,专心致志地……用一把小剪刀,修剪自己左手食指上的倒刺。
听到有人进来,她抬起头,眼神有些茫然地看了陈零一眼。
"买东西?"她的声音软绵绵的,像是刚睡醒。
"不买东西。"陈零走到收银台前,把一张皱巴巴的A4纸推了过去,"应聘。"
女人愣了一下,低头看了看那张纸。那是一份手写的简历,上面只有寥寥几行字:姓名:陈零。年龄:26。特长:算数快,不怕无聊。期望薪资:够吃饭就行。
她看完,又抬起头,用一种更加茫然的目光看着陈零。
"你……是来搞笑的吗?"
"不是。"陈零面无表情地回答,"我需要一个地方住,一份工作。你需要一个看店的人。我觉得我们很合适。"
女人歪着头,似乎在努力理解他的逻辑。过了好几秒,她才像是终于想通了什么,点了点头。
"哦。那你以前干嘛的?"
"策划。"
"策划?策划什么的?婚礼策划吗?"
"……游戏策划。"
"哦。"女人似懂非懂地点了点头,然后问出了一个让陈零有些意外的问题,"那你……会算账吗?"
"会。"
"那太好了!"女人立刻露出了一个如释重负的笑容,"我叫方唯,是这儿的老板娘。我数学特别差,每次盘货都盘不清楚,上个月还多给了供应商两百块钱。你要是能帮我把账算明白,一个月给你三千块,包你住后面那个小房间,怎么样?"
三千块,包住宿。在北京,这连一个合租次卧的租金都不够。但在临川,这足以让一个身无分文的"行业罪人",重新获得呼吸的权利。
"可以。"陈零说。
"太好了!"方唯高兴地拍了拍手,"那你现在能帮我看看,这箱过期的火腿肠,到底该算进损耗里,还是算进库存里啊?我纠结了一上午了。"
陈零低头看了一眼收银台上那箱火腿肠。
"算损耗。"他说,"因为已经过期了,没有销售价值。"
"哦……"方唯拖长了声音,像是在努力消化这个"高深"的知识,"那……为什么我之前算的时候,把它算进库存,账就能平了呢?"
陈零看着她。方唯的眼神清澈而愚蠢,没有一丝一毫的伪装。她是真的不明白。
"因为……"陈零斟酌了一下用词,"你把'应该有的数量'和'实际有的数量'搞混了。库存是实际存在的,损耗是预期和实际之间的差额。你把差额当成了实际,账当然能平,但那是假的。"
方唯眨了眨眼,像是在听天书。
"好复杂……"她叹了口气,然后摆摆手,"算了,反正你比我懂。以后这些都归你管了。"
她站起身,伸了个懒腰,碎花连衣裙的裙摆随着她的动作轻轻晃动。
"走吧,我带你去看看你的房间。后面有个小院儿,挺安静的,就是夏天蚊子多。"
陈零跟在她身后,穿过一道挂满了塑料门帘的过道,来到了超市后面的小院子。院子不大,被收拾得还算干净。角落里堆着几个空纸箱,旁边是一棵不知道什么品种的树,枝叶茂盛,几乎遮住了半个院子。树下放着一把竹椅和一张小方桌,桌上还放着一个缺了口的搪瓷杯。
"这就是你的房间。"方唯推开一扇木门。
房间很小,只有一张床、一个衣柜和一张书桌。窗户正对着那棵树,光线有些昏暗。但空气很干净,没有前面超市里的那种复杂味道。
"被子在柜子里,自己拿。卫生间在外面,热水器是太阳能的,阴天可能没热水,你得自己看着办。"方唯交代完,转身就要走。
"方姐。"陈零叫住她。
方唯回过头:"嗯?"
"你为什么雇我?"陈零问,"你就不怕我是个坏人?"
方唯想了想,认真地回答:"你看起来不像坏人。坏人不会说自己'不怕无聊'。而且……"她顿了顿,眼神里闪过一丝不易察觉的温柔,"你看起来,好像很累的样子。"
陈零愣住了。
他看着方唯那张平凡而善良的脸,忽然觉得,自己那些关于"规则"、"漏洞"、"造物主"的宏大叙事,在这一刻,显得如此苍白和可笑。
他以为自己是在逃避封杀,是在寻找下一个"漏洞"。但也许,他只是太累了。
"谢谢。"他轻声说。
方唯笑了笑,摆摆手,转身走了出去。
陈零站在空荡荡的房间里,听着外面传来的、属于三线城市的、嘈杂而鲜活的声音。有小孩在巷子里追逐打闹的笑声。有卖冰棍的老大爷拖着长音的吆喝。有隔壁邻居炒菜时,锅铲和铁锅碰撞的声响。
他走到窗边,推开窗户。一阵带着树叶和泥土气息的风吹了进来。他深吸了一口气,感觉那股一直萦绕在心头的、冰冷的"无聊感",似乎被这阵风吹散了一些。
他不知道这个世界有没有"漏洞"。但他知道,至少在这个叫"唯品超市"的地方,在这个叫方唯的女人身边,他找到了一个可以暂时停下脚步的、真实的"锚点"。
他转过身,走到书桌前,从口袋里掏出一支笔,在一张空白的纸上,写下了第一行字:
"临川市,唯品超市,第一天。"
然后,他停住了。他看着这行字,忽然觉得,这比他在《永恒纪元》里写下的任何一行代码,都要真实。
那天晚上,陈零第一次在小卖部过夜。
方唯让他睡在超市后面的小房间里,自己则回到超市里面的休息室。陈零躺在床上,听着外面传来的、方唯在里屋看电视的声音——好像是某个综艺节目,笑声很大,但内容似乎并没有好笑。
他盯着天花板上的水渍,想起了很多事情,又好像什么都没想。
三个月前,他还在北京三环内的一套公寓里,面对着落地窗俯瞰城市的夜景,思考着下一个要挑战的"漏洞"。三个月后,他躺在临川市一家小卖部后面的房间里,听着一个不太聪明的老板娘看综艺节目的笑声,感觉自己像是一个被世界遗忘的幽灵。
这不算太差。至少比被扔进垃圾桶好。
陈零翻了个身,闭上眼睛。
他不知道的是,就在他闭上眼睛的那一刻,小卖部货架最里面的那个角落,微微闪了一下。
那种闪逝极快,快得像是一个错觉。如果不是有人特意在那里放置了一台高灵敏度的光电探测器,根本不可能捕捉到。
但那天晚上,陈零并没有放置探测器。
那个角落只是……闪了一下。
然后一切恢复了正常。
就像什么都没有发生过一样。
。
第二天早上,陈零被一阵嘈杂的声音吵醒。
他打开门,看到方唯正站在超市门口,跟一个中年男人吵架。
"我说老李,你这批货怎么又少了两箱?"方唯叉着腰,一脸不满。
那个叫老李的批发商搓着手,一脸赔笑:"方姐,这……这可能是运输过程中损耗了吧。你也知道,路上颠簸……"
"损耗?"方唯指了指货架上空空如也的位置,"我昨天刚盘过货,明明多了三箱可乐的。怎么到你手里就少了两箱?你当我傻啊?"
陈零站在门口,把这一切看在眼里。
他的目光从方唯愤怒的脸,移到老李搓手的动作,再移到货架上空空的位置。然后他注意到了一件小事——货架最里面的那个角落,似乎比昨天更暗了一些。
不是光线的问题。是那个角落本身……似乎比周围更"空"一些。就像是一个画面中被擦掉了一块的像素,虽然不影响整体的观看,但如果你盯着那里看,会感觉到一种说不清的异样。
陈零摇了摇头,觉得自己可能是没睡醒。
"方姐,"他走过去,对方唯说,"让我来处理。"
他走到老李面前,看了看他递过来的送货单,又看了看货架上的商品。
"老李,"陈零说,"你昨天的送货单上写的可乐是三十箱,实际送到的是二十八箱。但你在账上记的是三十箱。所以方姐盘货的时候发现多了三箱——因为她把前天没卖完的一箱也算进去了。"
老李的脸色变了变。
"你……你怎么知道?"
"因为你送货单上的日期写的是昨天,但笔迹是新写的。"陈零指了指送货单角落的一处墨迹未干的痕迹,"你昨天根本没来送货。你是今天凌晨偷偷来的,把前天少给的两箱补上,然后伪造了昨天的送货单。"
老李沉默了一会儿,然后叹了口气。
"行,你厉害。"他摇了摇头,"我认栽。"
他走了之后,方唯看着陈零,眼神里充满了敬佩。
"你怎么什么都知道啊?"
"不是什么都知道。"陈零说,"只是看得仔细而已。"
他转过身,假装在看货架上的商品,掩饰自己嘴角不自觉扬起的那一丝笑意。
他不知道自己为什么要在一个三线城市的小卖部里玩这种"侦探游戏"。也许只是太无聊了。
也许……他只是想找点事情做,好让自己不去想那些不该想的事情。
比如那个角落。
那个看起来有点"空"的角落。
==================================================