凌晨两点十七分,Genesis总部大楼只有十七层亮着灯。
陆沉舟坐在技术部的终端前,屏幕蓝光打在他脸上,眼睛里全是血丝。右手边放着一杯凉透的美式,左手边是韩立办公桌上搜出来的那块硬盘——已经接进了读卡器,进度条卡在97%不动了整整四十分钟。
沈砚秋靠在门框上,抱着胳膊。她从病房出来就没回去,安安那边安排了特护,陆沉舟的人。
"你打算看它转到天亮?"她说。
"它在解密。"陆沉舟没抬头,"韩立的权限等级是七,全公司只有两个七——我和沈知远。现在冒出第三个,说明要么他盗了沈知远的密钥,要么……"
"要么沈知远的密钥在他死之后还在被使用。"
"对。"
进度条跳到98%。
沈砚秋走过去,站在他身后。屏幕上跳出一串目录树——操作日志、权限变更记录、外部访问轨迹、数据导出清单。每一栏后面都跟着密密麻麻的时间戳。
"打开日志。"她说。
陆沉舟点开。列表加载出来,几千条记录从最新往最旧排列。他直接拉到底部,从最早的日期开始看。
"去年十一月十四号,第一次异常。"他指着屏幕,"有人用韩立的账号批量导出了S系列全部实验数据,一共四百七十三份文件。"
"韩立自己干的?"
"不可能。那天他在新加坡出差,航班记录我查过。"陆沉舟滚动页面,"但日志里写的是本地操作,IP地址是十七楼技术部的固定终端。"
"有人在替他操作。"
"或者有人在用他的身份操作。"
进度条到99%。硬盘里第二层目录弹开——不是操作日志,是邮件转发记录。只有一条,日期是三个月前,发件人显示为系统自动归档,收件人是一个她不认识的字符串:
offshore-node-7791@protonmail.com
"离岸邮箱。"沈砚秋念出来,"加密的。"
陆沉舟复制了那串地址,粘进溯源工具里跑。结果三秒出来——注册信息被多层跳板掩盖,最终落地在一个开曼群岛的空壳公司名下,公司名:Vantage Holdings Ltd.
"Vantage。"沈砚秋重复了一遍,"没听过。"
"我也没。"陆沉舟打开Genesis的对外投资数据库,输入这个名字。零结果。"不是我们的端口。是外部接入的。"
他关掉数据库,重新回到硬盘根目录。还有第三个文件夹,图标是灰色的,显示"已加密——需要二级密钥"。
"这个打不开?"
"打得开,但需要韩立的生物密钥。指纹或者虹膜。"陆沉舟靠回椅背,捏了一下眉心,"他人找不到了。"
沈砚秋沉默了一会儿。
"日志能不能按时间线排?我想看最近六个月的。"
陆沉舟把筛选条件改成"最近180天",回车。
列表刷新。几百条记录铺下来,她一条一条往下看。导出、访问、修改、导出、访问——频率越来越高,从每月两三次变成每周一次,最近一个月几乎每天都有操作。
"不对。"她指着屏幕中间某一段,"你看这段时间。"
三月中旬到四月初,连续十七天没有任何操作记录。空白。
"韩立请假了?"
"没有。"陆沉舟调出考勤系统,"他全勤。"
"那这十七天——"
"日志被覆写了。"陆沉舟的语气平了下来,但手指在键盘上的速度变快了。他打开底层校验工具,对那十七天的文件做哈希比对。"每一天的日志文件哈希值完全一致。"
"有人用同一个文件覆盖了十七天的记录。"
"对。而且覆写时间不是这十七天之内——是事后统一洗的。看这个。"他指着校验结果里的时间戳,"覆写操作发生在六天前。也就是我们开始查他之后。"
沈砚秋的手指收紧了。
"有人在盯着我们查他的动作。"
"而且反应速度很快。"陆沉舟关掉校验工具,重新盯着那个灰色的加密文件夹,"能在六天前统一清洗日志的人,要么有Genesis内网的实时告警权限,要么——"
"要么就在你身边。"
沉默。
屏幕上的光标闪了一下。
陆沉舟没有接这句话。他打开终端命令行,输入一串指令,调用Genesis核心服务器的远程访问记录。
"我换个思路。"他说,"日志被洗了,但服务器端的原始访问记录不一定能洗干净。Genesis的主数据库有三重备份,本地、异地、冷存储。韩立能洗本地和异地,但冷存储是离线物理隔离的,他碰不到。"
查询指令跑起来。他筛选条件:过去六个月,所有对S系列数据的访问请求,来源IP,用户ID。
结果出来。沈砚秋凑近了看。
大部分记录指向韩立的工号S-07,但中间夹杂着几个异常条目——用户ID显示为"SYS-ARCHIVE",访问时间集中在那十七天空白期里。
"SYS-ARCHIVE是什么?"
"系统归档账号。正常用途是自动备份。"陆沉舟的语速慢了下来,"但这个账号不应该有主动访问权限,它只能被动接收。"
"有人在用它主动拉数据。"
"对。"
他点开其中一条记录的详情。时间戳、IP地址、请求的数据包名称——
数据包名称让她呼吸停了半拍。
S-17_AnAn_Genetic_Profile_Full
安安的完整基因档案。
"他拉过安安的数据。"沈砚秋的声音压得很低。
"不止。"陆沉舟继续往下翻。SYS-ARCHIVE在那十七天里一共主动访问了二十三次,其中九次指向安安的基因文件,其余十四次指向——
他停下来。
"指向什么?"
他没说话,把屏幕转过来给她看。
十四次访问的目标文件名全部相同:
S-17_Prototype_Reverse_Engineering_v3.2
还原血清的逆向工程数据。
"他在研究怎么复制原型一。"沈砚秋说。
"不止是复制。"陆沉舟的声音沉下去,"v3.2,说明至少迭代了三个版本。他在做量产。"
两个人同时意识到同一件事——韩立拉安安的基因数据和还原血清数据,不是随机的。他需要知道安安体内的毒理结构,才能针对性地调整解毒剂的配方。
有人在给安安做定制化解毒方案。
但这个人不是陆沉舟。
"谁会同时需要安安的基因和还原血清的数据?"沈砚秋问。
陆沉舟没有立刻回答。他关掉访问记录,回到那个灰色的加密文件夹,盯着它看了很久。
"只有一个理由。"他说,"有人想自己做解毒剂。不是帮安安,是用安安做实验来完善配方,然后用在别的孩子身上。"
三十个家庭。
"名单上其他的孩子。"沈砚秋说。
"对。"
光标继续闪。凌晨三点零六分。
陆沉舟重新打开终端,调出冷存储里的原始连接日志。这次他不再筛选用户ID,而是直接按时间戳排序,拉出火灾当晚——五年前三月十九号——Genesis服务器所有外部连接记录。
列表很短。火灾当晚整栋楼断电,服务器只靠备用电源维持了四十分钟。四十分钟里只有三条外部连接:
第一条:沈知远的移动终端,连接时间23:14,断开23:17。
第二条:消防系统的自动报警信号,23:21。
第三条——
第三条的IP地址不在Genesis的内网范围内。是一个外部地址,来源显示为住宅宽带,位置在城西老城区。
用户ID:已注销。
注销时间:火灾后第三天。
"沈知远的账号是火灾后第三天注销的。"沈砚秋说。
"对。但你看最后一条操作记录。"
他点开详情。最后一条操作不是注销指令——注销是系统自动执行的。最后一条主动操作的时间是三个月前,操作内容是:
修改SYS-ARCHIVE账号权限等级:从被动接收变更为允许主动访问。
三个月前。
"三个月前有人用沈知远的已注销账号,给系统归档账号开了主动访问权限。"陆沉舟把光标移到那个外部IP上,"然后韩立从六天前开始洗日志。"
"时间线对不上。"沈砚秋皱眉,"三个月前开的权限,韩立六天前才洗日志——中间差了快三个月。这三个月他为什么没洗?"
"因为中间不需要洗。"陆沉舟关掉屏幕,转过来看她,"前两个月他操作的是冷存储以外的数据,那些可以实时覆盖。直到六天前我们开始查他,他才意识到冷存储里的原始记录也会暴露他。"
"所以那十七天的空白——"
"是三个月前那次操作留下的痕迹。他当时没想到冷存储会留底。"
沈砚秋消化了几秒。
"那个外部IP,能查到吗?"
"住宅宽带,五年前的地址,大概率早就换了主人。"陆沉舟站起来,活动了一下脖子,骨节响了一声,"但有一个东西是跟着人走的。"
"什么?"
"上网行为特征。"他重新坐下来,打开行为分析工具,"一个人在网络上留下的操作习惯——点击间隔、指令偏好、文件命名规则——这些东西比IP地址更难伪装。"
他加载了那个外部IP在火灾当晚的全部操作序列,然后拉出韩立过去六个月的全部操作记录,丢进比对引擎。
匹配度:71.3%。
"不是同一个人。"陆沉舟说,"操作习惯有明显差异。韩立的指令更短、更直接。这个人的指令更长、嵌套更多层。"
"那会是谁?"
"不知道。但有一个特征很明显——"他指着比对结果里的指令序列,"这个人习惯在每条指令后面加注释,而且注释风格是中文拼音首字母缩写。"
屏幕上显示了几条注释:
sg-sjy-0319
aj-vg-001
zm-001
"sg可能是沈知远。"沈砚秋试着解,"0319是火灾日期。aj——"
"顾言。"陆沉舟接上,"vg是Vantage。001是编号。"
"zm呢?"
比对引擎还在跑。进度条慢慢爬。
凌晨三点四十一分。
结果出来。
匹配度最高的已知账号:零。
没有匹配到任何已知人员。
但工具给出了一个推断——基于指令嵌套深度和注释命名规则,这个人的技术水平和陆沉舟本人处于同一梯队。
"你这个级别的人,能想到的还有谁?"沈砚秋问。
陆沉舟没有回答。他盯着屏幕上那三行拼音首字母看了很久,然后打开了一个新的搜索窗口,输入了一个名字。
不是韩立。不是顾言。不是沈知远。
是一个沈砚秋没听过的人。
"周远声。"她说,"你查他干什么?"
"不是周远声。"陆沉舟的手指停在键盘上,"是周远声的哥哥。"
屏幕上显示着一条人事记录:周远桥,前Genesis技术部高级工程师,入职时间七年前,离职时间五年前——火灾后第二周。
离职原因:辞职。
"他弟弟放火,他刚好在火灾后辞职。"沈砚秋的声音很轻。
"而且他的技术等级——"陆沉舟点开详情,"是八。比韩立还高一级。"
"第八层?"
"Genesis没有第八层。他的权限是沈知远私下开的,不在系统正式编制里。"
沈砚秋走到屏幕前,看着那个名字。
周远桥。
"他在哪?"
"离职后没有社保记录,没有纳税记录,没有航班记录,没有酒店记录。"陆沉舟关掉人事系统,"像一个不存在的人。"
"或者一个死了的人。"
"或者一个换了个名字活着的人。"
光标闪了一下。凌晨四点整。
安安的第五针时间。
沈砚秋的手机亮了,是病房的监控推送——安安还在睡,输液管里的液体平稳地滴着。
她盯着屏幕看了五秒,锁了手机。
"周远桥和韩立之间一定有联系。"她说,"韩立用的是第七层权限,周远桥的第八层权限在沈知远死后理论上应该自动失效——但如果有人继承了它——"
"韩立。"陆沉舟接上,"韩立的第七层可能是从周远桥的第八层降级来的。沈知远死后,系统自动把第八层降为第七层,但权限内核没变。"
"所以韩立能做的事比表面上多得多。"
"对。而且——"陆沉舟重新打开那个灰色的加密文件夹,"如果他继承的是周远桥的权限内核,那这个文件夹的二级密钥可能不是韩立的生物信息。"
他停下来。
"是谁的?"
"周远桥的。"
沉默了几秒。
"你有没有他的生物信息留存?入职的时候。"
"指纹有录入系统,但五年前他离职的时候应该被删了。"
"应该?"
"应该。"陆沉舟重复了一遍,"但冷存储——"
"冷存储不一定删干净。"
两个人同时看向屏幕。
凌晨四点十一分。天还没亮。Genesis十七层的灯光照着两个人的脸,一个满眼血丝,一个嘴唇发白。
陆沉舟的手指悬在键盘上方。
"要开吗?"沈砚秋问。
"开了就回不了头了。"他说,"这个文件夹里如果是周远桥和韩立的完整通讯记录,一旦解密,对方会收到告警。"
"他们已经知道我们在查了。"
"不一样。查日志和直接解密核心文件是两回事。后者等于正式宣战。"
沈砚秋看着他。
"顾言的一周期限还剩三天。"她说,"我们等得起吗?"
陆沉舟的手指落下去。
回车。
解密程序启动。屏幕中央出现一个进度环,缓慢旋转。
第一行状态信息弹出来:
正在调用冷存储生物特征数据库……
匹配中……
匹配成功。指纹ID:Zhou-YQ-2019-004。
解密中,请等待。
进度环转了一圈又一圈。
沈砚秋的手垂在身侧,指尖微微发凉。
"成了?"她问。
"在读了。"陆沉舟的声音很轻。
进度环转到第七圈的时候,屏幕闪了一下。
不是解密完成。
是一行红色警告弹到了最上层:
⚠ 远程擦除指令已触发。数据源将在60秒内销毁。
"有人在看。"陆沉舟猛地坐直。
"谁?"
"不知道,但对方有实时监控权限——"他手指疯狂敲击键盘,试图中断擦除指令,"冷存储不应该有远程触发能力,除非——"
45秒。
"除非有人把冷存储接进了实时网络。"沈砚秋说。
30秒。
陆沉舟放弃了中断,转而执行紧急拷贝指令,把已经读取到的部分数据强行写入本地。
15秒。
拷贝进度:3%……7%……14%……
0秒。
屏幕黑了。
硬盘指示灯灭了。
整个终端安静下来,像什么都没发生过。
陆沉舟靠回椅背,呼吸很重。
"拷了多少?"
"不到百分之二十。"他盯着黑掉的屏幕,"但够了。"
"够什么?"
他重新启动终端,打开本地缓存目录。一个只有三十七MB的文件躺在里面,文件名是自动生成的乱码。
"至少能知道对方在怕什么。"他双击打开。
文件解压。里面只有一张表。
不是通讯记录。不是操作日志。
是一份名单。
三十个名字,和沈知远芯片里那份部分重叠,但不完全一样。这份名单上有七个新名字,其中三个标注了红色。
第一个红标名字:安安。
第二个:沈砚秋。
第三个——
第三个她认识。
陆沉舟。
他的名字旁边标注了一行小字,字体和前面的拼音首字母注释一致:
"VG-001 备用载体。若S-17对AnAn失效,启用。"
沈砚秋读完那行字,抬起头。
"备用载体是什么意思?"
陆沉舟看着屏幕上自己的名字,表情是她从没见过的——不是恐惧,不是愤怒,是一种很深的、像井一样的平静。
"意思是,"他说,"如果安安的解毒方案失败,他们准备把S-17转到我身上继续实验。"
"为什么是你?"
"因为我的基因和安安的生父有血缘关系。"他的声音很平,"同样的血脉,同样的标记位点。安安身上不奏效的,在我身上大概率奏效。"
沈砚秋的手指慢慢攥紧了。
"所以你也是——"
"我也是实验对象。"他说,"从五年前就开始了。"
屏幕上的名单在冷光里静静躺着。三十个名字,七个红标,三个她认识的。
天窗上面有人。
而现在那个人知道他们在看了。