笔趣阁 > 玄幻小说 > 复仇星耀途 > 第17章:熟悉的幽灵
    路容点击周哲发来的链接,远程桌面界面在屏幕上展开。周哲的共享屏幕已经开启,显示着密密麻麻的日志文件和实时监控图表。他的声音从耳机里传来:“能看到吗?异常数据包主要集中在最近二十分钟,解密失败率突然飙升。”路容调整麦克风,声音平稳:“看到了。先从解密失败的数据包开始分析吧。”她的手指放在键盘上,目光锁定屏幕上那些被标记为红色的条目。那些加密负载格式错误的数据包,那些触发告警的异常记录——每一行代码,每一个时间戳,都可能藏着三年前的真相。而此刻,周哲就在屏幕另一端,等待她的专业判断。


    “我拉取了最近三十分钟的详细日志。”周哲的声音带着熬夜的沙哑,背景里传来他敲击键盘的清脆声响,“你看这个,198.51.100.23这个源地址,连续发了十七个数据包,payload字段的加密格式都不对。AES-256-GCM的认证标签缺失,解密服务直接拒绝了。”


    路容放大日志窗口。


    屏幕上的文字在昏暗的房间里泛着冷白的光。她的眼睛快速扫过每一行:


    ```


    [2025-03-18 01:07:23.451] INFO 解密服务 - 数据包ID: DL-20250318-014723-8876 源IP: 198.51.100.23 状态: 解密失败 原因: 认证标签校验失败


    [2025-03-18 01:07:24.112] INFO 解密服务 - 数据包ID: DL-20250318-014724-1123 源IP: 198.51.100.23 状态: 解密失败 原因: 加密负载长度异常


    [2025-03-18 01:07:24.889] INFO 解密服务 - 数据包ID: DL-20250318-014724-8890 源IP: 198.51.100.23 状态: 解密失败 原因: 初始化向量格式错误


    ```


    “这些错误码……”路容轻声说,声音通过变声器处理后显得平静克制,“看起来像是加密流程本身有问题。密钥轮换出错了?还是这个数据源用的根本不是我们的标准加密库?”


    “我查过了。”周哲那边传来鼠标滚轮滚动的声音,“密钥服务日志显示,轮换正常。而且这个IP段是今晚刚接入的测试渠道,按理说应该使用和我们其他数据源一样的SDK。除非——”


    “除非有人故意发送格式错误的数据。”路容接上他的话。


    耳机里沉默了两秒。


    “有这个可能。”周哲说,“但为什么?测试环境的数据又没什么价值。”


    路容没有回答。她的目光停留在那些错误码的排列方式上。AES_GCM_AUTH_FAIL,PAYLOAD_LEN_INVALID,IV_FORMAT_ERR——每个错误码后面都跟着一个括号,括号里的描述用下划线连接单词,首字母大写。这种命名习惯……


    她感到喉咙发紧。


    “我们看看这些数据包被标记为异常后的处理流程。”路容说,声音依然平稳,“你的过滤规则触发后,系统是怎么处理这些‘异常’数据包的?直接丢弃?还是进入待审核队列?”


    “我设置了进入待审核队列。”周哲说,“毕竟可能是误判,需要人工复核。我调一下后台服务的日志。”


    屏幕切换。


    新的日志窗口弹出,显示的是“数据质量审核服务”的记录。路容看着那些时间戳和操作记录,呼吸逐渐变缓。


    ```


    [2025-03-18 01:08:15.332] INFO 审核服务 - 收到异常数据包队列 批次ID: ABN-20250318-010815 数据包数量: 1274


    [2025-03-18 01:08:16.001] INFO 审核服务 - 开始处理批次: ABN-20250318-010815 处理线程:审核线程-3


    [2025-03-18 01:08:16.445] INFO 审核服务 - 数据包DL-20250318-014723-8876 审核结果: 标记为“疑似恶意格式” 处理动作: 隔离存储


    [2025-03-18 01:08:16.778] INFO 审核服务 - 数据包DL-20250318-014724-1123 审核结果: 标记为“疑似恶意格式” 处理动作: 隔离存储


    ```


    路容的指尖开始发凉。


    不是因为这些内容——这些流程很正常。而是因为日志的格式。


    时间戳的写法:[2025-03-18 01:08:15.332]


    日志级别的标注:INFO 审核服务 -


    破折号后面的空格:一个空格,不多不少。


    错误描述的括号格式:


    冒号后面也是一个空格。


    她的心跳开始加速,在胸腔里撞击出沉闷的声响。耳朵里传来血液流动的嗡鸣,盖过了周哲在耳机里说话的声音。她只能看见屏幕上的文字,那些排列整齐的日志条目,那些深入骨髓的格式习惯——


    “若溪?”周哲的声音把她拉回来,“你在听吗?我说,这些数据包被隔离后,系统还生成了审计记录,需要我调出来看看吗?”


    路容深吸一口气。


    出租屋里的空气带着灰尘和陈旧木料的气味。窗外的城市已经彻底沉睡,只有远处高架上偶尔驶过的车辆传来模糊的呼啸。她面前的电脑屏幕是房间里唯一的光源,照亮了她放在键盘上微微颤抖的手指。


    “调出来。”她说,声音比刚才低了一个度,“我要看完整的处理链条。”


    “好。”


    新的日志窗口。


    这次是“系统审计服务”的记录。路容的眼睛死死盯着屏幕,瞳孔在昏暗的光线中放大。她看着那些条目,一行,两行,三行——


    ```


    [2025-03-18 01:08:17.112] AUDIT 系统审计 - 操作: 数据隔离 执行服务: 审核服务 目标数据包: DL-20250318-014723-8876 审计ID: AUDIT-20250318-010817-001


    [2025-03-18 01:08:17.334] AUDIT 系统审计 - 操作: 数据隔离 执行服务: 审核服务 目标数据包: DL-20250318-014724-1123 审计ID: AUDIT-20250318-010817-002


    ```


    时间戳。


    日志级别。


    服务名称。


    破折号。


    空格。


    操作描述。


    执行服务。


    目标标识。


    审计ID。


    每一个字段的位置。


    每一个标点的用法。


    每一个空格的间隔。


    路容的呼吸停止了。


    三年前。


    天启科技。


    “灯塔”项目。


    服务器机房恒温空调的低沉嗡鸣。


    屏幕上滚动的实时日志。


    那些她看了无数遍的、记录着“数据泄露”发生前后所有操作的日志条目。


    她颤抖着手,移动鼠标。


    不是去操作远程桌面——而是点开了自己电脑本地的一个加密文件夹。输入三十二位密码,确认。文件夹打开,里面是几十个按日期命名的截图文件。她的手指在触摸板上滑动,指尖冰凉,几乎感觉不到触控板的摩擦。


    找到它。


    2022年。


    7月。


    15日。


    那个日期像烧红的铁烙在她的记忆里。


    文件:20220715_天启_服务器日志_片段_03.png


    双击打开。


    图片在屏幕上展开。


    同样是日志。


    同样是时间戳。


    同样是服务记录。


    ```


    [2022-07-15 22:31:45.887] INFO 数据导出服务 - 接收到导出请求 请求ID: EXP-20220715-223145 用户: lujian  导出数据集: 灯塔_用户行为_样本_202207


    [2022-07-15 22:31:46.112] INFO 数据导出服务 - 开始处理导出请求: EXP-20220715-223145 处理线程:导出线程-2


    [2022-07-15 22:31:47.334] INFO 数据导出服务 - 导出完成 请求ID: EXP-20220715-223145 输出文件: /export/灯塔_样本_20220715_223145.zip 文件大小: 2.3GB


    [2022-07-15 22:31:47.889] AUDIT 系统审计 - 操作: 数据导出 执行用户: lujian 目标数据集: 灯塔_用户行为_样本_202207 审计ID: AUDIT-20220715-223147-001


    ```


    路容的视线在两个屏幕之间来回移动。


    左边,是星耀集团“深蓝计划”的审计日志。


    右边,是三年前天启科技“灯塔项目”的日志截图。


    时间不同。


    项目不同。


    公司不同。


    服务名称不同。


    但格式——


    [2025-03-18 01:08:17.112] AUDIT 系统审计 - 操作: 数据隔离 执行服务: 审核服务 目标数据包: DL-20250318-014723-8876 审计ID: AUDIT-20250318-010817-001


    [2022-07-15 22:31:47.889] AUDIT 系统审计 - 操作: 数据导出 执行用户: lujian 目标数据集: 灯塔_用户行为_样本_202207 审计ID: AUDIT-20220715-223147-001


    时间戳的毫秒数用点分隔。


    破折号后面永远跟着一个空格。


    操作描述后面是冒号加空格。


    执行者字段的写法。


    审计ID的生成规则:AUDIT-年月日-时分秒-序号。


    还有——


    路容把两张图片并排放在一起,放大细节。


    错误码的写法。


    天启科技的日志里,有一次网络超时的记录:


    ```


    [2022-07-15 22:30:12.445] WARN 数据传输 - 连接超时


    ```


    分号。


    错误码后面是分号。


    但分号前面有一个空格。


    NET_TIMEOUT;


    她猛地切回星耀的日志窗口,搜索分号。


    找到了。


    在解密服务的某条警告日志里:


    ```


    [2025-03-18 01:05:33.778] WARN 解密服务 - 密钥缓存未命中


    ```


    KEY_CACHE_MISS;


    分号。


    空格。


    然后分号。


    一模一样。


    路容的整个身体开始颤抖。


    不是冷——出租屋里的暖气还在工作,空气温热干燥。是那种从骨髓深处渗出来的寒意,沿着脊椎爬升,在头皮上炸开细密的刺痛。她的手指蜷缩起来,指甲陷进掌心。疼痛让她稍微清醒了一些,但视线依然模糊,屏幕上的文字在晃动。


    “若溪?”周哲的声音再次传来,这次带着明显的疑惑,“你那边还好吗?我这边看到你的鼠标很久没动了。”


    路容张开嘴。


    她想说话。想说“我没事”。想说“继续排查”。但喉咙像被什么东西堵住了,声带僵硬,发不出任何声音。她只能听见自己粗重的呼吸,在安静的房间里显得格外刺耳。


    “若溪?”


    她用力吞咽,口腔里干得发苦。手指在键盘上摸索,敲出两个字:“在。”


    “你找到什么了吗?”周哲问,“我这边倒是发现问题了。你看这个——”


    屏幕切换回数据流监控界面。周哲用鼠标圈出一段代码:“你的过滤规则,第87行,边界条件判断有问题。`if `,这里用的是逻辑与,但实际应该用逻辑或。因为只要异常率超过1%或者数据量超过阈值,就应该告警。你用与的话,必须两个条件同时满足才会触发。所以之前那些零散的异常数据包没触发告警,直到今晚这个新数据源涌入大量数据,两个条件才同时满足。”


    他的声音轻松了一些,甚至带着点笑意:“小bug,我改一下就行。改完重新部署,告警应该就能解除。不过你设计这个规则的时候,是不是太谨慎了?怕误报太多?”


    路容盯着屏幕上被圈出的那行代码。


    她的代码。


    她故意留下的漏洞。


    她精心设计的鱼饵。


    现在,周哲轻松地找到了问题,轻松地修复了。他以为这只是新手工程师常犯的逻辑错误。他不知道这行代码背后藏着什么。不知道这个漏洞是故意留下的。不知道这个告警是她等待的契机。


    更不知道,就在他排查技术问题的这几分钟里,她已经看到了地狱。


    “若溪?”周哲又问了一次,“你确定没事吗?你的呼吸声有点重。”


    路容闭上眼睛。


    三秒。


    五秒。


    十秒。


    她重新睁开眼睛,手指在键盘上敲击,通过聊天窗口发送消息:“没事,刚才在对比日志。你说得对,是我考虑不周。谢谢指正。”


    发送。


    然后她关掉了麦克风。


    她需要安静。


    需要绝对的、彻底的安静。


    周哲在耳机里说了什么,她听不见。她只看见聊天窗口里弹出他的回复:“客气什么,一起解决问题嘛。我改好了,正在重新部署。大概两分钟后生效。你那边可以继续监控异常率的变化。”


    路容没有回复。


    她的目光重新回到那两个并排的屏幕上。


    左边,星耀。


    右边,天启。


    相同的日志格式。


    相同的标点习惯。


    相同的空格用法。


    相同的分号前面加空格的诡异细节。


    这不是巧合。


    这不是“行业通用规范”——她在这行干了七年,看过无数公司的系统日志。有的用方括号,有的用圆括号。有的时间戳精确到秒,有的到毫秒。有的错误码用下划线,有的用点号。有的在冒号后面加空格,有的不加。有的审计ID用UUID,有的用自增数字。


    但像这样,每一个细节都吻合——


    只有一种可能。


    写这些日志记录的服务,是同一个程序员开发的。


    或者更准确地说,设计这些日志格式规范的人,是同一个人。


    李剑。


    路容的嘴唇无声地动了一下,念出这个名字。


    三年前,他是天启科技的技术副总裁,负责“灯塔”项目的整体架构。所有核心服务的日志规范,都是他亲自审核定稿的。路容记得很清楚,因为当时她还为此和他争论过——李剑坚持要在分号前面加空格,说这样“更美观”;路容认为这不符合大多数编程语言的惯例,容易造成解析问题。最后李剑用职权压了下来:“按我的规范来。”


    她当时只觉得这个人固执。


    现在她知道了,那不是固执。


    那是习惯。


    是烙印。


    是无论换到哪家公司、哪个项目、哪个系统,都会不自觉带上的个人印记。


    就像指纹。


    而现在,这个指纹,出现在了星耀集团的“深蓝计划”里。


    路容靠在椅背上,仰起头。


    出租屋的天花板很低,白色的涂料有些剥落,露出下面灰色的水泥。角落里有一小片水渍,是楼上漏水留下的痕迹,形状像一张扭曲的脸。她盯着那片水渍,眼睛一眨不眨。


    所以,李剑不仅当年构陷了她。


    不仅偷走了她的职业生涯。


    不仅毁了她的人生。


    现在,他还在用同样的手法,在另一家公司,另一个项目里,做类似的事情。


    “深蓝计划”到底是什么?


    那些加密格式错误的数据包,来自哪里?


    那个IP段198.51.100.0/24,背后是什么?


    还有——


    路容猛地坐直身体。


    如果日志格式是李剑的个人习惯,那么“深蓝计划”的整个技术架构,很可能也是他主导设计的。或者至少,核心的数据处理流程是他把关的。那么,这个项目里,会不会藏着和三年前“灯塔”项目一样的秘密?


    非法数据交易?


    黑市数据源?


    洗白渠道?


    她的心脏狂跳起来,在胸腔里撞击出疼痛的节奏。手指重新放在键盘上,冰凉僵硬。她切回远程桌面,看到监控面板上的红色警示标志已经消失。异常率降到了0.23%,数据流恢复正常。周哲在聊天窗口里发来消息:“搞定。告警解除。你可以休息了,今天辛苦了。”


    路容盯着那条消息。


    她的手指在键盘上悬停了几秒,然后敲下:“辛苦了。谢谢。”


    发送。


    然后她断开远程连接。


    屏幕暗下去。


    房间里只剩下她电脑本地屏幕的光,照亮着那张三年前的日志截图。那张截图里,有李剑的操作记录。有他导出数据的记录。有系统审计的记录。有所有能证明他当年做了什么、却因为“证据不足”而被忽略的记录。


    而现在,她有了新的线索。


    相同的指纹。


    相同的习惯。


    相同的幽灵。


    路容关掉图片窗口,打开一个新的文档。她开始打字,手指在键盘上飞快移动,敲击声在安静的房间里回荡,像某种急促的心跳。


    标题:日志格式对比分析


    时间:2025年3月18日凌晨


    对比对象:天启科技“灯塔”项目日志(2022年7月) vs 星耀集团“深蓝计划”日志(2025年3月)


    相似点:


    1. 时间戳格式:[年-月-日 时:分:秒.毫秒]


    2. 日志级别与服务名称之间的分隔:一个空格+破折号+一个空格


    3. 操作描述后的标点:冒号+空格


    4. 错误码后的标点:分号前加空格


    5. 审计ID生成规则:AUDIT-年月日-时分秒-序号


    6. 字段顺序:时间戳、级别、服务、破折号、描述、执行者、目标、审计ID


    7. ……


    她列出了十七条相似点。


    每一条,都是细节。


    每一条,都是习惯。


    每一条,都是同一个人留下的痕迹。


    文档写完,她保存,加密,备份到三个不同的地方。


    然后她坐在椅子上,一动不动。


    窗外的天空开始泛白。深港市的黎明来得很快,远处的天际线从漆黑变成深蓝,再变成灰白。高架上的车流声逐渐密集起来,城市正在苏醒。新的一天要开始了。


    路容看着窗外渐亮的天光。


    她的脸上没有任何表情。


    没有愤怒。


    没有悲伤。


    没有恐惧。


    只有一种冰冷的、绝对的确定。


    李剑。


    果然是他。


    耳机里传来“叮”的一声——是周哲又发来了消息。路容没有去看。她的世界在那一刻缩小到只剩下一个事实:那个毁了她一切的人,就在那里。就在星耀集团。就在她此刻潜伏的这栋大楼里。用着同样的手法。做着同样的事。


    而她,已经找到了第一个确凿的证据。


    不是猜测。


    不是推理。


    是刻在代码里的、无法伪造的指纹。


    路容慢慢站起身。


    腿有些发麻,血液流通不畅带来的刺痛让她微微皱眉。她走到窗边,拉开窗帘。清晨的光线涌进来,照亮房间里漂浮的灰尘。楼下街道上,早班的公交车驶过,轮胎压过路面发出湿漉漉的声响。空气里有早餐摊飘来的油烟味,混合着城市清晨特有的清冷气息。


    她看着这一切。


    看着这个她生活了三年的城市。


    看着这个她必须复仇的世界。


    然后她转过身,走回电脑前。


    屏幕还亮着。


    文档还打开着。


    那些相似点还列在那里。


    路容坐下,关掉文档。


    她打开邮箱,开始写一封邮件。收件人:周哲。主题:关于今早告警事件的复盘与改进方案。正文:感谢协助排查,我已记录问题原因,后续会优化规则设计,避免类似情况发生……


    她的手指在键盘上移动,敲出专业、冷静、克制的文字。


    就像什么都没发生过一样。


    就像她只是一个普通的新人工程师,刚刚经历了一次小小的技术故障,正在做善后总结。


    就像她的内心没有刚刚经历一场海啸。


    就像那个熟悉的幽灵,没有在深夜里,对她露出狰狞的微笑。


    邮件写完,发送。


    路容关掉电脑。


    屏幕彻底暗下去。


    房间里陷入昏暗,只有窗外透进来的晨光,在地板上投下一片模糊的亮斑。她坐在椅子上,看着那片光。光里有灰尘在缓慢旋转,像某种无声的舞蹈。


    她的手机震动了一下。


    路容拿起来看。


    周哲回复了她的邮件:“收到。不用太自责,技术问题难免。你今天上午可以晚点来,好好休息。”


    她盯着那条消息。


    看了很久。


    然后她放下手机,双手捂住脸。


    肩膀开始颤抖。


    不是哭泣——她没有流泪。只是身体在不受控制地发抖,像寒冷,像恐惧,像某种积压了太久的情绪终于找到了裂缝,正在从内部撕裂她。


    三年来。


    一千多个日夜。


    每一次从噩梦中惊醒。


    每一次看到行业新闻里李剑的名字。


    每一次被人用异样的眼光打量。


    每一次在招聘网站上投出简历然后石沉大海。


    所有那些时刻积累的重量,在这一刻,全部压了下来。


    但只持续了不到一分钟。


    路容放下手。


    她的脸上依然没有表情。只是眼睛比刚才更亮,像某种淬过火的金属,在昏暗的光线里泛着冷硬的光泽。她站起身,走进狭小的卫生间,打开水龙头。冷水泼在脸上,刺骨的冰凉让她彻底清醒。


    抬头,看向镜子。


    镜子里的人,黑眼圈很重,脸色苍白,嘴唇干裂。但眼神是坚定的。是那种知道自己要做什么、并且一定会做到的坚定。


    路容用毛巾擦干脸。


    然后她走出卫生间,开始换衣服。


    白衬衫。


    黑色西装裤。


    低跟鞋。


    她把长发扎成利落的马尾,戴上那副伪装用的黑框眼镜。镜片后的眼睛,已经看不出任何情绪的波动。


    她拿起包,检查里面的东西:手机、钥匙、工牌、笔记本、笔。


    还有那个小小的、伪装成口红管的变声器。


    一切就绪。


    路容走到门口,手放在门把手上。


    她停顿了一秒。


    然后拉开门,走出去。


    走廊里很暗,声控灯没有亮。她踩着高跟鞋,脚步声在空旷的楼道里回响,一声,一声,清晰而稳定。


    下楼。


    走出单元门。


    清晨的空气扑面而来,带着凉意。


    路容抬起头,看向远处那栋高耸的写字楼——星耀集团的总部。玻璃幕墙在晨光中反射着金色的光,像一座冰冷的、华丽的宫殿。


    而她知道,在那座宫殿里,住着一个幽灵。


    一个熟悉的幽灵。


    现在,她要去找他了。