# 第二十二章:顾言舟第二次入侵,这次更隐蔽
周四早上,十六楼走廊里的消毒水气味还没散透。保洁员拖过的地面留着一层薄薄的水膜,闻人屿刷卡进大办公室的时候,鞋底碾过去,水膜上印出两道清晰的纹路,几秒后自行愈合。
工位和他昨天走的时候一样。键盘摆正,杯子倒扣在沥水垫上,便签纸右下角被他折过的那个弧度还在。他坐下来开机,先扫了一眼系统日志推送栏——空白,没有告警。他打开工单系统,开始处理今天第一条任务。
第二条工单的标题是"核心机房底层固件版本状态确认",备注栏里填着标准的例行检查模板。他点开附件,固件版本号显示当前运行版本匹配,没有异常。但滚动条往下拉的时候,他注意到校验位字段的最后两位数字。
那两位数字的排列方式不对。
正常固件版本号的校验位由算法生成,结果是字母和数字的均匀混合。但这一组里,十六个字符中只有一个数字,其余全是字母,数字的位置落在末尾两位的其中一位上——校验位不应该出现这种密度差,也不应该出现单个数字孤悬在末端的结构。他认出那两位数字的数值组合,和他上周抄在便签纸上那组日期特征码的末尾两位一致。这是人为嵌入的标记,不是算法产物。
他把附件关掉了。没有截图,没有存本地副本。手上的动作保持平稳,鼠标移到"确认"按钮上点了一下,工单状态变更为"已完成"。然后他端起杯子喝了口水,水温恰好,经过咽喉时瘢痕组织没有产生任何反应——他咽下去,把杯子放回原位,重新打开附件又看了一眼。
这组插入在版本号校验位里的标记,本身的形态是静默的。它不参与任何运行逻辑,不读写任何存储区块,不触发任何告警阈值。顾言舟在被调离之前埋下的东西就是这样一种东西:一把没有上膛的枪,放在一个日常巡检永远扫不到的角度里。他被带走之前至少有一个完整的下午可以处理自己的后手,而那条标记的部署时间窗口恰好落在那个区间之内。
闻人屿拿起手机,在加密笔记里写了一句:"固件版本号校验位异常。外部标记。未激活。"然后把手机扣在桌面上继续处理第三张工单。
中午他下楼买了个饭团,站在花坛边上吃完。今天的阳光比昨天亮,但风是干冷的,带着冬天前兆的那种割皮肤的凉。他把包装纸团起来扔进垃圾桶,在台阶上多站了一会儿,朝街对面看了一眼。那棵梧桐掉光了叶子,立在空荡荡的路边,像是被季节筛过的某种骨架。树下没有车,也没有人。
下午两点二十三分,系统日志推送栏弹出一条状态变更通知,来自核心机房底层监控模块,文本写着"固件版本校验位更新·自动校准已执行"。他点开通知,执行来源显示为"系统内置维护进程",时间戳和上午那条工单的提交时间之间隔了四十分钟。
但他知道那是一次伪造的自动校准。系统内置维护进程的逻辑他背得出来,它从不覆写现有的校验位数值,任何版本更新都会生成全新的完整校验值而非单一位段替换。而这条日志记录的是"写入了一个和原值完全不同的新校验位",是在旧校验位被确认之后覆盖写入的。那个新值把原来的外部标记覆盖掉了——严格来说是激活了它,把"待机"状态切换成了"活跃"状态。标记原来的内容被清空,写入了一个新的锚点值。
他没有回头,保持视线落在屏幕上,余光扫过周围。办公室正常,键盘声继续,右手边有人在打电话,身后有人站起来去打印机。没有人注意到他屏幕角落那条被点开过的通知。他关掉窗口,在加密笔记里加了第二行:"已激活。触发源远程。"
从工位站起来去茶水间接水的时候,他在走廊尽头放慢了步速,朝机房的磨砂玻璃门方向扫了一眼。锁指示灯是绿色,透出来的灯光是冷白色,系统待机状态。里面没人。他往杯子里接热水,接满之后站在原地等了十秒,看着杯口的热气升起来又散掉,然后端着杯子往回走。走廊里和副主管错身,副主管手里拿着一沓打印好的报表,抬头看了他一眼说"今天降温多穿点",他点了一下头作为回应,回到工位坐好,把手伸进口袋碰了一下手机屏幕确认它的存在,没有拿出来。
三点过十分,手机在口袋里震了一下。他没有立刻掏出来,等处理完手头正在打字的一段工单回复之后才去看。屏幕上是一条来自内部通讯系统的消息,发送者的联系人ID他没有存过,头像是一个灰色圆形占位符。内容是一段短字符序列,长度大约二十位,像是某个哈希值和另一个数据的拼接。
他读完那串字符,没有回复,把手机放回口袋。脑中的拆解过程在几秒内完成:前半段十六位字符解析后指向核心机房底层固件存储区的一个特定地址段,后半段四位字符是一组时间戳数据,转译后对应明天凌晨两点零一分。这串短字符本身是一条路径指示——从那条已被激活的外部标记出发,指向目标存储地址,并附加了执行时间窗。
他端起杯子又喝了一口水,水温比刚才降了一些,入口的触感更柔和。放下杯子之后他继续处理工单,手指在键盘上的节奏没变,但脑中那张地图正在被更新:顾言舟埋的那条静默标记今天下午被远程激活了,激活后生成了这条指令路径,指向固件存储区的特定区块。明天凌晨两点零一分,会有一组内容沿这条路径传输过来,可能是读取请求,也可能是写入操作。
他需要做一个决定。在明天凌晨两点之前,是把这条信息交给南宫珩让他安排拦截,还是自己处理。他权衡了大约两分钟,然后打开内通对话框给南宫珩发了一条消息:"核心机房底层固件版本号里有外部标记。今天下午被激活了。标记指向固件存储区特定地址,时间锚点明天凌晨两点零一分。"
发出去之后等了大约三分钟,那边回了过来:"你什么时候发现的。"
"今天上午处理工单的时候。激活通知在下午两点二十三分。"
"标记形态。"
"嵌在版本号校验位里。最后两位数字和正常生成规则不匹配,像是预留位。"
南宫珩那边停顿了几秒才回:"今晚十一点我会在总部核心机房。你来不来。"
闻人屿看着这行字。他没有问"你需要我做什么",没有问"今晚什么规模的工作量",也没有问"要不要带设备"。他回了一个字:"来。"然后关掉了对话框。
下班之后他没有直接回出租屋。先去了便利店买了一杯热豆浆,站在靠窗的位置喝完。窗玻璃上倒映着货架上的灯光,他的脸被暖色光均匀地照着。豆浆的温度从杯壁传到指腹,他把空杯扔进回收口,推门出去,走进傍晚的冷风里。回到出租屋换了件更厚的衣服,把外置硬盘和笔记本装进帆布包。
晚上十点四十分他到了总部核心机房的侧门前。门没锁,推一下就开了。里面的主灯没开,只亮着操作台上方一盏小灯,冷白色的光聚拢成直径不到一米的圆,把周围的空间沉入淡灰的阴影里。南宫珩坐在操作台前,笔记本屏幕的光从下方打在他脸上,他穿着一件深色软壳外套,拉链拉到领口,袖口收束在手腕处。
"坐。"他说,没抬头,手指在触控板上滑动,屏幕上的数据流在稳定滚动。闻人屿在他旁边那把椅子上坐下,帆布包放在脚边。他侧过头看屏幕,上面正在刷新的是固件存储区的底层读写日志,滚动的速率不快不慢,每条日志记录的间隔时间均匀。
"那条标记的激活时间是下午两点二十三分,触发源是一条境外跳板发来的指令包。"南宫珩说,手指在触控板边缘停了一下,然后继续滑动,"指令包的内容本身是空的,只携带了一个时间锚点和一个目标路径。激活这条标记的作用只是让它进入待发射状态。真正的数据传输在明天凌晨两点零一分才会开始。"
"你打算在数据传进来之前清理标记,还是等它传的时候抓包。"
"等它传的时候抓。"南宫珩侧过头看了他一眼,"你发现的那条标记本身不含任何可用信息。它只是一个信使。真正的信息在明天凌晨两点零一分从那根管道里流出来的时候才能读取。如果我提前把标记清了,对方会发现它死了,换另一条路进来。不如让它活着,等那组内容按原路径流过来,我在出口接住它。"
闻人屿点头。他把手放在膝盖上,没有打字,目光落在屏幕滚动着的日志流上。两个人并排坐着,中间隔着一小段空位。操作台上的小灯光把他们各自的手照亮了一部分——南宫珩的手搭在触控板边缘,无名指指腹压在面板边缘,力度均匀。那个习惯他之前注意过,在会议室那次他就看到过同样的姿势。
"你昨晚做了什么。"南宫珩问。声音不高,像是顺手整理东西的时候随口提起的。
闻人屿侧过头看他。"做了气流训练。"
南宫珩的手指在触控板上停了半秒,然后继续滑动。"上一次是什么时候。"
"路灯下面。具体哪条街没记。"
"结果呢。"
"有进展。"闻人屿说,"声带可以产生持续的低频振动了。音高不稳定,但通路存在。"
南宫珩把触控板上的手拿开,靠向椅背,侧过身来看他。小灯的光从下方打过来,把他脸上的阴影拉长,但他眼里的光没有被阴影吃掉,仍然是清晰的、亮的一小点。
"你现在能发多长。"他问。
"最长接近十秒。中间会断。"
"能控制音高吗。"
"不能。目前只有一种频率。"
南宫珩转回去看着屏幕,停了几秒。然后他说:"明天凌晨两点之后,如果抓包顺利,天亮之前你不用再管任何事。"语气和平时一样,偏低的、收束的,但在他说完"你不用再管任何事"之后,他把滚动中的日志流暂停了——给这句话留了一段孤立的时间,让它单独存在,不被滚动着的技术数据压过去。
"你把标记的操作日志归档了没有。"闻人屿问。
"归档了。在核心机房本地存储里,加密卷,只有这台机器能访问。"
闻人屿没有再问,靠回椅背。视线落在暗影中那排机柜的轮廓线上。两台机柜之间的间隙里有一条很窄的阴影,小灯的光照不到那里。他看着那条阴影的边缘线,呼吸很平。两个人安静地坐了一会儿。操作台上那盏小灯持续发出恒定的暖白光,没有闪烁,没有频率变化。
十一点五十分,南宫珩重新激活屏幕。一个新窗口打开,里面是一个倒计时器,显示剩余时间两小时零十一分钟。"抓包脚本后台已经预置了。到时候自动启动。你什么都不用操作,坐着等就行。"
闻人屿点头。他把手伸进口袋,没取出任何东西,只是放在里面,指腹贴着手机壳的边缘。
凌晨一点五十三分,计时器还剩七分钟的时候,屏幕上开始出现预抓包阶段的信号波形图。一条极细的数据流从固件存储区那条标记指向的地址出发,沿预留通道向外输送。速度不快,每传输一小段就停顿零点几秒,再继续——像一个人在完全黑暗的走廊里走几步就停下来听一听周围的动静。抓包脚本在信号流出现的第一个波形峰值的同一毫秒内启动,开始全量捕获每一个数据包的头部和负载内容,完整复制到本地存储区。
整个过程持续了九分钟。凌晨两点零二分,数据流中断了。抓包脚本生成一个完成标记,自动停止了所有活跃操作。日志窗口显示捕获文件大小零点几兆字节,内容被多层嵌套加密包裹。
南宫珩把光标移到那个文件上,没有打开。"加密层数至少四层。拆需要时间。"
"预计多久。"
"如果这一轮不需要外部干预,到明天下午。如果需要二次解码工具配合,可能要更长。"
闻人屿没有继续问。他看了一眼操作台角落的数字时钟,凌晨两点十一分。机房里的温度比白天降了一些,冷气循环系统持续运转的低频嗡鸣保持着恒定的声压,从头到尾没有波动过。他感觉到肩膀的肌肉在长时间坐姿中有些发僵,没有站起来,只是微微活动了一下手腕。
南宫珩合上了笔记本。机房里的光源少了一个,暗了半度。他侧过身看着闻人屿。
"你明天白天不用处理工单了。"
"为什么。"
"你今晚在这里待到了凌晨两点。明天你的工单队列会转到外包那边,处理理由是'跨部门技术协助',时长一天。"他在"跨部门技术协助"几个字上放轻了一度,像是确认这句话的边界在可操作的范围内,"明天下午之前你可以在总部休息室待着。解码结果出来我会发给你。"
闻人屿看着他。小灯的冷白色光线在笔记本合上之后收窄到了更小的范围,现在只有一道窄窄的光落在操作台边缘,再反射到两个人的衣服上,形成一小片补光。他看南宫珩的脸,光线从侧面勾勒出来的轮廓比平时要清晰一些。
"你在给一个实习生批调休。"闻人屿说。声音比路灯下那次更稳了一些。气流经过瘢痕组织的时候阻力还在,但他已经可以在阻力存在的情况下维持整句话的完整长度。断的位置比昨天靠后了大约两个音节。
"对。"南宫珩说。他站起来,把笔记本夹在臂弯里,"调休时间是今天。现在你可以回家睡觉了。"
闻人屿站起来,把帆布包从地上拎起来,走到门口侧过身。门缝外面走廊的灯已经切到了夜间模式,光线低而柔,在地面上铺了一层均匀的暖灰色。他站在门口没有立刻推门。
"解码结果出来通知我。"
"会。"南宫珩站在操作台旁边,侧对着门口。闻人屿看到他的嘴角在暖灰色的光线里动了一下,幅度很轻,比之前那次被指出"你在笑"的时候更收敛一些,像是被注意到之后学会了把那个弧度压得更小——但压的时候没有用力,只是让它存在的面积变得更薄。
闻人屿推开门走了出去。走廊夜间的灯光把墙面和地面都染成了温吞的暖灰色。他走了一段之后,听到身后的侧门关上了,轻而稳,锁扣落进槽位的声音隔着一段距离传过来,像一枚小金属片被放回了它该在的地方。
走出总部大堂的时候风不大。天空被云层覆盖,看不到星星。路灯的光在干燥的地面上照出两个他的影子,一前一后,走着走着并成了一个,又分开。他走到路口的时候停下来等红灯,两边的街道都空着,没有车,没有行人,只有远处某个窗口亮着一盏灯。绿灯亮了之后他过了马路,帆布包挂在右肩,里面的硬盘和笔记本各自有一块重量,在步伐中微微晃动。
回到出租屋之后他没有开灯。黑暗里脱了外套,把外置硬盘放回书桌抽屉里,笔记本搁在充电器旁边。然后他站在房间中央停了一会儿,张开嘴呼出一口长气。气流经过声带的时候那道频率和昨晚一样,低而稳,持续了大约六秒才断——比昨晚长了一秒,断口也更利落一些,像是那个频率终于找到了一个可以附着的位置。他在黑暗中听着那个低音的尾段在安静的空间里慢慢衰减,从有轮廓的形状散成一片均匀的底色,然后转身走到床边躺下来。
明天下午解码结果出来之后,他会看到那条传输通道里流过的到底是什么。也许是数据,也许是别的什么东西。他翻了个身,把脸埋进枕头里。
窗外,云层裂开了一道细缝,月光短暂地照进来,又合上了。