夜风有点凉,四个人走出饺子馆,谁都没先说话。校报记者刚走,手机还停留在那条没回复的消息上,屏幕暗了又亮。
林悦搓了搓胳膊:“我怎么觉得,咱们这庆功宴吃得像鸿门宴?”
“你电视剧看多了。”姜悦兮把手机塞进外套口袋,拉链拉到最上面,“现在的问题是,他们明天真要递举报材料,我们得提前准备。”
“准备什么?”林悦摊手,“咱们又没违规,沈墨渊连U盘都没插过,代码还是他自己手敲的。”
沈墨渊走在最后,低头看了眼手表:“他们不会只针对设备。”
“那是要针对人?”姜悦兮转头看他。
“针对流程。”他声音平稳,“比如,说我们提前拿到了测试题,或者有人内部泄题。”
林悦倒吸一口冷气:“这锅可就大了。”
“所以得留证据链。”沈墨渊停下脚步,“从今天起,所有沟通都走公开群,别私聊。我刚把项目全过程录了屏,包括每次调试的时间、Ip地址、提交记录,都打包上传到了学院云盘,设了共享权限。”
姜悦兮挑眉:“你还真把这当成作战计划了。”
“本来就是。”他看着她,“他们敢动手,就得让我们抓到破绽。现在我们唯一的优势,是他们不知道我们知道。”
林悦一拍大腿:“懂了,咱们现在是‘假装不知道,其实全知道’模式,主打一个心理博弈。”
“差不多。”沈墨渊点头,“明天校务处如果真收到材料,别急着反驳,先让流程走完。听证会、调查组、答辩环节,一个都不能少。”
“你还想让他们走正式流程?”姜悦兮笑了,“你就不怕他们直接压下来?”
“压得下来一次,压不下两次。”他说,“只要程序启动,就得留记录。记录一多,漏洞就藏不住。”
林悦啧啧两声:“你这哪是学生,你这是把学校当法院打了。”
四人走到校门口,路灯下影子拉得老长。保安大叔远远挥手:“关门了啊,赶紧回宿舍!”
“知道了!”林悦应了一声,转头看另外三人,“要不……今晚通宵?反正明天有听证会,咱们得把材料整明白。”
姜悦兮刚想点头,手机又震了一下。
她拿出来看了一眼,是学院学生会的群公告:【关于Aegis赛事争议情况的说明】将于明早九点发布,请相关参赛人员做好准备。
“他们动作挺快。”她把手机递给沈墨渊。
他扫了一眼,没说话,只是把消息截图保存。
“走吧。”他说,“去图书馆通宵,那儿有监控,没人敢乱来。”
图书馆后门的自习区还亮着灯,零星几个学生在刷题。他们找了个靠窗的桌子,沈墨渊打开笔记本,插上网线,直接调出云盘备份。
“这是我昨晚改驱动时录的全程日志。”他点开一个视频,“看到这个时间戳了吗?凌晨两点十七分,我提交了第一版修复代码。而系统被篡改的时间是凌晨三点,差了四十三分钟。”
“也就是说,咱们的代码提交在前,他们改分在后。”林悦凑过来,“这不就证明咱们没作弊?”
“还不够。”姜悦兮盯着屏幕,“他们可以说,你是提前知道系统会出问题,所以预先准备了‘备用代码’。”
“那正好。”沈墨渊点开另一个文件夹,“我留了开发环境的镜像。你们看,这个编译器的缓存记录显示,我是在发现成绩异常后,才开始搜索相关漏洞的。”
林悦瞪大眼:“你还连缓存都留着?”
“缓存比截图更难伪造。”他淡淡道,“而且,我用了学院统一认证的账号登录,所有操作都绑定了学号和设备指纹。”
姜悦兮忽然笑了:“你根本不是防他们改分,你是防他们反咬一口。”
“对。”他合上电脑,“我们现在要做的,不是自证清白,是让他们没法撒谎。”
林悦瘫在椅子上:“我突然觉得,咱们拿冠军都没这过程刺激。”
“因为冠军是结果。”沈墨渊说,“而我们现在,是在决定结果能不能被承认。”
话音刚落,电脑弹出一条新消息。
是技术论坛的私信:【你们的代码里有个隐藏函数,叫debug_backdoor,解释一下?】
三人同时凑过去。
“哪来的?”姜悦兮皱眉。
沈墨渊点开源码,快速检索,找到了那个函数。他盯着看了两秒,忽然冷笑:“这不是我写的。”
“不是你?”林悦一惊,“那谁写的?”
“有人在我们提交前动了手脚。”他调出版本对比工具,“看这里,这个函数是最后一次提交前十分钟加进去的。而我当时已经锁定了本地仓库。”
“远程注入?”姜悦兮声音低了下来,“他们能进我们的开发环境?”
“不一定。”沈墨渊摇头,“更可能是,他们截获了提交包,在上传过程中做了替换。”
林悦猛地站起来:“所以他们根本不在乎我们有没有作弊,他们就是要造一个‘看起来像作弊’的证据!”
“对。”沈墨渊关掉页面,“现在他们手里有三个攻击点:外部设备、泄题嫌疑、代码后门。只要有一个被坐实,咱们的冠军就得被取消。”
“那怎么办?”姜悦兮问。
“反过来打。”他说,“既然他们敢用这个函数,那就让他们解释,为什么techNova的内部调试协议,会出现在我们的代码里。”
“techNova?”林悦愣住,“那不是……”
“对。”沈墨渊看着她,“那个函数调用的接口,是techNova内部测试系统专用的。普通学生根本接触不到。”
姜悦兮瞳孔一缩:“所以,不是我们在代码里藏后门,是他们把自己的东西塞进了我们的代码?”
“精准投放。”沈墨渊嘴角微扬,“现在,证据链闭环了。”
林悦一拳砸在桌上:“太脏了!这哪是比赛,这是栽赃产业链!”
“所以明天听证会,我们不急着自辩。”沈墨渊打开录音软件,“我们只问一个问题——谁有权限在提交过程中修改代码包?”
“系统管理员。”姜悦兮接话,“而系统搭建,是techNova全程参与的。”
“没错。”他点头,“他们想让我们当靶子,我们就把靶心,转到他们自己身上。”
三人沉默了几秒。
林悦忽然咧嘴一笑:“我怎么觉得,你现在比冠军还像赢家?”
沈墨渊没笑,只是低头看了眼时间:凌晨一点二十三分。
“还有六个多小时。”他说,“睡一会儿,待会儿听证会,得清醒。”
姜悦兮靠在椅背上,闭上眼,却没睡着。她听见沈墨渊在轻声敲键盘,节奏稳定,像某种无声的安抚。
过了一会儿,他摘下耳机,轻轻放在她手边。
“要是困了,用这个。”他说,“隔音不错。”
她睁开眼,看着他:“你不睡?”
“我习惯熬夜。”他继续盯着屏幕,“而且,得等一个回复。”
“等谁?”
“论坛管理员。”他说,“我刚发了封邮件,申请调取原始提交包的哈希校验记录。”
姜悦兮点点头,没再问。她把耳机戴上,世界一下子安静下来。
可她没睡着。
她想起刚才沈墨渊说的每一句话,每一个细节,每一步预判。他不是在应对危机,他是在下一盘早就布好局的棋。
而她,原本以为自己是并肩作战的队友,现在才发现,有些路,他早就一个人走到了终点。
她悄悄摘下一边耳机,听见他在低声念:“Ip地址……匹配成功。”
她坐直了:“找到什么了?”
“刚才那个私信账号。”他盯着屏幕,“注册用的邮箱,是techNova的员工内网邮箱。”
林悦猛地惊醒:“卧槽!他们自己人下场钓鱼?”
“不止。”沈墨渊点开一个链接,“这个账号,三天前发过一篇技术帖,讲的就是Aegis评分系统的漏洞利用。”
姜悦兮呼吸一滞:“所以他们不是临时起意,是早就准备好了剧本?”
“对。”他说,“我们夺冠,只是他们计划里的一个触发点。”
“那咱们现在曝光这个?”林悦问。
“不。”沈墨渊摇头,“等听证会开始。让他们先出招,我们再掀桌。”
“你真是……”林悦摇头,“狠人。”
凌晨五点,图书馆的灯还亮着。
四人围坐在桌前,材料打印成册,每一页都贴了标签。沈墨渊把所有证据按时间线排好,像在布置一场审判。
六点十五,学生会发来通知:听证会提前至七点,地点在行政楼三楼会议室。
“急了。”沈墨渊合上电脑,“他们怕夜长梦多。”
七点整,会议室门打开。
校方代表、赛事评委、techNova的技术主管,全都到场。对方看到他们三人走进来,脸上没什么表情。
主持人开口:“关于Aegis赛事冠军队伍涉嫌违规一事,现进行初步听证。请双方陈述。”
techNova的主管站起来:“我们收到举报,该队伍提交的代码中包含远程调试后门,存在恶意操控系统的可能。这是截图证据。”
他投影出那段debug_backdoor函数。
姜悦兮正要说话,沈墨渊抬手拦住她。
他站起来,声音平静:“请问,贵公司是否承认,这个函数调用的接口,属于techNova内部测试系统专用协议?”
主管一愣:“这……是我们的技术,但学生不该接触。”
“那请问。”沈墨渊继续问,“谁有权限在代码提交过程中,修改原始包内容?”
“系统自动校验,不会人工干预。”
“可我们查到。”沈墨渊打开笔记本,“最后一次提交的哈希值,与系统记录不符。差了三百一十二个字节。而这三百一十二字节,正好包含了这个函数。”
会议室安静了一瞬。
“更巧的是。”他点开下一个页面,“发送举报私信的账号,注册邮箱为techNova员工专用域名。而该账号,三天前发布过一篇关于评分系统漏洞的技术分析。”
主管脸色变了。
“所以。”沈墨渊看着他,“不是我们在代码里藏后门,是你们的人,在我们提交时,把你们自己的东西塞了进来?”
对方没说话。
沈墨渊把打印好的证据推到会议桌中央:“这是原始提交记录、哈希校验、Ip追踪、账号信息。如果需要,我们可以当庭演示还原过程。”
主持人翻着材料,额头冒汗。
techNova主管终于开口:“这可能是……个别员工的个人行为。”
“那就请贵公司。”沈墨渊盯着他,“立刻启动内部调查,并向全校公开说明。”
会议室陷入沉默。
姜悦兮看着沈墨渊的侧脸,忽然觉得心跳有点快。
她低头,发现自己的手,不知什么时候,已经握住了桌角。
而沈墨渊的水杯,就放在她手边,杯壁还带着温热。