array(5) { ["chapterid"]=> string(8) "49252318" ["articleid"]=> string(7) "7279746" ["chaptername"]=> string(7) "第7章" ["content"]=> string(25839) "林哲在赵冬梅的客厅里待到凌晨两点。
牛皮纸信封里的东西摊了一桌。技术文档、工单复印件、灰域协议的原理图。纸页边缘卷了,有被反复翻过的痕迹,有些段落用铅笔划了线,批注写在页边——赵冬梅的字,笔画很轻,像怕被人听见。
他没看完全部。挑关键的读。灰域协议的核心是一套端口伪装算法,让数据流在系统内部看起来像合法的定期巡检。它在权限节点上开了一个临时通道,这个通道只能维持——
林哲翻到那页,手指停在一行数字上。
九十秒。
和赵冬梅说的一样。九十秒后通道自动闭合,所有经过灰域的操作痕迹一并擦除。但如果有人在通道闭合之前追踪到来源——
手机震了一下。
灰点闪了。备份程序弹出一条消息:“你在看灰域文档。”
林哲打字:“你怎么知道。”
“文档里有我的签名。王恺三个月前让我读过这份东西。他让我确认灰域协议能不能在现有系统版本上运行。”
“结论呢。”
“能。但有个变动。系统半年前更新了节点验证机制。原来的灰域协议只能伪装端口,现在需要额外过一个身份验证层。”备份程序停了半秒,“需要用活人的声纹。”
林哲放下手机。窗外有夜风灌进来,报纸糊的缝隙里透出巷子里的路灯,黄光在地上拖出一道细线。隔壁房间传来轻微的鼾声——赵冬梅睡了,或者说她假装睡了。
他继续打字:“谁的声纹。”
“王恺的。”
林哲看着屏幕上的三个字。备份程序像在等他的回应,光标在输入栏外面一闪一闪的。
“他现在在审查隔离,声纹库被锁了。”
“对。但有一种情况能拿到。如果王恺本人从内网登录过一次,声纹缓存会保留在认证服务器里三十分钟。只要在那三十分钟内灰域协议上线,就能截获。”
林哲攥紧手机。王恺被隔离审查,内网权限冻结,但他没被协议终止——还在系统里。如果他能登录一次。如果。
“你刚才说‘如果’。不是我说的——是他。”
屏幕上的光标停了。灰点闪了两下,没弹出新消息。
“……他把这套方案写进日志了。”
林哲盯着那行字。胸口有个东西在缓慢收紧,不是疼,是某种比疼更钝的感觉。王恺在被隔离之前,不止装了二十个终端脚本,不止留了密钥和路线。他把逆协议的每一步都算过了。
包括自己的声纹。
“他什么时候写的。”
“三个月前。灰域项目第一次被他追踪到的时候。他说如果有一天他失联,就把这套方案推给所有标记终端里最后还活着的那个人。”
“你怎么判断谁是最后一个。”
“不判断。每个终端都会收到。谁活到最后,谁能用。”
林哲把手机放在桌上。屏幕暗了,灰点还在角落里一闪一闪。他闭上眼睛,指尖压在眼皮上按了按。脑子里乱七八糟的东西一块涌上来——赵冬梅说的“替代现实”,行为偏差率,九十秒,灰域通道,王恺的声纹。
他把手放下来。
“如果我要让他登录一次,需要做什么。”
备份程序的回复隔了七秒才弹出来:“需要触发审查室的紧急通讯协议。协议规定,隔离审查对象在突发医疗事件时可以申请一次限时通讯。三十分钟。”
“装病。”
“对。但要装得够真。他的生命体征会被监控。心率、血压、皮电反应。如果监控系统判定虚假,直接锁死。”
林哲站起来。椅子腿在地板上擦出一声短促的尖叫。他走到窗户边,从报纸边缘往外看。巷子里路灯下堆着装修废料,一只野猫蹲在石膏板上舔爪子。临市老城区的凌晨很安静,安静得能听见隔壁赵冬梅翻身的弹簧床响。
他需要一场足够真的医疗事件。心率飙升,血压异常,让系统自动触发通讯协议。但王恺在审查室里,他接触不到。
不对。不是他触发。
是有人让王恺自己触发。
林哲转过身。“如果王恺在审查室里接到一个消息——某种会让他心率瞬间异常的消息——系统会自动判定医疗事件吗。”
“会。审查协议规定,被审查人出现剧烈生理波动时,系统必须先排除医疗风险才能继续审讯。但如果波动被判定为心理原因而非生理原因,通讯不会开通。”
“区别在哪。”
“持续时间。心理刺激导致的心率波动通常在四十秒内回落。生理应激会持续超过两分钟。”
林哲把手插进裤兜。指尖碰到便签纸的边缘,皱巴巴的。他掏出来,展平。王恺的字迹被汗泡了三遍,还是能看清——“别让我白做。”
他在手机屏幕上打字:“你上次和他握手是什么时候。”
“十五点五十八分。就是给你打完电话之后。”
“握手记录里有没有审查室的监控反馈数据。”
“有。握手持续了九秒,期间截获了审查室传感器的一帧数据。心率68,血压121/79,皮电正常。”
“审查室的传感器是哪个型号。”
“倒悬山标准医疗监控终端,型号DM-M03。刷新频率2Hz。数据走内网独立通道。”
林哲把手机翻过来,看着灰点在角落里闪。他做数据恢复的时候拆过同型号的终端——DM-M03有一块独立的缓存芯片,在传感器和主控之间做数据缓冲。如果能在缓存写入之前拦截数据包,理论上可以伪装一段生理信号。
但需要一个入口。内网的入口。
灰域协议。
反过来用。不是让灰域协议伪装成合法巡检——是让灰域协议伪装成审查室的传感器反馈信号。把一段假的心率数据写进缓存,覆盖掉原来的读数。
“九十秒够不够植入假数据。”
备份程序的回复这次几乎没延迟:“不用九十秒。审查室的传感器缓存每三十秒清一次。只要在刷新间隙把伪数据包塞进去,六秒就够。问题是——你手里没有能接入审查室内网的终端。”
林哲放下手机。他走到桌边,从牛皮纸信封里抽出灰域协议的技术文档。翻到端口映射那部分,密密麻麻的代码注释里夹着一行手写批注。赵冬梅的字。
“内网物理接入点:第八区数据中心七楼。机房B。”
第八区数据中心。王恺上班的那栋楼。他前天下午从消防通道逃出来的地方。七楼的网监处隔壁就是机房B,门口有门禁,刷卡的那种。
“我有临时通行证。”林哲把卡片从裤兜里掏出来,塑封的硬卡在灯光下泛着倒悬山logo的银光,“第十区行政审批中心的。能刷机房吗。”
“不能。机房门禁是内网独立权限,不走行政审批系统。”
林哲把卡片放回裤兜。他需要另一张卡。数据管理部的内部卡。王恺的有——但被冻结了。赵冬梅的早就注销了。还有谁有。
老丁。
修车铺那个。他说过,王恺以前帮过他。怎么帮的。什么忙能让人愿意让一个陌生人借住,还替他打掩护。
林哲拿起手机。“丁师傅手里有没有内部卡。”
灰点闪了两下。
“有。三个月前王恺帮他恢复过一张报废的员工卡。表面看是修车铺的工牌,芯片层写的是第八区数据中心的访客权限。王恺当时说是备用。他没说备什么用。”
三个月前。又是三个月前。王恺从追到灰域项目开始,就在布这些局。二十个脚本终端,藏在挡泥板内侧的车钥匙,一张蹭掉漆的访客卡。
“丁师傅知道那张卡的真实权限吗。”
“不知道。他只知道王恺帮他修好了工牌。”
林哲把技术文档合上。牛皮纸信封里的纸页还摊着,他一张一张收好,按原来的顺序塞回去。赵冬梅在隔壁翻了个身,弹簧床响了一声。
他把信封锁好,拿在手里。
手机屏幕亮了。灰点弹出一条消息,字跳得很快。
“还有一件事。你在数据中心七楼的时间窗口很短。大楼的夜间巡检每隔四十分钟走一趟,下一趟是凌晨三点二十分。现在是凌晨两点零八分。如果你要今晚做——你需要在四点之前回到第八区。”
林哲打字:“从临市到第八区要多久。”
“开车一小时二十分钟。公交停了。你得找老丁借车。”
他站起来,把信封夹在腋下。走到客厅通往卧室的过道口,敲了两下门框。鼾声停了。几秒后赵冬梅拉开门,运动服皱巴巴的,头发散在肩膀上。
“看完了。”
“看完了。有个问题。”
赵冬梅靠在门框上,眼睛还带着睡意,但目光已经清醒了。“什么。”
“灰域协议在现有系统上跑,需要过一个身份验证层。王恺的声纹。”
她没说话。嘴抿成一条线。
“你早就知道。”林哲说。
赵冬梅从门框上撑起来,走到桌边,拿起那根没点的烟。“我知道。我没告诉你,是因为你在决定做逆协议之前,不该知道这个。”
“有什么区别。”
她把烟叼在嘴里。打火机咔哒一声,火光照亮她眼角的纹路。“区别是,我可以让你觉得这件事有可能不用牺牲任何人。”
“但事实上需要。”
“需要他活着登录一次。登录完,声纹被灰域截获,他继续被隔离审查。逆协议成功之后他的锚定也会解除——如果他还在的话。”赵冬梅吐了口烟,“问题是隔离审查期间,谁也不能保证他在。”
林哲把信封放在桌上。“我今晚回第八区。机房B的入口在七楼,网监处隔壁。我手里有灰域协议,还差一张能刷开机房的门禁卡。”
“卡有办法。”
“人的声纹呢。”
赵冬梅的烟燃掉一截,烟灰没弹。她拿下烟,在烟灰缸边沿磕了磕。“你打算怎么让他登录。”
“审查室的传感器有缓冲漏洞。用灰域协议反向写入假生理数据,触发医疗紧急通讯协议。他拿到的三十分钟限时通讯,会用来登录内网。”
客厅里的冰箱压缩机又启动了。嗡嗡声填满了沉默。
赵冬梅把烟掐灭。“数据包的延迟你能算准吗。”
“能。”
“行。”她转身走进卧室。林哲听到抽屉拉开的声音,纸页翻动的声音。她出来的时候手里多了个U盘,外壳磨花了,标签上贴着一小块胶布,写着“GHOST”。灰域的代号。
“这里面是灰域协议的源代码。你拿去。用之前改一下端口参数——系统更新过,旧协议会被检测到。”
林哲接过U盘。塑料壳上有划痕,边缘发烫,像是她刚才攥在手心里捂了很久。
“楼下有部老式笔记本,”赵冬梅指了指墙角那台合着的电脑,“没联网。你拿它改完代码再走。”
林哲打开笔记本。屏幕亮起来,系统很慢,桌面是一张褪了色的风景照,不是倒悬山——海是蓝的,天空也是蓝的。他认出那是挂历上的同一张照片,三年前那页。
他插上U盘。代码文件跳出来,密密麻麻的等宽字体。端口映射部分在第174行,赵冬梅用批注标出了系统更新的三个节点。他敲键盘,手指在塑料键帽上跳得很轻。
改了大概四十分钟。编译通过。没报错。
赵冬梅站在窗边看巷子,背对着他。烟灰缸里多了两个烟头。
“好了。”
她转过身。“下楼的时候轻点。隔壁老太太晚上睡得浅。”
林哲把笔记本合上,拔下U盘。装机的时候,牛皮纸信封里的东西他没全拿——只抽出了工单复印件和灰域协议的使用说明,折好塞进裤兜。剩下的还给赵冬梅。
“逆协议做完,你的数据会擦干净。”他说。
赵冬梅点了下头。她把信封接过去,手指在纸皮边缘摸了摸。“做完之后你自己呢。九十秒够不够你退出。”
“够。”
够不够其实不知道。但他不能多想。多想一秒,手就会慢。
他拉开铁链扣,推开门。铁楼梯在夜风里晃了一下,栏杆上的锈蹭在掌心里,粗粝的。走到巷子底的时候,他回头看了一眼。赵冬梅还站在门口,穿深灰色运动服,背后的灯光把她照成一个瘦削的剪影。
门关上了。
巷子里路灯的黄光落在地面上,野猫已经不在了。林哲穿过菜市场的空摊位,塑胶棚子在风里啪嗒响。回到修车铺的时候,铺子里的灯还亮着,老丁躺在滑板上睡在车底下,手里还攥着扳手。
林哲蹲下来。“丁师傅。”
老丁睁开眼。从车底滑出来,扳手掉在水泥地上,叮当一声。“几点了。”
“快三点。跟你借两样东西。”
“说。”
“那个工牌。还有外面的面包车。”
老丁从地上爬起来,膝盖咔哒响。他走到工具箱旁边,拉开最下面那层抽屉。一堆螺丝刀和套筒扳手底下压着一张白色工牌,磁条是灰色的,和其他工牌的黑色磁条不一样。他拿出来,在工装裤上擦了擦灰,递给林哲。
“王恺说这张卡只能刷一次。”老丁的眼睛在工牌和林哲之间扫了一下,“用完自动报废。”
“够用一次就行。”
老丁点了下头。他没问林哲要去干什么。只是从墙上的挂钩上摘下钥匙串,取出一把车钥匙,车标磨没了,塑料壳上缠着黑胶布。
“油加满了。车停在铺子后面。”
林哲接过钥匙和工牌。钥匙是凉的,工牌边缘有点毛,被反复摸过。他转身要走,老丁在后面叫住他。
“那个小子——王恺。”老丁把手在工装裤上蹭了蹭,“他还好吗。”
林哲停了一秒。“还不知道。”
老丁没再问。他弯腰捡起地上的扳手,重新躺回滑板上,滚进车底。
林哲推开后门,窄巷子里停着那辆面包车。车身一侧喷着“倒悬山市政服务”,漆又蹭掉了一块,底下露出蓝漆。他拉开车门坐进去,方向盘上有被手磨出的光滑痕迹。插入钥匙,拧动。引擎抖了一下,启动。
仪表盘上的时钟显示凌晨三点零三分。
从临市开回倒悬山边界,导航显示一小时二十分钟。到第八区数据中心还要再加二十分钟。他得在四点之前到大楼附近。
手机亮了。
灰点弹出一条消息:“路线规划好了。用春城南路→省道305→绕过边界检查站东侧。那个位置凌晨三点到四点之间是巡逻盲区。进了倒悬山之后沿铁路线往东,停在第七区货场。然后步行到第八区数据中心。预计四点二十到。”
林哲踩下油门。面包车驶出窄巷,拐上春城南路。路边的拆楼在黑夜里只剩轮廓,窗户洞开着,像无数张没有牙的嘴。路灯隔一盏亮一盏,车灯的光柱里飘着夜雾。
他开了大概二十分钟,手机又震了。
“到了一件事。你手里那张老丁的访客卡,权限只能刷开B号机房。进机房之后,需要把灰域协议从内网端口注入。机房B的端口编号是B-07。位置在机柜第三排最里面。”
林哲瞟了一眼手机。“你连端口编号都知道。”
“王恺的日志里写的。他三个月前把数据中心七楼的机柜分布全部摸过一遍。B-07端口是唯一一个可以直接连接权限节点的物理接口。其他的都走了交换机的隔离层。”
三个月。王恺趁还在网监处上班的时候,把每一块砖都踩过了。
林哲握紧方向盘。路面在车灯下往后滚动,省道305的路况很差,水泥路面裂了,车轮压过去颠得方向盘抖。
“我到了机房之后,先触发审查室的医疗紧急通讯。王恺拿到三十分钟限时通讯,他会登录内网——”
“他不会。”
林哲松了一下油门。“什么。”
“审查室的限时通讯不等于内网登录权限。他被隔离审查之后,内网权限冻结了。通讯链路是外网——只能通话,不能操作。”
林哲没说话。车速慢下来,引擎声变得低沉。窗外是黑漆漆的野地,远处铁路线上一列货车亮着尾灯,红色的光点在夜雾里一明一灭。
“那限时通讯有什么用。”
“让他告诉你一个东西。”
“什么。”
“他在被隔离之前,在权限节点上留了一个后门。不是系统层面的后门——是一个触发口令。只要在灰域通道内部输入那个口令,身份验证层会被直接跳过。不需要声纹。”
林哲把车停在路边。引擎怠速的声音在黑暗里闷闷地响。他攥着方向盘,指节硌在塑料套上。
“就是说,他不用登录。只需要通话。”
“对。只需要通话。”
“那为什么赵冬梅说要声纹。”
“她不知道后门的事。王恺没有写在给她的文档里。”
林哲盯着手机屏幕。灰点静静亮着,不闪了。像一只在等他做决定的眼睛。“他知道自己可能被隔离。所以把后门口令留给自己。”
“对。口令只有他知道。”
“如果他不说呢。”
备份程序弹出一行字,一个字一个字地往外跳,像在斟酌措辞。
“他会说的。”
林哲看着那四个字。没回复。他重新挂挡,踩油门。面包车驶过省道的裂缝,往边界方向开去。车窗外,倒悬山的轮廓还没出现,但天空的颜色已经开始变了——从纯黑转向灰黑。远处的云层被城市灯光映上一层模糊的白。
四点十五分。他过了边界盲区。铁丝网在夜雾里若隐若现,摄像头指示灯没亮。第七区货场在右手边,集装箱堆成黑色的方块。
他把车停进货场,熄了灯。
步行到第八区数据中心用了二十分钟。灰白色的十五层楼在凌晨的雾气里亮着几扇窗户。消防通道的门还是坏的,铁门虚掩,绿色安全出口指示灯在黑暗里发着荧光。
林哲侧身挤进去。
楼梯间声控灯一层一层亮起来。七楼防火门推开的时候,走廊里日光灯嗡嗡响。网监处的门关着,隔壁机房B的门牌在灯光下泛着冷白色的光。门禁读卡器亮着红灯。
他把工牌贴上去。
滴一声。绿了。
机房门推开,冷气扑面而来。机柜排列在黑暗里,只有指示灯闪着蓝色和绿色的光点,成排成排,像某种密集的星空。风扇的嗡鸣盖过了日光灯的声音。
第三排。最里面。
B-07端口是一块嵌在机柜面板上的面板,一个标准网口,旁边贴了张标签,印着“权限节点·物理层接入”。
林哲蹲下来。从裤兜里掏出U盘,插进那台老式笔记本——赵冬梅给的,临走前他顺手塞进了背包。笔记本开机速度还是慢,但电池是满的。
他把灰域协议调出来。运行。
终端界面上跳出一行提示:“灰域协议v2.2已加载。目标节点:权限。端口:物理层B-07。等待内网接入验证。”
手机震了。
“现在需要触发医疗紧急通讯。审查室传感器在四楼。灰域协议伪装信号需要精准覆盖传感器刷新窗口。窗口每三十秒一次,下一次在——十七秒后。”
林哲看着笔记本屏幕上的计时器。灰域协议的倒计时已经开始跳了。17,16,15。
手指在键盘上悬着。
4,3,2,1。
回车。
灰域界面弹出一行绿字:“伪装数据包已注入。目标传感器DM-M03。覆盖时长:六秒。等待反馈。”
六秒。
五秒。
四秒。
三秒。
两秒。
一秒。
绿字又弹出来:“医疗紧急通讯协议已触发。审查室通讯链路开启。限时三十分钟。目标:隔离审查对象LK-004。”
LK-004。王恺。
林哲把手机拿起来。手有点抖,但他没去控制。备份程序弹出了一条提示:“通话链路已建立。你要接吗。”
他摁下接听键。
电话那头传来的呼吸声,有点重,像刚经历了什么剧烈的事,还没完全平复。然后那个声音开口了。
“——我说了让你别重启手机。”
声音有点哑。语速比系统模拟的那个快,句子末尾有个自然的下沉,不是稿子那种平滑。是真的王恺。
林哲攥紧手机。指节压在屏幕边缘,手指尖是冰的。“你的脚本说你在审查室里。”
“嗯。装了三天了。”王恺的声音顿了顿,“你拿到灰域协议了。”
“拿到了。还差一个身份验证层。赵冬梅说要你的声纹。”
电话那边传来一个很轻的声音。像是笑了一下。“她不知道后门的事。”
“我知道。”
沉默从电话那头漫过来。机房里只有风扇在响,成千上万个小风扇,同时转。
“口令是‘灰域之锚’。英文。十六个字符,全小写。”王恺的声音忽然变快了,像在趁着这三十秒把话说完,“在灰域通道里输入这个口令,验证层会被跳过。你有九十秒。九十秒后通道闭合。别管日志清理——灰域自己会清理。上传完退订批文,立刻断开。一秒都别多留。听懂了吗。”
“懂了。”
“记住了。”
林哲的手指在笔记本键盘上打字。口令弹在灰域界面的验证栏里,十六个字符,没有回显。
屏幕上跳出行字——“身份验证已跳过。灰域通道开放。剩余时间:90秒。”
他开始上传退订批文。工单复印件已经扫成图片,三张,连同赵冬梅提供的源文件日志,一个压缩包。进度条爬得很快。23%,47%,81%。
手机里王恺的声音还在。“林哲。”
“嗯。”
“把你脸上那个灰点关掉之后,替我喝一杯。”
进度条到百分之百。上传完成。
林哲盯着屏幕。手指按在回车键上。眼眶有点酸,但没东西流出来。“你自己喝。”
电话那头又传来一声很轻的笑。然后通讯断了。屏幕弹出一行字——“限时通讯已结束。链路关闭。”
林哲把手机放下。笔记本屏幕上的灰域界面正在倒计时。45秒,44秒。通道还在开放。他拔下U盘,合上笔记本。
站起来的时候膝盖咔哒响了一声。
他把东西全部塞进背包。推开机房的门,日光灯还是嗡嗡响。走廊里没有人。消防通道的防火门在走廊尽头。他走过去。
推开门。声控灯啪一声亮了。
下楼。五楼,四楼,三楼。每一步脚底下都有沙沙的回响。到了二楼,他推开通往货梯的防火门。空荡荡的办公区还是老样子,拆光的格子间在黑暗里像一片轮廓模糊的立方体。
货梯门开了。
他走进去。摁B1。
电梯往下走的时候,裤兜里的手机震了一下。不是备份程序。是系统通知。
他把手机翻过来。屏幕亮着。蓝底白字。
“权限节点异常告警。检测到未授权数据写入。系统正在追踪入侵源。”
林哲看了。没删。没必要删了。
电梯到地下停车场。门打开。空荡荡的水泥地面,日光灯管隔几米一根,光照亮的地方停着几辆车。他找到那辆面包车——车身侧面喷着蹭掉漆的“倒悬山市政服务”。
坐进去。发动。引擎声打破了地下停车场的低频嗡鸣。开出停车场的时候,后视镜里能看到数据中心那栋楼,玻璃外墙反射着灰白色天光,像一面没擦干净的镜子。
天快亮了。
林哲踩下油门。面包车拐上第八区的主干道。路灯还亮着,橘黄色的光洒在沥青路面上。街边晨跑的人从他身旁掠过,一个拎着早餐袋的女人在等红灯。
裤兜里手机震了。
不是系统通知。是备份程序。
一条消息,白底黑字。
“灰域通道闭合。九十秒用完。退订批文已写入权限节点。你的锚定标记在三分钟前被清除了。”
林哲把车停在路边。手指压在方向盘上,骨节发白。他把手机拿起来,盯着屏幕。
又一条消息弹出来。
“王恺的锚定标记也清除了。系统里找不到他。”
然后是第三条。
“叫那份日志。他最后一条记录写的——”
林哲等了五秒。字一个个跳出来。
“已确认退订。系统内所有标记终端清除完毕。二十个,全活。”
路边早餐铺子的蒸笼冒着白汽,老板娘掀开盖子,一团白雾升起来,混着面香和肉馅的味道。有个穿校服的女孩站在铺子前面翻硬币。街对面,倒悬山第八区的天际线在晨光里慢慢清晰起来。
林哲把手从方向盘上放下来。手机屏幕暗了。灰点在右下角闪了一下,然后熄灭了。
他拧动车钥匙。引擎重新响起。
面包车驶向第七区方向。出边界的时候天已经大亮了。灰白色的天空裂开一道缝,有阳光从里面漏出来,照在路面上一块掉漆的路牌上。
他开往临市方向。
省道305的裂缝还在,车轮压过去的时候颠了一下。车窗外,铁路线旁边长着膝盖高的野草,草尖上挂着露水。远处货运火车的汽笛响了一声。
副驾驶座上,手机屏幕亮了。桌面壁纸还是那张拍糊的第八区夜景,灯光线拉成一道道橙黄的线。
林哲看了一眼。打开车窗。风灌进来,带着铁轨旁边野草和晨雾的味道。
他把手机翻过来,屏幕朝上放在副驾驶座上。灰点没再亮。
面包车继续往前开。" ["create_time"]=> string(10) "1785516841" }