清晨五点四十七分,主控台屏幕突然跳红。
周明远的手指还搭在电源开关上,绿色数据流刚滚过“封锁中”三个字,下一秒就被一串乱码吞掉。推动力阈值显示突破临界——**103.7%**,但传感器读数纹丝未动,压力表指针卡在68%,温度正常,振动频率稳定。假信号。
他没动。
右手食指贴着桌面边缘,轻轻敲了两下,短、短。不是节拍,是确认触感还在。左小臂隔着冲锋衣传来一阵刺痒,像是疤痕在预演暴雨夜的旧伤,但他没去拉袖口。现在不是压记忆的时候。
他退后半步,从内袋抽出钢笔,拧开笔帽插回口袋,动作像换弹匣。然后掏出比价表,翻到昨晚记录电力负载的那一页。纸页右下角写着“03:18异常调用”,旁边画了个圈,圈里打了个叉。他盯着那行数字看了三秒,把比价表摊在控制台上,用钢笔尖点了一下“推动力模拟模块”的能耗曲线。
这玩意儿不对劲。
昨天同一时间,系统也报过一次临界突破,结果是通风管共振引发的误判。可这次不一样。数据漂移太整齐,像是有人刻意对齐过节奏。他调出离线日志,和实时画面并排对比。两组数据源都来自同一个采集端口,但写入时间差了0.4秒。一个在前,一个在后,像是复制粘贴时手抖了一下。
双写。
他立刻拔掉主控台网线,切断远程访问权限。又按下物理隔离按钮,主屏幕切换成黑白界面,只显示本地存储数据。乱码消失,推动力回落至69.2%。真实值。
问题不在硬件。
也不在外部攻击。
是在系统内部,有人埋了东西。
他按下通讯键,声音压得极低:“丁,来主控区,带加密终端。”
不到两分钟,科研专家丁出现在门口。防静电服没穿好,一只袖子卷着,手里拎着便携式频谱仪和一台黑色加固平板。他进门第一眼就看向主屏,眉头直接锁死。
“又是推动力?”他问。
周明远点头,把比价表推过去,“你看日志。”
丁蹲下身,把平板接上离线端口,手指在屏幕上快速滑动。三分钟后,他抬头,“不是攻击波,也不是干扰信号。是程序自己在改数据。更新包昨天夜里自动载入,伪装成例行维护,实际替换了核心校验模块。”
“哪个模块?”
“推动力模拟层的胶合算法。”丁的声音沉下去,“这玩意儿负责把七组独立参数合成一个综合值。它被植入了一个‘镜像写入’指令,每次真实数据生成,都会复制一份,加权扰动后再塞回去。系统以为是原始数据,其实是伪造的。”
周明远盯着屏幕,没说话。
他知道这个模块。上周调试新科研方案时,丁说过一句:“别碰胶合算法,它像水泥,一旦掺了杂质,整条链都得拆。”
现在水泥里进了毒。
“能清吗?”他问。
“能。”丁说,“但得进深层机房,断网操作。这病毒不是冲着瘫痪来的,是冲着误导来的。它让你以为系统快炸了,逼你停机检修。等你一关电源,真正的后门就打开了。”
周明远懂。
这不是要毁设备。
是要骗人犯错。
他收起比价表,钢笔插回内袋,转身走向电梯通道。丁跟上。
两人没说话。走廊灯是应急模式,绿光贴着墙根走,照得人脸发青。电梯门打开,里面堆着几箱备用滤芯,是丙早上搬下来的。周明远一脚踢开挡路的箱子,按下一楼b5键。丁伸手去扶墙,指尖蹭到一道划痕,像是最近被人用硬物刮过。
“这层不该有划痕。”他说。
“有人下来过。”周明远说,“不止一次。”
电梯下降,金属壁传来轻微震颤。到了b5,门一开就是服务器阵列区。冷气扑面,空气里有股淡淡的臭氧味,像是电弧烧过的痕迹。丁皱眉,“空调系统今天凌晨重启过,我没动过。”
周明远没应。他走到第三排机柜前,蹲下检查底部接口。一根光纤裸露在外,接头松了一半,像是被人强行拔插过。他顺着线路找到编号F-7的主机,面板指示灯全灭。
“这是推动力模拟的核心节点。”丁说,“它不应该断电。”
周明远站起身,右手食指在机柜边缘敲了三下,短、短、长。他在算时间。
上一章结尾,他刚下令彻查内部隐患,紧接着就收到丙递来的芯片照片。那时候系统还没出事。而现在,F-7主机断电,病毒激活,数据紊乱——全都发生在过去四分钟内。
太快了。
除非……对方一直在等他下令排查。
命令一下,所有人注意力转向“人”,没人盯“机”。
完美声东击西。
“冷剥离。”丁已经打开后备电源,接上物理终端,“断开所有联网模块,用离线环境逐段扫描代码。找到病毒本体,手动删除。”
“多久?”
“如果它没设陷阱,四十分钟。如果设了自毁机制,可能一删就炸盘。”
“那就别让它知道我们在删。”
周明远从冲锋衣内袋摸出一支钢笔,不是写字用的,笔帽上有微型接口。他插进终端USb口,输入一串指令。这是他自己写的脚本,不联网,不调用系统资源,只模拟心跳信号。他把它命名为“假死程序”。
“你给它喂假数据,让它以为系统还在运行?”丁看了他一眼。
“对。”周明远说,“它依赖定时唤醒。每十分钟接收一次确认信号,只要收到回应,就不触发警报。我们在这期间动手。”
丁点头,开始操作。他拆解更新包,一层层剥开压缩文件。病毒藏得很深,在第七层伪装成“.dll”动态库,实际是可执行文件。图标是系统默认的齿轮,名字叫“power_stable_v3.exe”。看起来人畜无害。
“果然是通过合法更新进来的。”丁咬牙,“他们拿到了我们的签名密钥。”
“或者有人帮他们签了。”周明远说。
两人不再说话。时间压得紧。丁用十六进制编辑器打开病毒主体,查找唤醒指令。找到了——**0x1F8A**位置,一段定时轮询代码,每隔600秒向指定Ip发送心跳包,接收“AcK”响应后继续潜伏。没有响应,就启动数据擦除。
周明远看时间:距离下次轮询还有8分12秒。
“你做诱饵。”他说,“我来删。”
丁抬头,“你懂逆向?”
“不懂。”周明远说,“但我懂怎么骗人交底牌。你模拟响应包,我趁它接收的时候断它的根。”
丁犹豫一秒,点头。他迅速编写伪造应答,设置延迟发送。周明远则打开主机物理开关,拔掉冗余电源,只留一组电池供电。这样即使数据崩溃,也不会引发电涌。
倒计时开始。
7分30秒。
丁的手指悬在回车键上。
6分15秒。
周明远把钢笔重新插进终端,准备切入底层删除指令。
5分40秒。
主控台方向传来一声轻响,像是某个继电器闭合。
他们都没动。
4分20秒。
丁低声说:“它要醒了。”
3分10秒。
周明远盯着屏幕,右手食指在桌边敲出短促节奏:哒、哒、哒、哒——四下,代表倒计时进入临界。
2分03秒。
丁按下回车。
伪造的“AcK”信号发出。
病毒接收。
状态由“休眠”转为“待命”。
就在这一瞬,周明远输入删除指令。
进度条跳动:1%……5%……12%……
突然,病毒开始反向写入。
“它在自救!”丁吼。
周明远立刻切断电源线。
主机黑屏。
整个机房陷入半秒死寂。
然后,备用UpS启动,灯光恢复。
丁立刻重启终端,接入主机。扫描开始。
十秒后,病毒残留清除完成提示跳出。
“删干净了。”丁靠在机柜上,喘了口气,“没触发自毁。”
周明远没松劲。他重新接上网线,让系统逐步恢复运行。主控台那边,推动力阈值稳定在69.2%,传感器同步,无漂移。真实世界回来了。
“补丁要重做。”丁说,“还得查签名密钥有没有泄露。”
“先不动。”周明远说,“让他们以为病毒还在。我们假装还在排查,放点假消息出去。”
丁看他,“你想钓鱼?”
“不是想。”周明远说,“是已经开始了。刚才那枚芯片,丙捡到的,背面有血。那不是敌人的血。”
“是谁的?”
“是我们的人。”周明远把钢笔收回内袋,“有人受伤了,没上报。伤口接触过芯片,留下了dNA。敌人故意留下,就是让我们发现。但他们不知道,真正的问题不是芯片,是那个没吭声的伤员。”
丁沉默几秒,“你要查内鬼?”
“不查。”周明远说,“等他自己露出破绽。我们现在最缺的不是忠诚,是时间。科研不能停,实验还得推。他们越想让我们停,我们越要往前走。”
他站起身,活动肩膀。冲锋衣袖口磨得发毛,左小臂的疤还在隐隐发烫,但他没去遮。他知道接下来会更难。敌人已经摸到据点内部,能改系统,能断电源,能埋芯片。下一次可能直接锁死逃生通道。
但他也不能退。
新科研方案是他唯一的反制手段。命途结算系统不给他外挂,但他可以用现实数据撬动命运。只要推动力模型跑通,就能反向追踪信号源,找到他们的老巢。
他看了眼时间:六点零三分。
女儿应该醒了。
她每天六点十五喝温水,六点半吃半片维生素b,七点前必须量体温。低血糖,不能拖。上一章他下令给她的应急包加葡萄糖口服液,但这不是重点。重点是她能在敌人眼皮底下逃出生天,靠的不是运气,是训练。
是他教的。
他转身走向电梯。
“你去哪?”丁问。
“生活区。”他说,“看看设备还有没有别的毛病。”
丁没再问。
他知道周明远说的“设备”,有时候不是机器。
电梯门合上,周明远靠在角落,右手食指在裤缝上敲了三下,短、短、长。老节拍,新意义。
不是为了压住记忆闪回。
是为了记住谁该死。