林辰的眼睛没有离开屏幕。
键盘声在空旷的办公室里显得格外清脆。他调出了赵岩这周所有提交过的代码记录,逐行比对时间戳和修改记录。同事们的情绪数值在他余光里闪烁,已经没有人再围过来看了——所有人都在等他放弃,等着看这场戏怎么收场。
他没有。
凌晨两点十七分,林辰合上电脑,揉了揉酸胀的眼角。他看了一眼窗外的夜色,城市灯火稀疏,整栋写字楼只有他这一层还亮着灯。他在茶水间接了杯水,靠着料理台,闭上眼睛,脑海里浮现的是赵岩在离职前的最后三天里,所有进入过系统的痕迹。
离职前的最后一天,赵岩的工作时长是从下午两点到晚上九点。系统显示他当天提交了七次代码,其中有三次是在下班之后。这个数字放在一个准备离职的人身上,其实并不突兀。真正让林辰觉得不对劲的,是赵岩在这一周内,反复查阅了一个文件夹——那个文件夹里存着他们团队三个月来的所有测试数据,包括副本。
林辰睁开眼睛。他拿起手机,翻到了人事部门发送的离职通知,上面写着赵岩的离职手续已经办理完毕,交接文档已经归档。他想了想,拨通了人事主管老陈的电话。
响了三声,那边接了起来,声音带着被吵醒的沙哑:“小林?这么晚了你……”
“陈哥,”林辰语气平静,“赵岩的离职交接文档,我需要看原版。”
老陈沉默了两秒,似乎在消化这个时间点打电话过来的合理性。他叹了口气:“明天早上我给你调,行不行?”
“现在。”
“现在系统锁了,我没法——”
“法务那边有一个保留的备份服务器,”林辰打断他,“你有权限调。我只用二十分钟。”
老陈那边安静了很长时间。最后他说了一句话:“你怀疑他?”
林辰没有回答。
二十分钟后,林辰坐在昏暗的办公室里,面前打开着赵岩的离职交接文档。文档内容不复杂,几页纸列出了他负责过的模块和代码路径,没有任何异常。林辰逐行看下来,目光在最底部的备注栏停住了。
备注栏里有一句话,是赵岩自己写的——“建议对接人入职后重新审核数据对接权限。”
看起来是一句再普通不过的提醒。但林辰注意到了两个细节:第一,这句话的位置在文档的最末尾,字体比正文略小一号,像是随手补充的;第二,这句话的收件人,指定了一个具体的人名。
那个名字叫钱峰。
林辰对这个名字没有印象。他搜了一下公司的组织架构,才发现钱峰是三个月前刚入职的数据工程师,岗位级别不高,归属在技术服务部下面,平时几乎不参与核心项目。但这个人,拥有全公司除了CTO以外最高级别的数据访问权限。
他的权限是谁开的?
林辰的手指在键盘上敲了几下,调出了人事系统的权限变更记录。记录显示,钱峰的超级管理员权限,是赵岩在离职前三天亲自审批的。
一个即将离职的人,给一个几乎不接触项目核心的新人开了最高权限。
这个事情,怎么解释都解释不通。
除非——
林辰的手指停在键盘上,目光落在屏幕上那个名字上。他想起了一个细节。三个月前,也就是钱峰入职的时间点,灰塔那边有一个叫王铮的人,曾经以“技术交流”的名义来公司拜访过一次。那次交流他参加了,王铮坐在会议室里,聊的是数据处理架构和模型运维,全程没有任何异常。但如果反过来想,那次交流的目的本来就不是为了技术,而是为了……
他眯起眼睛。
“赵岩这步棋,埋了至少三个月。”
林辰关闭了窗口,没有继续追问钱峰的事。他在心里画了一张关系图:王铮代表灰塔来公司“交流”时,赵岩是唯一一个主动给对方递了名片的;三个月后,钱峰入职,权限被赵岩开通;再三个月后,赵岩离职,带走数据。整条线就像一根隐形的绳,绕过了所有人的视线。
但如果林辰没有情绪数值的能力,他也未必能拼出这个图谱。
他深吸一口气,打开了自己电脑上的一个脚本文件。那个脚本是他业余时间写的,功能很简单——抓取公司内部网络的所有登录记录和文件操作日志,然后做关联分析。他本来只是用来做技术研究的,现在派上了用场。
脚本跑了一遍,结果出来了。
钱峰的账户在过去五个工作日内,登录了核心项目数据库七次。其中四次是在夜间十一点之后,两次是在周末。最后一次登录时间,是赵岩离职当天晚上十一点五十八分。
那个时间点,赵岩刚刚走出公司大门不到两个小时。
林辰握着鼠标的手微微收紧。他点开了钱峰的登录IP,发现四次夜间登录中有三次来自同一个外网地址。他把那个地址复制下来,打开了一个开源的IP定位工具。
地址指向的是本市高新区的一栋写字楼。
那栋楼,林辰有印象。那里面租了几家科技公司,其中一家叫“云翼科技”,是从灰塔集团独立出来的子公司。他没有立刻得出结论,但心里的拼图已经基本成型了。
他关掉工具,靠在椅背上,闭上眼睛,脑子里飞快地梳理着整条逻辑链。赵岩被收买,钱峰被安插,数据被转移——而所有这些操作的背后,都有一个名字:韩峥。
林辰拿起手机,看着韩峥的号码,指腹在屏幕上停了两次。他最终没有拨出去。
不是因为不敢。
而是因为他知道,现在打过去,对方只会告诉你一句“我不知道你在说什么”。韩峥那种人,不会留下任何直接证据。他只会通过王铮、通过中间人,通过一个个不起眼的小角色,把局布好,然后坐等结果。
林辰把手机放下,重新打开了代码编辑器。他敲了两行代码,停了一下,然后改变了方向——他不再重构模型了。
他决定做另一件事。
他调出了赵岩在团队内部留下的所有代码备份,一份一份地检查。这些代码赵岩写得中规中矩,没什么亮点,也没什么明显漏洞。但林辰注意到,赵岩在几个核心算法的参数配置文件中,留了几个不起眼的冗余变量。这些变量没有实际作用,不会影响运行,但如果有人拿这些代码去跑新的数据集,变量就会触发一段隐藏逻辑——向一个未知地址回传运行日志。
这个地址,就是灰塔情报网的一个端点。
林辰的手指在键盘上顿了一下。他在心里快速计算了一下:这个隐藏代码的触发条件是“第一次连接不同域名下的服务器”,也就是说,只要云翼科技那边把模型部署到他们的服务器上,日志就会自动回传到这个地址。而这个地址的数据,可以直接被林辰抓取。
他用这套逻辑反过来思考了一下,敲了一行新的代码。他写了一个伪装脚本,把自己的服务器伪装成灰塔情报网的一个节点,接收来自云翼科技那边的数据流。然后把脚本部署到一台云服务器上,配置好接收端口。
他没有告诉任何人。
凌晨四点,林辰重新启动了服务器,看到脚本成功运行,日志里出现了一条新的连接记录。那个连接来自云翼科技的内部服务器,IP匹配,时间吻合。
鱼已经咬钩了。
他关掉服务器窗口,靠在椅背上,长长地呼出一口气。窗外天还没有亮,天色是一种介于深蓝和浅灰之间的颜色,像浓墨被水冲淡了一点点。林辰看了一眼墙上的钟,还有三个多小时就是项目交付会。他没有任何睡意。
他重新打开模型,开始重构核心框架。这一次他不再赶时间,而是非常慢地、一章一章地敲代码,像是雕刻一样,把每一个功能块都打磨到完美。他一边写,一边在心里计算着明天交付会上的每一句话、每一个表情、每一个可能的转折。
赵岩以为带走了数据就能让项目瘫痪。
灰塔以为截胡了这个项目就能逼他低头。
钱峰以为自己的顶配权限永远不会被发现。
所有人都以为自己在暗处。
但林辰看到了一切。
天光渐渐亮起来的时候,林辰停下敲键盘的手,看了一眼屏幕右上角的情绪数值面板。他头顶的颜色已经变成了深蓝色,数值稳定在72分。他没有被愤怒或者焦虑影响,但他的情绪数据里多了一样东西——那是极度冷静的底色上浮现出的一层细微的橙色。
那是一种蓄势待发的预判感。
他收拾好东西,起身走向会议室,步伐平稳,没有一丝慌张。走廊尽头的门开着,投影仪的白光照在墙壁上,会议室里已经坐满了人。客户代表、技术总监、产品经理,所有人的目光都落在门口,等着他进来。
林辰踏进会议室的那一刻,视线扫过所有人头顶的情绪数值。大部分是黄色和橙色,担忧和观望。但有一个人的颜色不太对。
坐在角落里的是钱峰。
他的头顶,跳着一串深红色的数值——那是恐惧。