21. 第021章 好像有人在用外挂
"蜘蛛科技旗下MOBA游戏《神座纪元》上线首日即突破十万下载量,峰值同时在线人数超过五万人。据业内人士分析,这组数据已经达到了头部游戏的首日水准。值得注意的是,该游戏的开发团队由三名在校高中生组成,并获得斯塔克工业的战略投资——"
电视屏幕暗了下去。
先锋娱乐(Vanguard Entertainment)总裁亚瑟·戴维斯把遥控器扔在桌面上,伸手拿起平板电脑,切换到了《无尽斗技场》的后台数据面板。
在线人数曲线从四天前开始往下走。起初是一个平缓的斜坡,到了昨天夜里坡度突然变陡。今天的数据还在更新——比上周同期低了百分之十八。他把曲线往回拉了一周,对比了两组数据的时间戳,然后放下了平板电脑。
他抓起桌角的座机话筒,按了几个数字。
"多米尼克。我需要你帮个忙。"
电话那头一个带着轻微沙哑的男声说:"哪家?"
"皇后区。蜘蛛科技。刚发行《神座纪元》的那家。"
"有所耳闻。"话筒里的声音顿了一下,"他们的服务器我扫过一次,没什么特别的。"
"再细看一遍。"戴维斯的语速没有变化,"周五之前,我希望他们出现一些技术上的不适。不用太大——够影响周末体验就行。"
话筒里传来一声短促的轻笑。"行。报价发你。"
"等你的好消息。"戴维斯挂断了电话,重新拿起平板电脑。
---
布鲁克林。
多米尼克坐在一间没有窗户的房间里。三台显示器围成半圆,左边那台是一组网络拓扑图,中间那台跑着端口扫描工具,右边那台开着终端。
他把咖啡杯推到键盘左侧,敲了几行命令,屏幕上开始滚动一串数据包捕获日志。
目标地址是蜘蛛科技主服务器的公网IP段。他先做了一轮常规扫描:端口状态、服务指纹、响应延迟。结果很正常——多数端口关闭,少数几个开放端口指向HTTP和数据库服务,响应时间稳定在二三十毫秒。一个标准的游戏服务器。
他截取了一段完整的请求-响应往返数据,拆开来看载荷结构。
数据包的格式是正确的。HTTP头正确,负载长度正确,校验和正确。负载内部的字段组织方式却完全陌生——键值对的顺序不遵循任何标准协议,嵌套层级深得像递归调用,有些字段名看起来像中文拼音但又不是。他能理解它在"做什么",但理解不了它"为什么能这样做"。
他盯着屏幕看了很久。然后把同一段数据又翻回去看了一遍。
"这代码有大病。"他自言自语,"怎么跑起来的?"
换了几个不同的扫描角度,又试了几次。每次返回的数据结构都不一样,每次都能用。他没法利用它,因为没法预测它的行为模式。
多米尼克盯着那串数据沉默了一会儿,坐直了身体,打开桌面上一个文件夹。
里面是一套分布式拒绝服务攻击的控制指令集。分布在十七个国家的一百多台肉鸡,常年开着后台端口待命。他把目标地址填进去,检查了一遍参数,然后按下了启动键。
监控面板上出现了一条实时流量曲线。一百多台机器同时开始向蜘蛛科技的服务器发送请求,频率从每秒几百次迅速攀升到每秒数万次。
多米尼克靠回椅背,看着那条线往上爬。
---
蜘蛛科技办公室。
键盘声、电话声、椅子滚轮碾过地板的响动、打印机吐纸的沙沙声,还有某个人在走廊那头喊"谁把示波器电源拔了"——这些声音叠在一起,像一台刚启动就踩到满油的引擎。
格温从走廊拐进来,迎面撞上三个从机房方向走出来的开发人员。其中一个手里端着一杯还在冒热气的咖啡,边走边侧着头跟旁边的同事说话,偏了一下身子绕过她,嘴里的话连停都没停:"——那个寻路算法的问题我找到了,不是服务器的事,是客户端路径缓存没清——"
格温侧身让了一下,继续往自己的工位走。
办公室的布局已经不是当初那个能放下十几张桌子的样子了。工位沿着墙面排了两排,中间穿插着几组长条桌。靠墙那一侧坐着五个程序员,每人面前至少两块屏幕,键盘敲击的声音密得像一群啄木鸟在同时工作。坐在最边上那位的屏幕上是满屏的日志滚动,他一只手敲命令,另一只手在翻一本拆了书脊的编程手册,页角压着一只咖啡杯。
走廊另一头,美术人员占据了靠窗的整片长桌。苏珊坐在长桌中间偏左的位置,面前摊着一台大屏幕显示器,上面是一张英雄皮肤的半成品渲染图,芝士葡萄战士的盔甲已经上了三层色,肩甲上的圆纹镶了一圈淡金色的边。她左手握着数位笔在涂细节,右手按着快捷键来回切图层。旁边的美术人员正在建模一个法师英雄的武器悬浮特效,屏幕上的珍珠串在一帧一帧地旋转。
"法师武器的光照角度再偏五度。"苏珊头也没抬,声音穿过键盘声落在旁边,"现在珍珠的反射面不在正面。"
"收到。"旁边的同事把模型旋转了五度,然后按了渲染预览。
长桌的尾端坐着两个刚招进来的实习生。他们面前各摊着一叠打印出来的概念稿参考图,正在用数位笔在空白画布上勾新英雄的草稿轮廓。其中一个画了两笔停下来,侧过头去看另一个的屏幕,然后把自己的画布推过去半寸,用手指点了点屏幕角落:"你这边的肩线是不是收得太窄了?"另一个歪头看了看,然后默默地把肩线加宽了一格。
戴维坐在测试区,四块屏幕围成半弧形把他包在里面。中间那台正在跑一局AI对战的回放,左边是日志滚动,右边是内存占用曲线,最左边那台开着社区的实时热帖聚合。他左手按着空格做逐帧回放,右手在键盘上打备注,脑袋在两块屏幕之间来回快速摆动。旁边还有两个测试员,一个戴着头戴式耳机在跑音频测试,屏幕上的波形图均匀起伏;另一个正把一份Bug清单拖进"已修复"文件夹,拖完之后手指在触摸板上停了一下,转头朝戴维的方向喊:"46号Bug的回归测试过了吗?"
戴维没有转头,只是把回放进度条往后拖了几秒,停在一个技能特效爆开的画面上。"过了。你自己跑一遍确认。"
对方说好,然后转回去开始跑测试。
艾米坐在前台,面前的电话在响第二声的时候被她接起来了。她一边对着话筒说"是的,正式版已全平台上架",一边用另一只手在便签本上速记,写满了半页然后翻过去。旁边摞着一叠打印好的媒体确认函,最上面那张的页角折了一下,被一杯水压住。电话挂断之后她又拿起来拨了一个号,等待音嘟了两声,她对着话筒说:"下周的采访时间改到下午三点可以吗?——好的,三点。"
走廊尽头,彼得正从机房出来,手里抱着一台旧显示器。他绕过两个蹲在机柜旁边接网线的同事,把显示器搁在储物间的空货架上,然后转身抽了一根新的网线,蹲下去插进墙角的接口。他做完这一切站起来的时候,身边一个程序员侧过头来问了一句:"机房那台备用服务器的系统装好了?"
"装好了。"彼得拍了拍手上的灰,已经在往走廊另一头走了,"IP地址我发你邮箱了。"
"什么时候发的?"
"刚才。"
程序员低头看了一眼邮箱,收件箱里确实躺着一封新邮件,发送时间显示为两分钟前。他回了一句"谢了",然后转身继续调他的配置文件。
马克从机柜侧面直起腰,手里攥着一把扎带。他刚把新到的存储节点装进机架,正在把散落的线缆理齐。旁边蹲着一个穿深蓝色工装的技术支持,膝盖上搁着一台开了后盖的备用服务器,正在换内存条。马克侧过头看了他一眼:"那台什么型号?"
"和主节点同一批。"技术支持把内存条按进去,确认卡扣弹回原位,然后合上后盖,"换完就能上架。"
马克点了一下头,把手里的扎带扎紧最后一条线,然后站起来去够机柜顶盖上那杯已经凉透的咖啡。咖啡杯旁边放着一台手持式网络测试仪,屏幕上的波形图还在跳动。
内德的工位在长条桌的角落,和美术组隔了一条窄过道。他面前并排摊着四样东西:一台笔记本电脑、一个文件夹、一张手写的排期表、一杯插了吸管的奶茶。笔记本电脑上开着论坛后台的页面,刷新频率比他看任何其他页面的速度都快。文件夹里夹着外包供应商的最新报价单,他已经翻到了第三页。手写排期表上画满了勾和叉,本周的任务行只剩最后两格还是空白。
他喝了一口奶茶,切到游戏界面看了看论坛的新帖。然后他放下手机,抬头扫了一眼办公室。四周键盘声、电话声、鼠标点击声、打印机吐纸声、椅子滚轮声,以及偶尔一两句"你那边跑完了吗"和"帮我接一下那根线"的短促问答,全都叠在一起,像一台没有静音键的机器正在高速运转。
格温看了看办公室,坐在自己的工位上,面前屏幕上一个新的通知窗口正安静地等在那里。
>_SYS: 检测到大量非法请求。来源:178个独立IP。特征:高频低负载、请求内容重复、与正常玩家操作特征不匹配。已自动拦截。当前系统负载正常。
格温扫了一遍内容,然后朝走廊方向喊了一声:"马克——系统说收到了一堆非法请求。"
机柜方向传来一声轻响。马克把叼着的扎带拿下来攥在手里,从机柜侧面探出半张脸:"非法请求?什么样的?"
"你过来看一下。"
马克放下扎带走过来。他弯下腰凑近格温的屏幕,视线快速扫过那几行描述,然后伸手敲了几个键,调出了原始日志。"来源IP分布在不同的网段,请求间隔非常均匀,载荷结构是空的或者完全重复的内容。像是按键脚本或者自动程序。测试版的时候就有人写脚本挂机刷东西,被系统挡掉了。现在正式版上线了,估计又有人开始研究外挂了。"
他手指在键盘上又敲了几行,屏幕上跳出一段分类日志——所有被拦截的请求按特征分成了三组。马克看着那三组数据,"这些请求虽然被拦了,但系统现在是在全量解析每一份请求才能判断要不要拦。如果外挂数量继续涨,可能会占掉它一部分算力。"
格温问:"有办法减轻它的负担吗?"
马克的手从键盘上抬起来,搭在桌沿上。
"我可以写一个外层的识别模块。把那些明显是外挂的请求在外面就挡掉,不需要经过系统的全量解析。这样它能把算力省出来做别的。"
格温靠在椅背上想了想。"要多久?"
"系统已经识别出几种稳定的模式了。我把那些模式转成外层过滤规则,再补一些它可能漏掉的边缘情况——如果配合顺畅的话,一个下午。"
"那就写。"格温说。
"OK。"马克转身往机房走。
他推门进去,在折叠椅上坐下来。屏幕上还有一个终端窗口没有关,光标在提示符后面安静地闪烁。他敲了一行命令,弹出一个与系统交互的共享会话窗口。
"系统。反外挂识别模块。我写外层规则,你做数据建模和模式匹配。可以吗?"
屏幕上的光标闪了一下。
>_SYS: 可以。共享工作区已创建。
马克搓了搓手,把折叠椅往前拉了拉,手指落上键盘。
外面办公室的键盘声还在继续。戴维把回放里那个"瞬时伤害来源未知"的片段又看了一遍,确认是一帧贴图错误导致的数值显示问题,在测试报告里添了一行备注:"已确认:视觉错误,非外挂。"苏珊把芝士葡萄皮肤的肩甲纹路最后调整了一遍,然后保存文件,在文件名后面加了一个"_v2"。艾米放下电话,翻了一页便签本,端起杯子喝了一口水。
格温的屏幕右下角弹出了一个新窗口:
>_SYS: 反外挂模块开发中。共享工作区已开启。预计完成时间:约4小时。
她看了一眼,把窗口关掉了。
---
多米尼克盯着监控屏幕。
屏幕上的流量曲线在头三十分钟内爬到了峰值,然后维持了几个小时的平稳,现在开始往下走了。全被正常响应了,每一秒都有几百个HTTP 200码从对面返回来。服务器资源占用曲线在四点五的位置走成了一条直线。
他调出了完整的响应日志,拆开几个数据包看了一眼。和之前扫描时见过的结构一样:完整、可用、无法解析。
他刷新了几次面板。那条线连动都没动。
多米尼克把键盘往前推了几厘米,手从桌沿上收回来,交叉放在胸前。他在黑暗里坐着,屏幕的自动休眠跳了出来,他按了一下空格重新点亮。
他想了想,拿起手机拨号。
戴维斯的声音传过来:“有进展了?”
“他们那边有一个非常强的防御机制。”多米尼克说。他顿了下,补充道,“常规技术手段打不进去。”
电话那头沉默了一会儿。多米尼克听到对面有人翻纸张的声音。
然后戴维斯的声音重新响起来:“我可以加钱。”
“这不是钱的事——”
“翻倍。”
【当前章节不完整……】
【阅读完整章节请前往……】
【nmxs8.cc】