免责声明:本文为虚构故事,请读者朋友注意辨别,理智思考。
我在前夫车上贴满了“此车曾被追尾”的纸条,他撕了三天撕不完,第4天洗车时发现纸条底下是他亲哥写的“娶我老婆就要挨骂”
第1章
“林深,签字吧,这婚我一天都过不下去了。”陈敏把一份打印好的离婚协议拍在餐桌上,碗里的泡面汤溅出来几滴,沾在纸角上。她穿着那件我去年在夜市给她买的碎花睡裙,头发随便扎着,脸上的表情比往常更冷。出租屋的灯坏了一盏,只剩客厅那只吸顶灯泡亮着,光线昏黄,照得她眼角的细纹格外清楚。厨房水槽里堆着三天的碗筷,筷笼里长了一小簇灰绿色的霉菌。我放下那碗刚泡好的红烧牛肉面,看着协议上“双方自愿离婚”几个字,没说话。
“你听见没有?”她提高了音量,指尖敲着桌面,“赵东升今天又打电话来了,说他们公司缺个技术总监。你知道我多丢人吗?我同学老公年薪百万,我在同学群里连个屁都不敢放。你一个研究院的临时工,一个月四千八,房租两千三,剩下的钱够干什么?上个月我爸住院,你连五千块都拿不出来。”
我靠在椅背上,椅子腿嘎吱响了一声。我看着她的眼睛,把那份协议推回去:“你结婚六年,上过一天班吗?”
她愣了一下,脸色涨红:“你什么意思?当年要不是我辞职照顾你妈,我能——”她咬住嘴唇,把那半截话吞回去了。客厅里安静了两秒,只有老冰箱的压缩机嗡嗡响。她深吸一口气,声音压下来:“别扯这些没用的。我已经想好了,房子是租的,没什么好分的。存款你拿去,就那点破钱我也不稀罕。你签字就行,咱们好聚好散。”
我低头扫了一眼协议。财产分割栏写着“双方无共同房产,银行存款归男方所有,无其他共同财产”。字体是宋体小四,打印得歪歪扭扭,像是她从网上随便找的模板。我看得出她急。她急什么?急赵东升的下一通电话,急她同学群里再晒一次新包,急她爸出院后问起女婿怎么没来。她急,是因为她不知道我手里有什么。
“赵东升知道你要离婚?”我问了一句,语气很平。
她眼神闪了一下:“跟他没关系。”
我点了点头。我把协议翻到最后一页,从笔筒里抽了支水笔,笔帽咬开,在乙方签名栏落笔。纸面有点潮,泡面汤的印子还没干。我写了“林深”两个字,笔画匀称,字迹清楚。写完了,我把笔搁在桌上,协议推回她面前。她盯着那个签名看了三秒钟,眼睫毛动了一下,没有说话。她把协议叠起来塞进包里,拉链拉上,那个动作干脆得像早就排练过一百遍。
“你收拾一下吧,我今晚去我姐那儿住。”她转身往卧室走,拖鞋在地板上蹭出沙沙声。走到卧室门口,她停了一步,侧过脸:“对了,你那个实验室的事,以后别跟我说了。赵东升说你们那个所马上就要裁撤了,你这临时工的身份估计也保不住。你自己看着办吧。”
卧室门关上。我听见她拉开衣柜的拉链,衣服被抽出来的簌簌声,化妆包磕在床头柜上的响动。大概十五分钟后,她拖着一只行李箱出来,换了件深蓝色的外套,头发重新扎了一遍。她没看我,拖着箱子往门口走。门锁咔嗒拧开的时候,她嘴唇动了动,没出声。门关上,楼道里传来行李箱轮子磕在台阶上的声音,一下,一下,渐渐远了。
我坐在餐桌前,泡面已经凉透了,面条涨成一团糊状,浮着层凝固的油花。我把它端起来倒进水槽,水龙头拧开冲了两秒,白色泡沫卷着碎葱花旋进下水口。我关了水,把协议复印件从桌垫底下抽出来——我趁她不注意多印了一份。纸面上我的签名还在,墨迹干透了。我把复印件折好塞进外套内侧口袋,拉开冰箱门。里面还有两颗鸡蛋、半瓶老干妈、一盒过期的纯牛奶。我把牛奶盒扔进垃圾桶,鸡蛋拿出来磕进碗里搅散,油烟机打开,平底锅烧热倒油。蛋液倒进锅里的声音很响,嗤啦一声,在安静的屋子里格外突兀。
我煎了两个蛋,夹进一片剩吐司里。嚼着吐司的时候,我走到卧室床边蹲下来。床底下塞着一只黑色收纳箱,上面落了一层灰。我把箱子拽出来,锁扣掰开。里面有几件旧冬衣、一沓大学教材、一个坏了屏的平板电脑,还有一块移动硬盘。硬盘是黑色的,巴掌大小,接口处贴着一张褪色的标签,上面用油性笔写着“备份3”——字迹潦草,是我五年前的笔迹。我把硬盘揣进裤兜,把箱子重新塞回床底。吐司吃完了,我拍了拍手上的面包屑,拉开窗帘看了一眼外面。对面那栋老居民楼的窗口亮着七八盏灯,有人在晾衣服,有人把电视声音开得很大,隐约传来综艺节目里的笑声。天已经全黑了,月亮被云遮着,路灯光昏沉沉地铺在小区坑洼的水泥地上。
我穿好外套,钥匙揣进兜,出了门。楼梯间的声控灯坏了一层,我摸着黑下到二楼才亮起来。楼道墙上有人用记号笔写着“收药”“办证”的电话号码,数字歪歪扭扭,被小广告盖了又盖。我走出单元门,冷风灌进领口。十月末的晚上已经凉了,空气里有股烧树叶的焦味。我站了两秒,往小区外面的公交站走。
公交站台只有一个等车的女人,抱着胳膊刷手机,屏幕光映着她的脸。我站在另一头,掏出手机看了一眼。银行短信安静地躺在通知栏里,余额三千八百四十二块七毛。另一条是所里发的工作群通知——消息免打扰,红点还没消——点开一看:“接上级通知,数据资源整合办公室临时工编制全部冻结,即日起不再续签。下周五前完成交接。”发消息的是人事处刘姐,时间显示下午四点十九分。也就是陈敏回来之前,我已经被裁了。或者说,她回来之前就知道了。
公交车来了。我上车刷卡,投币机“滴”一声。末班车,车厢里只有两三个人,后座一个穿工装的大哥歪着头打瞌睡,手机滑到膝盖上也没醒。我坐到倒数第三排靠窗的位置,车晃晃悠悠地开出去,路灯一盏一盏从窗户上滑过去。我攥着裤兜里的硬盘,指尖抵着金属壳边缘的一个小凹痕——那是当年做实验的时候不小心磕的。五年前,我在双一流大学的应用物理所当研究员,手上有三个省级项目,发过两篇SCI一区。后来导师出事,项目停了,我被调去数据资源整合办公室打杂。再后来,编制被砍,我从“准正式”变成“临时工”,工资砍了大半。陈敏嫁给我的时候,我还在读博后,她说她看中我有前途。那时候赵东升还在读硕士,追过她,被她当面拒绝了。现在赵东升是科技公司技术总监,年薪百万,开凯迪拉克,在我的朋友圈下面点赞。陈敏加回他微信是去年的事,我知道。
车到站,我下了车。市里的老科研所大院在两条街后面,铁门锈了大半,牌子换成了“数据资源中心”,但门卫老周还是那个老周。老周隔着窗户看见我,摆了摆手,没问话就把小门打开了。我走进去,穿过那道长长的、灯管坏了一半的走廊,一直走到最里面那间标着“设备间”的房间门口。钥匙拧开,门推开,一股灰尘和臭氧混合的味道扑面而来。屋里堆着十几台淘汰的服务器机柜,贴着报废标签,落了厚厚一层灰。角落里搁着一张旧办公桌,桌面上有台老式台式机,屏幕蒙着灰布。我把灰布掀开,打开主机电源,风扇嗡嗡转起来,噪声很大。我把硬盘接上USB接口,电脑识别了一分钟,弹出文件夹窗口。里面只有一个文件,名字是乱码。我双击打开,屏幕跳出一个黑色的命令行窗口,光标一闪一闪。
我敲了一行指令。
屏幕上缓缓刷出一段代码。那段代码长五十七行,是我当年在导师课题组里私下写的,用的是实验室最高权限的底层架构。我们当时做的是边缘计算的数据加密传输协议,整套系统的核心密钥集成在我这五十七行代码里。导师出事后,所有资料被封存,项目被定性为“涉密清理”,但源代码被我用学校内网的漏洞备份了——就是这块硬盘。这事儿我没跟任何人讲过。陈敏不知道,我同事不知道,连当初跟我一起做项目的老孙都不知道。我留着这东西,起初是为了自保,后来是为了有一天能用得上。
我把代码复制到另一个文档,仔细看了一遍。核心验证逻辑完整,底层通道的授权密钥还在有效期——这是系统自动续期的,只要服务器还在跑,密钥就不过期。而那个服务器,据我所知,现在由赵东升他们公司负责运维。他们三年前中标了智慧城市的数据中台项目,用的底层协议就是当年我们这个课题的延伸版本。也就是说,我手里这五十七行代码,能穿透他现在所有加密层,直接拿到最高权限。但这还没到用的时候。我关掉窗口,拔掉硬盘,把灰布重新盖上。老式主机风扇还在转,嗡嗡的。
手机震了一下。我掏出来看,是陈敏发的微信,只有一行字:“协议我明天送去民政局备案,你带身份证。”后面跟了一个时间:上午十点。我没回,把手机揣回去。我走出设备间,锁好门,沿着那条灯管忽明忽暗的走廊往外走。经过资料室门口的时候,我听见里面有人在说话。门虚掩着,一道光漏出来。我步子顿了一下,听见老孙的声音:“……那个项目早就封了,谁还敢提啊?你忘了当年老林那事儿了?”另一个人说:“可我听赵东升那边说,他们系统最近总提示底层认证异常,怀疑有外挂密钥被激活了。”老孙沉默了几秒:“不可能,原始码早销毁了,就一份备份在老林那个学生手上,那个学生不是早走了吗?”那个人说:“走的那个叫林深吧?现在在整合办当临时工。你见过他吗?”老孙说:“见过。跟原来判若两人,话都不怎么说。你就放心吧,那种人翻不出什么浪。”
我靠在走廊墙上,灯管滋啦闪了一下。走廊尽头那扇窗户开着半扇,冷风灌进来,吹得墙上贴的旧值班表哗啦响。我慢慢直起身,继续往前走,脚步声很轻。出了大院铁门,老周冲我点了下头:“今天走这么晚?”我说:“收拾点东西。”老周没再问,把门带上。我站在马路边等车。这条街上的路灯比小区那边亮一些,照着我外套上蹭的灰。我伸手拍了两下,拍了半天拍不干净。
手机又震了一下。这次是一个陌生号码的短信,没有备注。短信内容就一行:“林工,冒昧打扰,我是巨合科技的HR沈薇。我们注意到您曾在应用物理所参与过‘鹄’计划的底层架构设计,想请您喝杯咖啡,时间地点您定。”下面留了一个手机号。
我盯着屏幕看了五秒钟。路灯的光落在屏幕上,字有点反光。鹄计划。那个项目的代号,当年所有文件上都用这个词代指。我删掉短信,把手机放进兜里,抬头看了看天。云散了一点,月亮露出一小半,白蒙蒙的光打在研究所楼顶那根废弃的避雷针上,像一根细细的银线。
出租车来了。我上车,报了出租屋的地址。车开出去一段,我靠在后座上闭上眼睛。脑子里是陈敏签协议时睫毛动的那一下,是老孙说的那句“翻不出什么浪”,是手机短信里那个陌生的名字。我还有三件事要做。第一,验证密钥的有效性;第二,确认赵东升的系统里是否有我当年的底层漏洞;第三,等一个合适的时机。而那个时机,不会太远。
车停在小区门口的时候,我睁开眼付了钱。上楼,开门,屋里还是走时候那个样子,餐桌上的泡面碗我收拾了,但水槽里那堆碗筷还在。我开灯,换了拖鞋,把硬盘从裤兜里拿出来放进衣柜最上层那个带锁的小抽屉里。抽屉里还有一本旧笔记本,封皮磨白了,里面用圆珠笔画过几张架构图。我把抽屉锁上,钥匙挂在脖子上。
躺在床上关了灯以后,我在黑暗里睁着眼。天花板上有一块水渍,形状像一片干涸的湖。我翻了两次身,手机屏幕突然亮了。是工作群里刘姐发的消息,@了所有人:“下周三下班前,临时工来我办公室交钥匙和门禁卡。”下面跟了一条新消息,是隔壁部门的老吴发的:“刘姐,整合办那个林深也走吗?”刘姐回复:“走。所有人都走。”
我没回,把手机屏幕朝下扣在床头柜上。黑暗中我闭上了眼,嘴角动了一下。走?对,是要走。但走之前,我得先让人知道我是谁。
手机又亮了一次,陌生号码的短信弹出来:“林工,考虑好了随时联系我。我们开出的条件是——您说了算。”
夜风吹得窗框响了一下。我把被子往上拉了一点,翻了个身,压住那串已经开始在脑子里自动运行的代码。
第2章
“林深,你来了。”陈敏站在民政局大厅的取号机旁边,手里捏着那张离婚协议,看见我进门,脸上一点表情都没有。她今天换了件驼色大衣,头发卷过,涂了口红,站在那根不锈钢柱子边上,比昨晚亮眼不少。大厅里人不多,一对夫妻坐在塑料椅上吵架,女的抱着胳膊,男的低头刷手机,空气里飘着打印纸和消毒水的味道。我走到她面前,把身份证掏出来,没说话。
她把协议递过来:“你带笔了吗?昨天那支笔我忘了拿。”我摸了摸外套口袋,没笔。她啧了一声,从包里掏出一支黑色签字笔,盖子拔掉,笔尖抵在协议底部的签名栏旁边:“签吧,签完直接去窗口办。”
我没接笔,看了她一眼:“赵东升没陪你来?”
她脸上的表情僵了不到半秒:“关他什么事?”
“你昨晚住他那儿了。”我说。这话是猜的。但她的睫毛又动了一下,跟我昨晚看到的一样。她把笔拍在协议上,声音不大但很脆:“你别说这些没用的。赶紧签,我下午还有事。”
我拿起笔,在昨天同样的位置又签了一遍。字迹比昨天稍微潦草一点,纸面很干,没有泡面汤的痕迹。签完我把笔盖合上还给她。她接过去,抽出协议下面那张表格,两个人一起去窗口排队。窗口里的工作人员是个年轻女的,看了我们一眼,核对证件,扫描,盖章。整个过程不到十分钟。她把两份协议一人一份装好,递过来的时候目光在我们脸上各停了一秒,没说什么。
我们从民政局出来,台阶下是条窄街,路边的银杏叶子黄了大半,风一吹簌簌往下掉。陈敏站在台阶上把包带往肩上拢了一下,手机响了。她看了一眼屏幕,没接,按掉。屏幕灭下去之前我瞥见了那个名字,三个字,赵东升。她把手机塞进大衣口袋,转头看我:“那我先走了。东西你收拾好了给我发个地址,我周末去拿。”
“行。”我说。
她下了两级台阶,又停住。风吹过来,她大衣领子翻起来一点,她伸手按住。侧着脸,没看我:“林深,其实你人挺好的。就是——”她顿了一下,嘴唇抿了抿,“算了。你以后好好过吧。”
她走了。沿着银杏树往街口走,驼色大衣在落叶里很显眼。走远了,从包里掏出手机贴在耳朵上,大概是回拨了赵东升的电话。我看着她拐过街角,才从台阶上下来。风灌进领口,我把外套拉链拉到头,站了两秒,朝反方向走。手机震了一下,消息是巨合科技那个HR发的:“林工,今天下午方便吗?我们在市中心有家合作的咖啡店,如果您不介意的话。”下面附了个地址。
我没回,把手机收起来,先去了趟银行。柜台把最后三千八百块钱取出来,柜台后面的小姑娘数了两遍递给我,窗口里空调开得很足,她袖口别着朵小花。我把钱揣进内袋,出门左转,地铁坐四站,到了老所大院。门卫老周正在吃午饭,饭盒盖开着,是白菜炖粉条。看见我,筷子顿了顿:“小林子,你今天不是该办交接了?”
“先回来拿点私人物品。”我说,刷了门禁卡。他看了我一眼,没追问。
走廊里很安静,大中午的,人都去食堂了。我走到整合办公室门口,门锁着,钥匙还没交,拧开进去。屋里六张工位空了四张,剩两张桌面上还堆着纸箱。我的工位在最里面靠窗,桌上只有一台显示器、一个杯子、一摞旧档案。我坐下来,打开显示器,桌面空白,什么文件都没了。我拉开抽屉,里面有本旧通讯录、两支圆珠笔、一盒回形针。通讯录翻开,最后一页记着一个名字和号码——孙建国,就一行,大学电话,早停用了。
我合上通讯录,揣进口袋。走出去,锁门,在走廊里迎面碰上了老孙。他端着搪瓷缸子,正从食堂方向过来,看见我步子慢了半拍:“哟,小林。”他脸上堆出笑,两颊的肉挤了一下,“来办交接?东西都收拾好了?”
“差不多了。”我说。
他站住,搪瓷缸里的茶水晃了晃:“那个……后续工作有啥打算?要不要我帮你打听打听?外面有些公司还缺人。”他说这话的时候眼睛往旁边飘了一下,缸子端到嘴边抿了一口。
我说:“不用,孙老师,我自己找。”
他听见“孙老师”三个字,眼皮跳了一下。当年我带他跑实验的时候他也叫我“林老师”,后来出事了,就变成“小林”了。他点了点头:“那行,那行。有事说话。”端着缸子走了。我站在原地,看着他背影像个慢慢胀起来的气球,往资料室方向去了。
我出了大院,掏出手机,回了巨合HR那条短信:“下午两点,可以。”对方秒回:“太好了,那下午见。地址不变。沈薇。”
市中心那家咖啡店开在写字楼底商,玻璃门面,招牌是洋文,门口摆了几盆琴叶榕。我推门进去,冷气扑脸。下午一点五十,店里人不多,靠里面的卡座上坐着一个三十岁左右的女人,白衬衫,深灰色西装外套,面前摆着一台笔记本和一杯美式。她看见我,站起来招了招手:“林工?这边。”声音不高,干净利落。我走过去坐下,她把笔记本往旁边挪了挪:“喝什么?我请。”
“柠檬水就行。”我说。
她笑了笑,让服务员端了杯水过来。然后她坐下来,双手交叠搁在桌上,不绕弯子:“林工,我直接说。我们公司最近接了一个政府项目,底层架构用的是‘鹄’计划的延伸版本。但最近系统频繁报错,核心验证层出了漏洞。我们找遍了所有公开的文献和源码记录,都没找到原版架构的完整密钥逻辑。”她看着我,眼睛很亮,“后来我查到,当年参与这个底层设计的人里,有一个是您。而且您写的那部分,没有进入任何官方存档。”
我端起水杯喝了一口,柠檬片浮在水面上,酸味很淡。
“你怎么知道是我写的?”我问。
她靠在椅背上:“孙建国老师提过一句,说当年有个学生私下写了模块衔接的底层代码,但没归档。后来人走了,东西也带走了。我又找人查了当年的课题组成员名单,剩下的人里,符合时间、专业方向、和孙老师描述特征的,只有一个——您。”
“孙老师知道你们在查这个?”
她笑了:“他不知道。是我从别人那儿辗转听来的。林工,您放心,我是带着诚意来的。”她把笔记本转过来,屏幕上开着一个文档,上面列了一份条件清单,“薪资、股权、项目主导权,都在上面。您开价。”
我扫了一眼屏幕,没细看。我放下杯子:“系统报错是什么时候开始的?”
“上个月中旬。频次不高,但核心认证接口出现过三次超时。”她说,“运维那边查了半个月,查不出原因。我们怀疑是密钥续期导致的底层通道握手机制不对,但原始文件缺失,没法对。”她顿了顿,看着我的眼睛,“林工,坦率说,这个东西如果我们解决不了,整个项目可能会被叫停。投资几千万,全卡在这儿了。”
我指腹抵着杯壁的弧度,沉默了几秒:“我需要看一下你们现在的架构拓扑图和接口日志。看完再说条件。”
“可以。”她答得很快,从包里掏出一个牛皮纸信封,推到桌面上,“这里面是部分脱敏资料。您看完之后如果愿意来,随时联系我。如果您有其他条件——”她顿了一下,“您说了算。”
我接过信封,没拆,放进外套内袋。她看了眼时间,站起来伸出手:“那就先这样,林工。我下午还有个会,先走一步。随时联系。”她的手干燥、有力,握了一下松开。她拿起笔记本和包,走了几步,回头又加了一句:“对了,赵东升也在我们合作方的名单里。他是运维团队的对接人。不过这些都不影响您,您来了之后单独带队,不用跟他碰。”
我点了点头。她推门出去了,风铃响了一声。我坐在卡座里,把柠檬水喝完。手机搁在桌上,屏幕亮了,是陈敏发的一条新微信。点开看,是一张照片,镜头里一只男人的手搭在餐桌边沿,手腕上戴着一块劳力士绿盘,桌上有两杯红酒,背景是家西餐厅的暖黄灯光。下面跟了一行字:“晚饭。赵总请的。”
我没回。把手机翻过去扣在桌上,从信封里抽出那几张脱敏的架构图,摊开在桌面上一张一张看。纸面上的线条、节点、接口标识,跟我五年前写的那套逻辑九成重合。唯一不同的地方是,他们把第三层的加密算法替换成了商用版本,但底层的通道握手协议没改。也就是说,我那段五十七行代码如果现在插进去,整个系统的权限控制会彻底开放,连警报都不会响。他们加了新的防火墙,但地基没换。
我折好图纸塞回信封,起身出门。外面天色阴了,云压得很低,风里开始带水汽。我站在咖啡店门口的台阶上,掏出手机,把巨合HR的短信又翻出来看了一遍。最后那句“您说了算”我盯了两秒,没回。我把手机装回兜里,往地铁站走。走到一半,手机震动。这回是赵东升发的短信——他的号码我存过,备注还是“赵东升”,从没改过。短信内容很短:“林深,听说你今天签了。挺好的,早点翻篇吧。对了,陈敏后面的事你别操心了,她跟我提了,我安排。”
我站在人行道边,红灯亮了。斑马线对面一群人等着过马路,有人拎着菜,有人推着婴儿车。我看了那条短信三遍,把手机锁屏,绿灯亮了,我跟着人流过了马路。风里那股水汽更重了,天气预报说今晚有雨。走到地铁口的时候,我回了赵东升一条消息,只有两个字:“好的。”
电梯往下,信号断了。手机屏幕暗下去之前,我看见微信通知栏里弹出一条新消息,是巨合HR沈薇发的:“林工,忘了说,这周末有个内部技术交流会,来的都是当年‘鹄’计划的老同事。您如果有兴趣,我可以安排您来旁听。其中有一个人,您可能想见见——他姓方。”
电梯到了站台,门打开。我站在月台边上等车,隧道里的风灌上来,把外套下摆吹得卷起来。我把手机收好,手指在口袋里攥了一下那个牛皮纸信封的边角。
姓方。方明远。当年导师出事之后第一个跟项目划清界限的人。也是第一个在内部会议上说“那个学生的代码可能有安全隐患”的人。那次会议之后,我的课题被停了,档案被抽走,编制被降。后来他去了哪,没人提过。有人说他去了高校,有人说他转了行政,谁也不知道他到底在哪儿。
车来了。车门打开,里面人不多,我找了个角落站着,手扶着不锈钢横杆。车厢晃了一下,我闭上眼睛。脑海里那张架构图还在转,接口节点像星图一样亮着。赵东升的系统、巨合的项目、方明远的出现,三件事连上了。但还差一环。第五十七行代码的最后一段,我当年写完后打了个备注——那行备注写的是一串坐标和日期。我一直没弄明白那是什么,直到刚才在咖啡店里看见架构图第三层的某个接口标记,跟那串坐标对上了。
那是一个物理地址。在市郊。我以前去过的地方。
车到站,我睁开眼下了车。站台广播说前方有雨,提醒乘客注意安全。我走出站口的时候,雨已经落下来了,不大,细细密密的,把路灯的光晕成一团一团黄蒙蒙的雾。我站在站口屋檐底下,雨丝飘到脸上,凉丝丝的。手机又震了。这回是工作群刘姐发的:“临时工交钥匙的最后期限改到今天下午五点了,没交的明天不用来了。”
我看了眼时间,四点四十一。雨还在下。我把外套帽子拉起来,走进雨里。钥匙在口袋里硌着腿,冰凉的。我往研究所的方向走,步子不紧不慢。雨打在帽子上沙沙响,街边的银杏叶被雨打落了一层,铺在人行道上,踩上去软绵绵的。
走到大院门口的时候,老周在门卫室隔着窗户喊了我一声:“小林,你钥匙还没交呢?五点了啊。”
我隔着雨看了他一眼,从口袋里掏出钥匙串,走到窗口递进去。老周接了,在登记本上划了一笔:“好了,签个字。”我弯腰在湿漉漉的登记本上签了名,笔尖洇开一小团墨水。老周把本子收回去:“以后常来啊。”我笑了笑,没说话,转身走了。
雨更大了一点。我走在回去的路上,手机在口袋里轻轻震了一下,又一下。我没看。我知道是什么。赵东升的系统,从现在开始,每多运行一秒,就会多一条底层报错。而那条报错的根源,全世界只有我一个人能修。
街灯亮了。雨幕里万家灯火,我路过一家亮着暖光的包子铺,蒸笼冒着白气,老板娘在柜台上点钱。我走过去了,没回头。
第3章
“林深,那个姓方的说他想见见你。这周末,老地方。”老孙的声音从电话那头传过来,背景音里有人翻纸的簌簌声。我站在出租屋的阳台上,雨已经小了,顺着檐角往下滴,一滴一滴砸在空调外机的铁壳上,嗒嗒响。我左手举着手机,右手捏着那几张脱敏架构图,图纸边角被雨雾洇湿了一小片。
“哪个老地方?”
老孙沉默了两秒:“就咱们以前跑实验那边,市郊那个站。你还记得吧?有个废弃的测试站,当年你们组用过。”他声音压低了,“方明远说他在那儿等你,后天下午三点。他说你看了那些图,就该明白。”
我捏着图纸的手指收紧了一点。废弃测试站,那个坐标。原来那行备注指的是那里。
“你怎么知道他有我的电话?”
“你别管我怎么知道的,”老孙语气有点急,“小林,有些事比你想象的大。方明远这人你是知道的,他不随便见人。他既然开口了,你就去一趟。你手里那些东西——”他顿了一下,“你也别藏着掖着了,该拿出来的时候别犹豫。”
他把电话挂了。我盯着屏幕看了几秒,通话记录里那个陌生号码备注是“孙老师办公室”,短号,所里的内线。他已经不在这个号码上找我了,说明他急了。
我从阳台走回屋里,把图纸摊在餐桌上。窗外雨声小下去,只剩水珠子偶尔啪嗒一声打在玻璃上。我拉开衣柜上层带锁的抽屉,把那块移动硬盘拿出来,插上笔记本。五十七行代码在屏幕上重新铺开,光标停在最后一行备注上。那串坐标我查过,就是老城区东南方向二十公里外的一片工业区,地图上标注的是“原电子设备测试场”——早废弃了,周边都是拆迁废墟。但备注下面还有一行小字,是我当年用十六进制写的,翻译过来是四个字:通道备用。
什么意思?我当年写这段代码的时候,脑子里到底在想什么?我闭上眼努力回忆。实验室那年的天花板是白色铝扣板,灯光冷白,一排排机柜嗡嗡响。我记得我写了五十七行,中间第七行到第十二行是主验证逻辑,第十八行到第三十一行是数据封装,后面十四行是接口桥接,最后四行是密钥续期。这五十七行我自己闭着眼都能背出来。但那个坐标和“通道备用”四个字,我记不清什么时候写的了。可能是最后一天——导师出事的前一晚,我在实验室待到凌晨三点,所有人都走了,只剩我一个人。我敲完最后几行,打了个备注,合上电脑,第二天就再也没回去过。
桌子上的手机亮了。是沈薇发的微信:“林工,我听说周末有人约您去测试站?方便的话,我这边可以派车送您。”
我盯着这条消息看了五秒钟。她知道得太快了。老孙刚打完电话不到十五分钟,她就知道了。这说明要么老孙那边的消息被截了,要么——方明远跟巨合的人有联系。
我没回她的消息,把笔记本合上,硬盘拔下来锁回抽屉里。钥匙挂在脖子上,硌着锁骨,凉凉的。我坐在餐桌前,天花板那盏灯又闪了两下,光线忽明忽暗。厨房里那堆碗还泡着,水已经凉了,油花凝在表面。我站起来开了水龙头把碗洗了,洗洁精的泡沫冲下去的时候,水槽底露出一个白瓷碗底,上面有一道细裂纹——我搬进来那年就有的,一直没换。
洗完碗我坐在沙发上,打开手机看巨合那几张图纸的电子版。第三层的接口标记我放大看了三遍,那个接口编号是“HK-07”,对应备用通道的入口。如果我把那四行密钥续期代码接入,整个备用通道就会激活,而这条通道在官方拓扑图上是不存在的。也就是说,只要我不主动激活,没有人知道这个入口。但一旦激活,权限会全部倒向我的终端。
这是一个后门。五年前我给自己留的后门。那时候我为什么要留这个?我仔细想,想起来了。那年项目组里有个外聘的顾问,姓汪,总是半夜改系统配置。我跟他吵过两次,觉得他在架构里埋了私货。后来导师说我想多了,让我别乱猜。但我还是留了一手,把底层验证的备用通道单独写了一份代码挂在了自己名下,没有入档。再后来导师出事,汪顾问消失了,项目被查封。那个通道就此沉默。
那个姓汪的顾问,全名汪志诚。我在网上搜过,查无此人。但他当年在项目组里的职位是“系统安全顾问”,权限比我们研究员都高。他动过的东西,不止底层配置。那些被抽走的档案里有一部分就是他经手的。
我关了手机屏幕,坐在黑暗里。窗外的雨彻底停了,对面楼的灯一盏一盏灭掉,夜很深了。我把外套穿上,出了门。电梯坏了,走楼梯下去,声控灯亮了一截又灭了一截。小区的路上还有积水,踩上去溅起细碎的水花。我走到小区外面的小卖部,买了一包烟。我不抽烟,但口袋里得装着,有时候在露天场合站着,手里没东西会显得奇怪。老板娘看了我一眼:“今天这么晚?”我说:“嗯,睡不着。”
我站在小卖部门口,撕开烟盒抽了一支叼在嘴里没点。风凉飕飕的,吹得烟纸沙沙响。远处高架桥上有车开过,灯带像一条流动的细线。我想了想周末去测试站的事。方明远为什么约在那儿?那儿应该早就被清空了,设备都搬走了,只剩一间空壳子。他选那个地方,要么是那个位置有什么我没发现的东西,要么——他不想让别人知道这次见面。
第二天早上,我醒来的时候阳光从窗帘缝里挤进来,一道长条形的亮光横在床上。手机里新消息堆了一串。陈敏发了一条:“周末我搬东西,你别在家。”赵东升发了一条:“听说你要去巨合?沈薇那人不好对付,你小心点。”沈薇发了一条:“林工,车我派好了,周六上午九点在你小区门口。黑色途观,尾号736。”
我没回任何一条。刷牙洗脸,煮了包挂面,卧了个鸡蛋。吃着面的时候手机响了,这回是座机号,我没存。接起来,对面是个男声,低沉,有点哑:“林深?我是方明远。”
我筷子停了一下:“方老师。”
“不用叫老师了。周六下午三点,测试站。你来就行,不用带别人。”他语速不快,每个字都像是想好了才说的,“我知道你手上有东西,我也知道你查了汪志诚。来,我告诉你你想知道的。”
“你知道我想知道什么?”
他笑了,声音很轻:“你想知道为什么你导师会出事。你想知道为什么你的项目停了。你更想知道——”他顿了一拍,“那五十七行代码第三十二行之后,为什么你记不全了。”
我放下筷子,碗里的面条在汤里慢慢泡软。“第三十二行之后我背得出来。”
“你背的是你写的版本。但被改过的版本,你见过吗?”他说完这句话停顿了几秒,“周六见。”电话挂了。
我握着手机坐了很久。面坨了,汤凉了,筷子搁在碗沿上没动。第三十二行之后被改过?我昨晚还背了一遍,第三十三行是数据封装的校验头,第三十四行是接口映射表,第三十五行是——我闭上眼默念了一遍,三十五到五十七,每行代码的排列顺序在我脑子里清晰得跟打印出来一样。如果被改过,改的是什么?谁改的?什么时候改的?
我把碗洗了,擦了桌子,换好衣服出门。今天要去把出租屋的水电燃气结清,房东那边押金还得退。路上阳光很好,雨后空气干净,银杏叶落了满地,环卫工人在扫,扫帚摩擦地面发出沙沙的声音。我去物业把水电卡结了,单子打出来,总共欠了四十六块三毛。物业大姐把收据递给我:“租期到月底,你提前搬是吧?房东说押金扣两百,墙面有污渍。”我说行。两百就两百,我不想吵了。
从物业出来,我站在小区花坛边上,给沈薇回了一条:“周六我自己过去,不用车。”发完我把手机揣兜里,走了两步,又掏出来,给陈敏发了一条:“周六我不在家,你来拿东西吧。钥匙放门口地垫底下。”她回了个“好”,再没多一个字。我盯着那个“好”字看了两秒,屏幕暗了。
周五晚上,我把屋里最后几件东西收拾进一只帆布包里。旧衣服、硬盘、笔记本、老通讯录、几张图纸。抽屉里那本磨白封皮的笔记本也装进去了,路上翻的时候才发现里面夹着一片旧门禁卡——当年测试站的门禁卡,塑料壳发黄,贴纸上用黑笔写着“T-03”。测试站三号实验室。我把它翻过来,背面贴着一小片蓝色胶带,下面用圆珠笔写着几个数字,是门锁的密码。六个数字,我还记得。那年组里所有人用的都是统一发的密码,但后来系统换了,密码撤了,不知道这个老锁换了没有。
周六早上,天灰蒙蒙的,雾霾不重,但太阳被云遮着,光线很平。我背着帆布包出门,坐地铁转公交再转一辆三轮摩的,花了将近一个半小时才到那片工业区。摩的师傅把我放在路口:“小伙子,里面没啥了,都是空房子。”我说:“我知道,找人。”
我沿着一排废弃的厂房往深处走。铁皮屋顶生锈了,有的已经塌了一半,地上长满了荒草,秋天了草枯了,踩上去嚓嚓响。那条水泥路裂了缝,缝里挤出野菊,黄色的花缩成一小团。走到尽头是一栋三层灰色小楼,窗户都用木板钉死了,大门是铁皮门,上面刷的红漆褪成了粉色。门边有个刷卡器,已经黑了屏,电源早断了。我把那张旧门禁卡贴上去,没反应。
我绕到侧面,有一扇小门。门把手锈得厉害,我拧了两下拧不动。我用膝盖顶了一下,门框发出吱呀一声,从外往里开了。里面黑洞洞的,一股霉味和尘土味扑出来。我掏出手机打开手电筒,光柱扫进去。一条走廊,地面是水磨石的,落了厚厚一层灰,墙上的白漆剥落了大半,露出底下灰水泥。走廊尽头有扇门半开着,透出一线亮光。
我走进去。脚步声在空荡荡的走廊里被放大了,每一步都带着回响。走到那扇门前,我伸手推开。里面是一个大概三十平米的房间,靠窗有张旧铁桌,桌上摆着一盏充电台灯,亮着白光。方明远坐在桌子后面,穿着件灰夹克,头发白了,比五年前老了至少十岁。他面前摆着一台老式笔记本,屏幕亮着,显示着一行行代码。
他看见我进来,站起来。椅子腿在地面上刮了一下,刺耳的吱嘎声。
“坐。”他说,下巴朝对面那张塑料凳点了点。我坐下来,把帆布包搁在脚边。台灯的光打在桌面上,照出笔记本屏幕上的代码。我一眼就认出来了——那是我写的第五十七行代码,但从第三十三行开始,内容全变了。数据封装头的参数被改过,接口映射表的地址改了三位,密钥续期的周期从四十八小时改成了六小时。
“谁改的?”我问。
方明远坐回去,两只手交叠搁在桌上,手指关节粗大。他看着我的眼睛:“汪志诚。你导师出事的第二天晚上,他来所里,从主机里调出了原始文件,改了三十三到五十七行。改完之后他留了一句话——你记不记得那个备注后面,你写的那个坐标?”
“记得。就是这里。”
“对。”他伸手敲了敲桌面,“他改完代码之后把原始版本拷走了,你那份留在硬盘里的他删不掉,因为你用的是内网漏洞备份,他那时候权限不够。但他改了系统里存的那份官方版本。你导师的‘涉密清理’就是基于这份被改过的代码做的定性。”
我手指攥着帆布包的带子,指节发白。“我导师根本不知道代码被改了。”
“他不知道。”方明远说,“他以为是你写的版本出了问题。上面来人查的时候,系统里跑的是汪志诚改过的版本,漏洞百出,数据验证通不过。你导师扛了全部责任。项目被停,他被免职,档案封存。他自己到死都不知道原因。”
“汪志诚为什么这么做?”
方明远靠在椅背上,台灯光把他的下巴阴影拉得很长:“因为那个备用通道。你写的那个通道,通往的不是系统内部,而是外网的一个定向节点。那个节点当年是用来接入第三方数据源的——你知道那时候跟你们合作的外部公司是哪家吗?”
我脑子里闪过一个名字:“巨合?”
“对。巨合的前身。他们在那条通道上挂了自己的数据采集端,只要你导师的项目上线,他们就能通过备用通道实时获取全部底层数据。这是商业间谍行为。汪志诚是他们的人。你导师出事后,那个通道被你们项目组封存了,但源代码里的通道入口还存在——就是你留下的那四行密钥续期代码。”他看着我说,“你当年无意中写了一个后门,他们想改掉它,但你备份的那一份是原始版。只要原始版还在,通道就能重新激活。”
房间里安静了好几秒。台灯发出一阵微弱的电流声。
“所以,”我开口,声音比自己预想的要平静,“他们找我,是因为那条通道只有我能激活。”
方明远点头:“巨合现在的项目接的是政府中台,如果他们能通过那个通道拿到数据,整个项目的商业价值会翻倍。赵东升的运维团队解决不了底层报错,因为他们用的版本是汪志诚改过的,先天缺陷。唯一能把通道接回正确路径的,是你。”
“那你呢?你为什么在这儿?”我看着他。
他沉默了很久。台灯的光在他眼窝里投出两团黑影。“因为你导师是我朋友。”他说,“他出事那天晚上给我打过电话。他说代码可能有问题,他要去查。第二天他就被带走了,再也没回来。我花了五年查这件事。汪志诚三年前出车祸死了,但我找到了他留的加密备份——就是你那五十七行代码的修改记录和日志。巨合的人不知道我手里有这些东西。”他顿了顿,声音低下去,“他们以为我是来劝你合作的。我不是。我是来告诉你真相,然后让你自己选。”
他把笔记本转向我。屏幕上除了被改过的代码,还有一个文件夹。文件夹名字是四个字:通道原点。点开,里面是一份日志文件,从五年前到今天,每隔三个月更新一次。最后一条更新记录的时间是三天前,IP地址显示来自巨合科技内部。
有人还在用这个通道。在我不知情的情况下,有人一直在试图激活它。
方明远看着我的表情,淡淡说了一句:“你以为你什么都不知道地过了五年。但那条通道,有人一直在等它亮起来。”他把笔记本合上,屏幕灭了。房间里只剩那盏台灯的冷白光,照着我们中间那张桌面上厚厚一层灰。
我站起身。帆布包背起来,带子勒进肩膀里。我看了方明远一眼:“那个文件夹,能拷贝给我吗?”
他点头,从口袋里掏出一个U盘,推过桌面。我接了,揣进内袋。
“周六晚上,这个地址会被他们的监控扫到一次,”方明远站起来,椅子又刮了一次地面,“然后就会有人来找你。你准备好了吗?”
我走到门口,侧头看了他一眼。风从走廊那头灌进来,带着荒草和铁锈的气味。“我准备了五年。”我说。
我推开门走出去。走廊里暗得几乎看不见路,我顺着来时的方向摸到小门,推开,外面阴天,光线比屋里亮不了多少。我站在废弃厂房前面的水泥地上,掏出手机。屏幕上一共有三条未读消息:沈薇的“林工,考虑得怎么样了”,赵东升的“听说你今天出去了”,还有一条来自陌生号码的,只有一行字:“通道激活了。你感觉到了吗?”
我盯着最后那条短信,风把荒草吹得哗哗响。我把手机锁屏,手指下意识摸了一下胸口——钥匙挂着的那条细链下面,硬盘还在。我转身朝工业区外面走去,步子越来越快。荒草擦过裤腿,灰尘扬起来,在灰色的光里打着旋。
U盘在口袋里,烫得像一颗火炭。
第4章
方明远给的U盘插进电脑的时候,手指有点僵。外面天已经黑了,出租屋的灯亮着那盏坏了一颗灯泡的老吸顶灯,光还是昏黄昏黄的,照得屏幕上的字边缘发虚。我坐在餐桌前,笔记本开了,桌面只有那个U盘的图标,文件夹名字是“通道原点”,点开里面是那份日志。文件名按日期排,最早的标记是五年前的九月,最后一条更新记录是三天前。我双击打开,Excel表格铺满了屏幕,每一行记录着连接时间、IP地址、操作类型、结果状态。
我一条一条看。头半年记录很少,每个月一到两次,状态全是“验证失败”——应该是汪志诚在试。他那时候刚改完代码,在测通道能不能从外部激活,但他手上没有我那四行密钥续期的原始版,所以进不去。后来记录频率降了,变成每季度一次,状态从“验证失败”变成了“握手超时”,说明有人换了方法,在用协议层面硬猜。再后来记录停了将近一年,然后从去年年中开始又活跃起来,IP地址换了,操作类型从“外部探测”变成了“内部调用”。
内部调用。也就是说,有人在系统内部直接执行了通道激活指令,不需要从外部破门。这比我想象的严重。外部探测顶多是有人在翻墙,内部调用说明执行者手里有系统管理员权限,能在服务器上直接跑命令。我盯着那个IP地址看了一会儿,是一段内网地址,格式跟赵东升他们公司运维部门的网段对得上。但也不一定,巨合内部还有其他合作方,方明远说的“有人一直在等它亮起来”范围太宽了。
我继续往下拉表格。拉到去年年底那条记录的时候,手指停了。那一行末尾的“备注”栏里有一行小字,字体颜色是深蓝,跟其他行不一样。内容是:“HK-07节点心跳异常,疑似底层密钥续期痕迹。该密钥原始签名指纹匹配L.S.。”L.S.。林深。
有人检测到了我那段代码的签名指纹。谁?什么时候?我翻回去看这条记录的时间戳,去年十二月十七号凌晨两点四十七分。那时候我在干什么?我想了想,那段时间整合办在催年底总结,我熬了两个晚上写报告,凌晨两点多应该还在工位上对着显示器发呆。我的硬盘那时候在家里的抽屉里锁着,没有通电,也没有插网线。密钥续期痕迹是怎么被捕捉到的?
除非——我那段代码本身有个自动发送的心跳信号。我当年写的时候没想过这茬,因为代码没入过网,理论上不会触发任何信号。但如果方明远说的是真的,汪志诚把那四行密钥续期代码里的某个参数改过,改完之后留在系统里的版本虽然不完整,但碎片信息包含了我的签名指纹,系统会把任何匹配的密钥特征都记录下来。也就是说,只要我这台笔记本连上网络,那块移动硬盘插在电脑上,系统就能感应到我的密钥特征码。
我后背有点发凉。我转头看了一眼桌上的硬盘,黑色外壳搁在笔记本旁边,接口线还连着。我伸手把硬盘拔了,动作很轻。屏幕上的表格没动,但我盯着那条“HK-07节点心跳异常”的记录,脑子里翻过好几个念头。如果我的密钥特征码已经被系统记住了,那我只要重新激活通道,系统就会立刻报警。赵东升那边会第一个收到通知,因为他负责运维。然后巨合的人也会知道。
我往下拉到最后一条记录,三天前。那一行的IP地址显示来自一个公网地址,不在巨合和赵东升网段内。操作类型写的是“通道唤醒尝试”。状态是“端口响应,权限不足”。备注栏是空白。我复制了那个公网地址,打开浏览器输入查询工具,结果显示归属地是本市,运营商是宽带商,没有更具体的定位信息。但这个地址如果是在三天前访问的,位置就在这座城市某个角落。有人用家用宽带尝试唤醒通道,而且系统端口有响应,说明他手里至少有通道入口的正确地址和端口号。
我关掉浏览器,把表格从头又翻了一遍。整个日志一共一百零七条记录,我把每条记录的IP地址标了颜色,分了三类:外部探测类、内部调用类、未知地址类。分类以后,屏幕上出现三块分布。最多的内部调用集中在赵东升公司网段,最多的外部探测集中在早期汪志诚的时期,未知地址类的记录一共只有三条——一条是去年的心跳异常,一条是三个月前的端口扫描,一条是三天前的唤醒尝试。
这三条未知地址的登录方式用的全部是同一个工具签名。我认得那个工具。当年我们实验室内部用的一个底层调试器,叫“锤子”,只有课题组内部的人下载过。这个工具从来没公开过,也没有任何文档流传出去。知道它的人只有当年课题组的七个人——我、导师、方明远、孙建国、汪志诚,还有两个已经转行的师兄。谁在用这把“锤子”敲我的通道?
我把电脑合上了,靠在椅背上。天花板上那块水渍在黑下来的房间里显得更深。我盯着它看了很久,脑子里那些人的脸轮着过了一遍。导师出事之后,我见过他一次,在拘留所,隔着玻璃。他没怎么说话,只问了我一句:“你写的代码,你自己看过吗?”我当时说有,每一行都看过。他没再问,目光里有一种我说不清的东西。后来他被免职,精神垮了,半年后病逝。消息是老孙转告我的,我当时在出租屋里煮饺子,听完电话饺子煮烂了,一锅面汤。
如果导师那时候问我那句话,是他已经知道代码被动了。他是在提醒我回去再看一遍。但我当时没听出来。我以为他是在责怪我。
我坐直身体,重新打开电脑。这次我没点日志,打开了那个移动硬盘里的原始代码文件,从第三十三行开始逐字逐句地看。被改过的那段内容方明远的屏幕上我看了一遍,但那是修改后的版本。我要确认的是——第三十三行之后,我原始版本里有没有我忽略的细节。光标在第三十七行停下。这行代码我背过无数遍,但今天再读,我发现了一个括号后面的分号。分号前面有个空格,空格后面多了一个逗号。这个逗号在C语言语法里没有任何意义,只是个冗余字符,编译器会跳过。但我当年写代码的习惯是严谨的,不可能平白无故多一个逗号。
我把那个逗号删了,重新读了一遍上下文。删掉之后,这行代码的语义没有任何变化。但紧接着第三十八行的接口调用参数里,有一个变量名变了——原本是“sec_key”,删完逗号之后重新编译,变量名变成“sec_key_alt”。这个变量名本来被那个多余逗号隔断了,编译的时候被视作两个不同的东西,所以从来没有在运行时真正激活过。也就是说,我一直以为我写的这段代码是完整的,但其实我自己在原始版本里埋了一个开关。多余逗号是开关的锁。删掉逗号,开关打开。而那个变量名“sec_key_alt”指向的,是一个从未被触发过的隐藏功能。
我盯着屏幕上的那行变量名,手有点麻。这个逗号,是我什么时候写的?我甚至记不清了。可能是熬夜熬到凌晨的时候随手敲的,也可能——是故意的。那时候我在怀疑那个姓汪的顾问,我怀疑他在改系统配置,所以我给自己留了一条后路,同时在这个后路外面加了一个我自己都忘了的锁。我用一个看起来像笔误的符号,挡住了整条备用通道的真正入口。
笔记本屏幕的光映在脸上,我听见自己的呼吸声。外面有人在放烟花,砰的一声,在远处炸开,不知道是什么节日。我坐了几分钟,把移动硬盘拔下来重新锁进抽屉,电脑合上,U盘拔出来揣进口袋。站起来的时候腿有点发麻,我扶着桌沿站了一会儿。
手机亮了。沈薇的消息:“林工,今天下午的会你来了吗?方老师在等你。”
方明远?他今天下午去了巨合?他不是说那个文件夹里的东西他花了五年才查到,巨合不知道他手里有这些吗?
我又看了一眼消息的时间,下午三点十二分。现在是晚上七点四十一分。四个半小时前的消息,我没看到。那时候我正坐公交从郊外回来,手机在包里震动过,我没看。我点开沈薇的头像,对话框里她发的上一条是周六派车那条,我没回。再往上翻,她之前说“方老师”的时候我就该注意了——她提到方明远的语气,像是认识他很久。
我拨了方明远的电话。响了三声,接通了,但那边没说话。背景音里有敲键盘的声音,很轻。
“方老师?”我说。
那边沉默了三秒。“林深。”他的声音跟下午在测试站里一样低,但多了一点我不确定的东西,“你今天下午没来。沈薇问了我三次你在哪。”
“你在巨合?”
“我在巨合的会议室里。你那个U盘里的东西,她在看了。”他的语速比下午快了一点,“她让我给你打电话,说如果你愿意来,明天签合同,条件翻倍。”
我握着手机的手收紧了一寸:“你告诉她的?”
“我需要告诉你一件事。”方明远的声音压得更低了,几乎像从喉咙缝里挤出来的,“日志里第三条未知地址的记录——三天前那个唤醒尝试——不是别人。是我。我在测试站里用你的旧电脑试过一次。”
电话里安静了两秒。键盘声停了。
“你试它做什么?”
“因为我得确认那个通道还活着。”他说,“我确认了。然后我跟沈薇说了。林深,你听我说,我没有退路了。汪志诚的东西我查了五年,如果不把它交出去,它就会烂在我手里。我今天下午跟她做了一笔交换——我给她看日志和测试结果,她保证不追究你在巨合系统里留后门的事。”
我慢慢坐回椅子上,椅面冰凉。“那你下午为什么在测试站跟我说那些话?你说你是来告诉我真相,让我自己选。”
“我是让你选。”他的声音平静下来,“但我没说我等得起。”
我挂了电话,把手机搁在桌面上。指尖按着手机的金属边框,冰凉。方明远骗了我一部分,但不是全部。他确实查了五年,也确实找到了真相,但他选择在查到一半的时候拿这个真相跟巨合做交易。而我在测试站里从他手上拿到的U盘,那个文件夹,里面的内容他早就备份过,所以交出去对他的损失不大。
我深吸一口气。桌面上那盏灯又闪了一下,这次闪完彻底灭了。房间里只剩笔记本屏幕的亮光,照出餐桌周围模糊的轮廓。我没急着去修灯,就在黑暗里坐着。脑子里在翻一个念头——方明远把U盘给我,不管他出于什么原因,我手里现在有一条完整的路径。原始代码、隐藏开关、日志记录、IP地址、通道入口。这些东西加在一起,足够做一件事。
手机又响了。这次是赵东升。我接起来,他的声音从那头传来,背景里放着轻音乐,像餐馆里那种背景音:“林深,我听说你今天去郊外了。你知道那片工业区有摄像头吧?虽然老,但门口那个还在转。”
我没说话。
“我不管你见了谁,”他的语气不紧不慢,像在说一件跟自己无关的事,“但陈敏的行李我今天下午帮她搬完了,她住我这儿了。咱们算是两清了。你那边要是有什么麻烦,别牵扯到我这儿来。我公司还指着你那个通道呢,不骗你,巨合那边压力很大,你要是能帮我把底层报错修了,我这边还可以给你一笔钱。三五十万,你开个数。”
“你公司的系统报错,修不了。”我说,“除非换底层协议。”
他顿了一下:“什么意思?”
“你用的版本是被改过的,核心验证层先天缺陷。哪个运维都修不好。唯一能修的人是我,但我为什么要修?”
电话那头沉默了几秒,音乐声还在响,有人在远处笑。“林深,”赵东升的声音变了,不再那么轻飘飘了,“你别逼我。”
“逼你什么?”我反问。
他没回答,挂了。
我靠在椅背上,把手机放在桌上,屏幕朝上。黑暗里那一点亮光映着天花板,水渍的形状在微弱的光线里像一只张开的手掌。我站起来,走到窗边,把窗帘拉开一条缝。对面楼灯火稀疏,小区路上有人遛狗,狗绳上的小灯一闪一闪。那家包子铺还亮着,蒸笼的白气在灯光下袅袅上升。
我回到桌前,重新打开笔记本,插上移动硬盘,调出原始代码。光标停在第三十七行那个多余的逗号前面。我盯着屏幕看了很久,手指悬在键盘上方。删除键只要按一下,那条通道的备用入口就活了。然后整个系统会报警,赵东升那边会收到警报,巨合会知道,所有人都知道。但反过来——如果不按,方明远已经把日志给了沈薇,那些IP地址、时间戳、唤醒尝试的记录都握在她手里,她想什么时候用都可以。
我还有一个选项。明天去巨合,签合同,拿三倍条件,把通道交给他们。然后呢?然后通道活过来,数据从政府中台源源不断流向他们。我导师背负的罪名成了事实——不管他知不知情,那条通道确实存在,也确实能传输数据。五年了,如果那条通道被激活,所有跟他相关的东西都会被重新定性。而他的名字,死都死了,还挂着“涉密违规”的标签。
我不打算让这件事发生。
我把键盘推开了。没删那个逗号。我拿起U盘,把它插进电脑,打开那个日志表格,翻到第一条记录。五年前九月。我顺着那条记录往前追溯,日志文件的属性里显示创建者信息——创建账号是“system”,没有用户名。但属性里的“最后一次修改者”那一栏显示了一个ID:FMY。方明远。
这个日志文件是他自己建的。表格里的内容是他整理的。也就是说,今天下午在测试站里他递给我的时候,从U盘到文件夹到表格,全是他一个人做的。他用了五年时间整理这些东西,然后有一天决定用它们做筹码。但不管他用它做什么,这张表格里记录的事实是真的。那些IP地址、时间戳、端口扫描的记录是真的。汪志诚改过代码是真的。导师出事是真的。
我关掉表格,把笔记本合上。站起来,走到衣柜前,打开锁着的抽屉,把移动硬盘和U盘一起放进去。抽屉锁好,钥匙挂回脖子上,金属贴着胸口皮肤,有点凉。
明天我要去一个地方。不是巨合。是另一个地址——那个“HK-07”接口对应的物理位置,我在架构图上看到的那个坐标,坐标指向的地点是城北一家已经停业的电子元件厂。图纸上标注的接口入口在那个厂房地下一层的旧配电室里。如果那条通道真的有物理接入端,除了软件层面,它还有一条硬线。
五年前我写那段备注的时候,可能自己都没完全明白那个坐标意味着什么。但今天我想起来了——那年导师带我去过一个地方,就是城北那个元件厂,说要看一批定制硬件。那时候我站在地下一层的配电室门口,导师蹲在地上打开了一个铁皮柜子,里面有一排接线端子,他指着其中一个说:“这个口子你别动,是备用的。”
他指的是那个位置。
我躺到床上的时候已经快十一点了。手机屏幕在床头柜上亮了一下,我侧头看了一眼,是沈薇发的新消息:“林工,赵东升刚才给我打电话了。他说你拒绝修系统。没关系,我尊重你的选择。但方老师下午给我的东西里,有一张五年前的监控截图,你导师出事前一天晚上,你在实验室的走廊里站了很久。截图上你手里拿着一个黑色的移动硬盘。这件事我可以当没看见,但如果明天你不来签合同,那张截图我会发出去。”消息下面附了一张图片,压缩过了,但轮廓清晰。走廊的灯白得刺眼,我穿着那件旧灰色外套,手里握着那块黑色硬盘,面对着一扇关着的门。那是导师办公室的门。时间戳显示凌晨一点十七分。
我看着那张图,把手机放回床头柜上,面朝上放着。我没回。天花板黑着,窗帘透进来一线路灯的黄光,在墙面上拉出一道长影。我闭上眼,胸口那把钥匙贴着皮肤,微微凉。
睡了。明天的事明天再说。
第5章
“林深,我猜你今天会来这儿。”赵东升的声音从配电室深处传出来,带着点混响,像在空罐子里说话。我站在铁皮柜面前,手指刚从那个接线端子上收回来,指尖沾了一层灰和一点油渍。地下一层的灯是惨白的日光灯管,有一根灭了,剩下的几根忽明忽暗地跳着,照着这间不到十平米的小屋子,墙面是水泥抹的,角落里堆着几卷废弃的电缆,空气里弥漫着铜锈和机油混在一起的味道。他坐在配电室门口那张翻倒后又扶起来的铁椅子上,穿着件深蓝色夹克,手里转着一把车钥匙,脚边搁着一个黑色公文包。他看着我,嘴角带着那种我见过很多次的笑——从当年在实验室走廊里第一次撞见他的时候起,他就是这副表情。
“你是怎么进来的?”我问。门是我拧开的,锁是老的机械锁,我用那六个数字密码试了一次就开了。他来的时候门应该也是关着的。
“这地方又没监控,我想进就进了。”他站起来,椅子腿在地上刮了一下,声音刺耳。他把车钥匙揣进兜里,朝我走近了两步,停在铁皮柜另一侧。他低头看了一眼我手碰过的那个接线端子,上面有一个新焊的焊点,银色,比周围的旧铜色亮得多。“你看到这个了吧?上周有人来过这儿,焊了一根线。你知道是谁焊的吗?”
我没说话,把手指上的灰在裤腿上蹭了蹭。
“是方明远。”赵东升说,声音压下去一点,“他把我公司的运维层密码改了,用管理员账号登进来,调出了HK-07的接口拓扑,然后跑到这儿来焊了一根硬线。他焊完之后给我打了电话,说了一句话:‘通道是活的,但钥匙不在你们手上。’”
我的手指停在裤缝上。“他什么时候打的电话?”
“前天晚上。你见他的那天。他从测试站回去以后直奔这儿,焊完线才给我打的。”赵东升靠在柜子边上,两只胳膊抱在胸前,“林深,我跟方明远没什么交情,但他焊这根线,让我想通了一件事——你这五年装哑巴装傻装窝囊,不是因为你真的废了。你在等一个人把这根线焊上。对不对?”
我看着他。日光灯管闪了一下,滋啦一声。“我等他焊这根线?”
“你原始代码里那个备用通道的物理接口在这里,但这个接口五年前是断开的。你导师把它掐了,焊点是你导师亲手剪断的。他当年就是发现了这条通道非法,才被人整下去的。但他剪断之后没告诉任何人,这个物理断口的位置只有你和方明远知道。方明远前天把它重新焊上了,也就是说——你现在手里的软件密钥一旦激活,这条通道就能通。”
赵东升从公文包里抽出一份打印文件,拍在铁皮柜面上,纸页弹了一下,落下来几粒灰尘。“这是巨合今天早上发我的终止合作通知。因为系统报错修不好,他们要把运维换掉。我团队十五个人,下周一全部失业。”他声音忽然低下来,低到像在自言自语,“陈敏今天早上问我,说你能不能帮个忙。她说你其实什么都会。”
我看了他一眼,没接那份文件。“陈敏让你来找我的?”
“她不知道我来。”他说完这句话顿了一下,目光从我脸上移开,落在墙角的电缆堆上,“我自己来的。”
配电室里安静了几秒。顶上的灯管又闪了一下,这次灭了一根,屋里更暗了。暗光里赵东升的轮廓变模糊了,只剩他说话时下巴的线条在动。“我知道你不愿意修。你恨我,恨巨合,恨方明远。但你恨不恨陈敏?”他抬起头看我,“她嫁给你六年,你什么都没告诉她。她不知道你以前是做什么的,不知道你手里有什么,她以为你真是一个临时工。你连给她一个选择的机会都没给,你凭什么觉得她是嫌你穷才走的?”
我的手指攥了一下又松开。“你觉得她走是因为我不告诉她?”
“我觉不觉得不重要。重要的是她现在住在我那儿,每天早上对着镜子化妆的时候手是抖的。她不知道自己做没做错。”赵东升的声音不高,但每个字都落得很实在,“你手里那把钥匙,能修好一个系统,也能修好一个谎。你选了,就行。”
他把那份文件留在柜面上,从椅子旁边拿起公文包,侧身从我旁边挤出去。走到门口的时候他停了一下,没回头:“门口那辆黑色途观是沈薇的,她人在地面上,绕着厂房转了两圈了。她不下来,是给你留面子。你上去跟她说话的时候,她知道你手里有密钥,你告诉她你愿不愿意交,她不会为难你。”
他走了。脚步声沿着走廊往外,越来越远,最后被地下一层那扇铁门关上的哐当声切断。配电室里只剩我一个人,日光灯管在头顶滋滋响,墙角的电缆卷像一条盘起来的黑蛇。我低头看着铁皮柜面上的接线端子,那个新的焊点还亮着银白色的光,焊得不算精致,边缘有一小圈氧化痕迹。方明远焊这根线的时候手大概在抖。他想明白了什么才动的手?他查了五年,最后自己把这根线焊上了。
他是在告诉我,路铺好了。走不走,我自己定。
我蹲下来,打开铁皮柜下面的小门。里面有一排老旧的接线排,灰扑扑的,最底下一层贴着一张黄胶带,上面用圆珠笔写了一个日期——跟我导师出事那天的日期一样。日期下面画了一个小箭头,指向接线排最右侧的一个空端口。端口旁边刻着三个字母:L.S.。我的名字缩写。我导师刻的。
我把手指按在那个端口上。塑料外壳凉透了,里面没有接任何线,端口空着,但端口内侧有一小截被剪断的铜线头。导线断口平整,是剪线钳一刀剪断的。他剪断这根线的那天晚上,应该就是出事之前。他剪完了,在端口旁边刻了我的名字,然后贴了一张黄胶带把日期写上。他知道自己可能回不来了。他留了一个标记,让以后如果有人打开这个柜子,看到“L.S.”就能知道这根线是谁的。
我站起来。铁皮柜的门轻轻关上,锁扣咔嗒一声。我转身往门口走,经过柜面的时候那份打印文件还搁着,我没拿。赵东升留下的东西,我不需要。
出了配电室,沿着走廊往回走,地下一层的灯管有的亮有的不亮,光线一段黑一段白,我踩着自己的影子走到楼梯口。楼梯是水泥砌的,扶手生锈了,上面搭着一块灰布。我扶着扶手上到地面一层,推开那扇半掩的铁门,外面是厂房的空地。天阴着,风比早上大了,卷起地上的碎纸片和塑料袋子,吹得绕着柱子打旋。
沈薇站在厂房门口的空地上,白色风衣的领子被风吹起来,她用手压着,另一只手夹着一杯咖啡。看见我出来,她把咖啡杯换到左手,朝我走了几步,在离我三四米的地方停下。风把她的头发吹散了几缕,她没拨,直接开口:“方明远焊的线,我看过了。地下的布局结构我今天第一次见,比我想象的干净。”
“他告诉你位置了?”
“他告诉我了全部。”她平静地说,“他昨天把所有资料打包发给了我。日志、架构图、修改记录、密钥指纹,包括你导师案子的卷宗复印件。他现在坐在我公司的休息室里等着,他说等你决定。”
“你怎么知道我今天会来?”
她笑了一下,那笑容很短,像脸上掠过一道光就收了。“因为方明远前天焊完线以后,在配电室里留了一部旧手机。手机里有一条存了五年没发出去的短信,收件人是你的号码。内容就一行:‘林深,线焊好了,端口开着。你来不来,我都做过我该做的事了。’他昨天发给我看过那张短信截图。他说只要你来了,你就会看到那个手机。”她从口袋里掏出一部旧款智能手机,黑色外壳,屏幕有裂痕,但还能亮。她按亮屏幕,递到我面前。
屏幕上的短信界面,收件人是我现在的手机号,发送栏里那行字正是方明远说的内容。日期显示是前天晚上。但这条短信从未发送过,状态是草稿。他焊完了线,写了这行字,然后把它留在了配电室里。他是在赌,赌我有一天会来。
我盯着那行字看了很久。风吹过来,我外套下摆翻起来又落下。我把手机接过来,屏幕按灭了,揣进自己兜里。“方明远现在在你们公司?”
“对。”沈薇说,“我给他倒了一杯茶,他没喝。他说他想看看你最后怎么选。”
我点了点头。风很大,厂房屋檐上的铁皮被吹得嘎吱响。我抬头看了一眼天,灰白色的云层很厚,太阳躲在后面,只有一圈朦胧的光晕。
“我不签合同。”我说。
沈薇的表情没有变,甚至嘴角那个弧度都没动。“不签什么?”
“不签你们那份合同。不拿股权,不拿项目主导权。我不进你们公司,我也不修那个系统。”我看着她的眼睛,“但我可以把那条通道关掉。彻底关掉。开关在我手上,我按下去,HK-07的物理端口和软件接口同时断连,从此以后任何人的密钥都唤醒不了它。这件事做完,你系统里的底层报错会消失——因为我关的是源头,报错的根源被拔了,你们重新做一遍协议对接就行,不需要我的代码。”
沈薇看了我很久。风把她手里的咖啡杯盖吹松了,她低头按了一下,再抬头的时候表情有了一丝变化,不那么圆滑了,眉眼之间收紧了一点。“你关掉它,对你有什么好处?”
“我导师的名字可以翻案。”我说,“方明远日志里的记录和这份物理断口的焊点痕迹,足够证明那条通道是汪志诚私自接入的,我导师剪断它之后被封杀。这些材料交上去,他的档案能重审。”
她沉默了一会儿。风在厂房之间的空地上打转,卷起一阵细尘。“你替我考虑过吗?”她问,“项目停摆、系统重构、投资打水漂,这些损失怎么办?”
“你们一开始就不该用那条通道的数据流。”我的声音很平,“当年你公司前身跟汪志诚合作的时候就知道那是一条非法通道。你们现在接政府项目,用的是一个五年前的数据后门,你觉得上面查不到?我能关掉它,是保你们。如果我不关,早晚有人查到你们系统里埋了这条线,到时候不是你一个人担责。”
她嘴唇抿了一下。那杯咖啡的盖子终于被风吹掉了,掉在地上滚了两圈。她弯腰捡起来,没再扣上,顺手扔进旁边的垃圾桶里。直起身的时候她看了我一眼:“你什么时候动手?”
“现在。”
我转身走回地下一层。楼梯还是那段水泥台阶,扶手还是那根锈铁管。我推开门进配电室,日光灯只剩一根还亮着,光线压得很低。铁皮柜的门我还开着。我蹲下来,打开柜子下面的小门,那排接线排和黄胶带还在,L.S.的刻痕在手电筒的光下一清二楚。我把方明远焊上去的那根新线拔下来,线头的焊锡还软着,用点力就脱了。我把它抽出来,单独放在一边。然后我从兜里掏出笔记本和移动硬盘,在柜面上打开电脑。代码调出来,光标停在第三十七行那个多余的逗号上。这次我按了删除键。逗号消失了,第三十八行的变量名自动接成了“sec_key_alt”。我按下回车,窗口里那五十七行代码重新编译了一次,生成了一个新的密钥指纹。然后我调出通道关闭指令,把新生成的密钥指纹嵌进去,对准HK-07端口敲了一行强制断连命令。
屏幕上跳出一行反馈:“端口HK-07物理层握手断开。备用通道状态:已关闭。确认请按Y。”
我按了Y。
屏幕上的光标跳了一下,然后整个窗口关闭了。日志文件里自动生成了一条记录,时间戳是今天,操作人是“L.S.”,操作类型是“通道永久关闭”。这条记录写完,系统里的那条通道从底层被切断,硬线被我拔了,软件密钥注销了。从此以后,不管是谁拿到我的原始代码,通道都激活不了。因为激活的前提是HK-07物理端口在线——而它现在断了。
我合上笔记本,拔掉硬盘,把柜子下面那个小门关上,站起身。配电室那最后一根灯管在我关门的时候闪了两下,灭了。屋里彻底黑了。我站在原地适应了三秒黑暗,然后掏手机照亮,沿着走廊往外走。脚步声在空旷的地下被放大了,每一步都像有人在身后跟着。我走到铁门前推开,外面灰色的天光照进来,风迎面扑过来,我眯了一下眼。
沈薇还站在厂房空地上,风衣被吹得贴紧了身体。她没走。她看见我出来,目光从我脸上移到我的手上——我手里攥着那根拔下来的焊线,银白色的线头在灰色光线里闪了一下。
“关了?”她问。
“关了。”我说。
她长长地呼了一口气,呼出来的白汽在风里散了。她把风衣扣子扣上,朝我点了一下头:“那行。材料我会整理好,该交的交。你导师的案子,我会以巨合的名义发一份补充说明,附上日志和断口照片。”她顿了顿,声音变轻了一点,“我知道这弥补不了什么。但能做的事我都会做。”
我没说话。风吹得她头发全乱了,她也没再管。她转身朝厂房外面停着的那辆黑色途观走去,走到车门口拉开车门,回头看了我一眼:“林深,你接下来有什么打算?”
“先把房东的押金要回来。”我说。
她愣了一下,然后笑了一下,那笑容比刚才长了一点。她钻进车里,车门关上,引擎响了,车子调了个头开出空地,轮胎碾过碎石路的声音渐渐远了。我站在原地,风还在吹,厂房顶上的铁皮嘎吱嘎吱响。我把那根焊线折了两折塞进外套口袋,掏出手机看了一眼。屏幕上有一条新消息,是方明远发的,时间显示刚才:“我在巨合休息室看到你关了。挺好。”
我没回。我把手机揣回去,沿着厂房外面的水泥路往外走。路两边荒草枯黄,风一吹弯下去又直起来。走了大概两百米,路边停着一辆破旧的面包车,车窗摇下来一半,里面坐着老孙。他看见我,把烟掐了,从车窗里探出头:“小林,上车。我送你回去。”
我看着他。烟头被他扔在地上碾了一脚,火灭了。“孙老师怎么知道我今天在这儿?”
“方明远给我打了电话,”他说,“他说你今天会来,可能没车回。让我接一下。”他推开车门,副驾座椅上堆着一件旧军大衣,他一把捞起来扔到后座,“上来吧,这儿打不到车。”
我上了车。车门关上,车厢里有股烟味和汽油味混在一起的旧气味。老孙发动车子,面包车颤了一下,沿着那条坑洼的土路往外开。路边废弃的厂房一栋一栋退到后面去,后视镜里那栋三层小楼的轮廓越来越小。开了大概十分钟,老孙一直没说话,直到上了大路才开口:“方明远跟我说,你把通道关了。”
“嗯。”
他握方向盘的手指紧了紧,隔了一会儿才说:“你导师的事,你查了这么久。现在关了,你不后悔?”
我看着车窗外的路。路边的梧桐树叶子落了大半,光秃秃的枝丫在灰色的天幕上画出细细的线。“后悔什么?那东西本就不该留着。”我说,“他剪断它的时候就没想让它再活过来。”
老孙没再问。面包车开上高架桥,桥下的车流缓缓移动。阳光从云缝里挤出一缕,斜斜地照在车窗上,暖了一小片。我靠在座椅上闭了一会儿眼,手机在口袋里震动了一下。我没掏出来看。风从半开的车窗灌进来,带着凉意和城市里那种混杂的气味——尾气、炒菜的油烟气、湿漉漉的树叶味。高架桥的栏杆一根根闪过,城市在天际线里铺展开来,灰蒙蒙的,庞大的,热闹的,它什么都不知道。
车下了高架,拐进小区那条街的时候,老孙把车速放慢了。“到了。”他说。
我睁开眼,推开车门跳下去。面包车屁股冒了一股黑烟,掉头走了。我站在小区门口,那棵银杏树的叶子已经黄透了,风一吹落了一地。包子铺还开着,蒸笼摞得高高的,白气一团一团往上飘。我走到单元门口,正要掏钥匙,看见门口地垫旁边靠着一只帆布袋,鼓鼓囊囊的,拉链上拴着一张纸条,纸条上压着一块石头。我弯腰捡起来,打开纸条,上面是陈敏的字,歪歪扭扭的:“你的东西我收拾了一袋子,放门口了。钥匙我放回地垫底下了。你收好。对了,赵东升跟我说你今天去修什么东西了。不管修没修好,你回来吃顿饭吧。我煮了面。”
纸条折角的地方有一小片水渍,被风吹干了一半。我把纸条折好揣进口袋,推开单元门,踩着台阶上楼,走到门口蹲下来,从地垫底下摸出那把钥匙。钥匙齿上还沾着一点泥,不知道是刚才放了多久。我拧开门,屋里还是走时候的样子,阳台窗户开着半扇,风把窗帘吹得微微鼓起来。厨房的灶台上放着一个小锅,盖着盖子。我走过去掀开,里面是一碗面,汤还是温的,面上卧着一个荷包蛋,葱花撒得均匀,旁边搁着一双筷子。
我站在厨房里,看着那碗面站了很久。风从阳台吹进来,凉凉的,带着傍晚的光线。楼下的银杏叶被风吹起来,在空中打了几个旋,又落回地上。我拉开椅子坐下,拿起筷子,低头吃了第一口。面煮得有点软了,但还能吃。
手机在口袋里,始终没震。
第6章
吃完那碗面,我把锅洗了,筷子搁回筷笼里。阳台外面天开始暗了,橙红色的光从楼缝里透过来,照在厨房瓷砖上,暖了一小片。我没开灯,靠在灶台边上站了一会儿,嘴里还有葱花和酱油的味道。灶台上的纸条我折了两折放进了外套内袋,跟那个U盘搁在一块儿。
手机终于震了。掏出来看,是方明远发的一条语音。我点开,他的声音沙沙的,背景很安静:“材料我已经整理好递上去了。巨合那边出了正式说明,附了汪志诚当年的内部往来邮件截图和日志记录。上面已经有人接手这事,你导师的档案这周内重新调阅。我欠你的,今天还了。”
语音长度只有二十几秒,他声音有点哑,最后那个“还了”说得轻,像一口气呼出去就没再收回来。我没回语音,打了三个字发过去:“收到了。”
放下手机,我走到卧室门口,看了看里面那张床。床单是陈敏挑的,蓝格子的,洗了很多次颜色都淡了。枕头边还放着她的一只发圈,黑色素圈,上面缠了几根头发。我把它捡起来搁在床头柜上。衣柜下面那个收纳箱我昨天已经拖出来整理过一遍,里面的东西归拢到一个旅行袋里,拉链拉上了搁在墙角。我弯腰把收纳箱推回床底的时候,手指碰到了什么东西,硬的,在箱子后面贴着墙角。我伸手进去摸了一把,摸出来一个透明文件袋。里面是几张旧照片和一封手写信。照片是六年前刚结婚的时候拍的,在公园里,银杏叶子金灿灿的,我穿着那件灰色外套,陈敏挽着我的胳膊笑,眼睛弯成两道月牙。她那时候头发比现在长,脸上有肉,穿一件红色毛衣。照片背面用圆珠笔写着日期和一个“家”字,字迹圆润,是她的字。
那封信没拆,封口粘着,信封上写着“林深收”,字是她的,但看起来写了很久了,纸边都卷了。我捏着信封想了想,没拆,放回文件袋里,搁在桌面上。风吹进来,窗帘飘了一下,把照片掀翻过去,露出背面那个“家”字。我看了一眼,把照片翻回去,按在桌面上。
手机又响了。这回是陈敏的电话。我接起来,那头安静了两秒,然后她的声音传来,比平时轻,像在房间里怕吵到别人似的:“面吃了吗?”
“吃了。”
她“嗯”了一声,然后停了一下。电话里能听见轻微的呼吸声,大概三四秒。“林深,我下午收拾你那袋子东西的时候,看到了你抽屉里那本旧笔记本。里面那些画的图,我看不懂。但我知道不是一般人画的东西。”她说到这儿又停了一下,“你以前为什么不告诉我?”
我拿着手机靠在窗框边上,外面最后一缕夕阳的橙光正在变暗,路灯亮了,橘黄色的光铺在人行道上。“我告诉你能怎么样?”我说,“那时候我连自己都保不住。”
电话那头沉默了很久。我听见她吸了一下鼻子,声音有点抖:“赵东升跟我说你今天干了一件大事。他说你把你那什么通道关掉了。他说这件事做了之后你导师的事就能翻过来。你既然能做这种事,为什么这六年你一个字都不跟我说?”她的声音提上来一点,但没到喊的程度,像是在压着,“我不是嫌你没钱才走的。我是觉得你从来没让我进去过你的生活。你每天回来就坐在那儿,对着电脑,手机响了你看一眼就搁回去。你心里装着什么,你从来不让我碰一下。我嫁给你六年,连你到底在干什么都不知道。”
风从窗外灌进来,把桌上那张照片又掀了一下,我伸手按住。“你问过我吗?”我说。
电话那头忽然没声了。过了两三秒,她的声音变了,像被什么噎住了:“我问过。你记得吗?第二年的时候我问过你一次,我说你以前在实验室做什么的,你说就是搞数据的,没什么好说的。后来我就不问了。我以为你不想让我知道。你不想让任何人知道。”
我手里的手机贴着耳朵,凉凉的。窗外路灯的光打在对面楼的墙上,映出树影晃动的轮廓。我看着那片影子,忽然想起来,她确实问过。那时候我们刚搬进这套出租屋,她把窗帘挂好,转身问我以前的研究所有没有食堂,我说有。然后她问了一句“你们做的那些实验都是什么呀”,我当时正在拆纸箱,头都没抬,说了句“太专业了你听不懂”。后来她再也没问过。这不是她不想知道,是我不让。
“陈敏,”我说,声音比我预想的低了一些,“你的发圈在床头柜上。你要不要回来拿?”
电话那头顿了一下,然后她吸了一口气,声音哑着:“你什么意思?”
“你煮的面我吃完了。碗洗了放在沥水架上。你下次来的时候不用在门口留纸条,敲门就行。”我说完这句话,窗外的风停了一瞬,树叶的沙沙声也停了。
电话那头安静了几秒。然后她说:“你把门牌号发我。”
我挂了电话,把门牌号发了过去。发完之后我把手机屏幕朝上放在桌上,走到厨房把沥水架上的碗拿下来擦干,放进碗柜里。水龙头拧开洗了洗手,水声哗啦,在安静的小屋里格外清晰。洗完手我回到客厅,把那封信又拿起来看了一眼,封口粘得很紧,纸面泛黄。我没拆,放回文件袋里塞进抽屉。抽屉关上,咔嗒一声。
我坐回餐桌前,笔记本还开着。我把它合上,推到一边。桌面上干干净净,只剩那盏修好的台灯亮着暖黄的光。我拉开抽屉,把那块移动硬盘拿了出来,握在手里,金属壳凉飕飕的,边角那个小凹痕还在。我看了它一会儿,然后把它和U盘、那份脱敏图纸,还有老通讯录,全部装进一只塑料文件盒里。盖子盖上,贴了张纸条,上面写着“归档”两个字。我把盒子放在书架最高一层,够不着的地方。
手机震了一下。是方明远的第二条消息,这次是文字:“老林明天下午出来。他女儿下午两点到所里拿档案。你要是想去,我帮你说一声。”
老林就是我导师。本名林建国,跟我同姓。他女儿叫林苒,当年还是高中生,瘦瘦小小的,戴一副圆框眼镜。我最后一次见她是在殡仪馆,她站在门口没进去,手里攥着一个白信封,脸白得像纸。那时候她大概十八岁。现在该二十三了。
我回了一条:“去。”
放下手机,我靠在椅背上,台灯的光暖洋洋的。窗外彻底黑了,对面楼的窗户亮起来,一扇一扇,橘色和白色交错,像一块打碎的棋盘。包子铺的灯还亮着,老板娘在门口收蒸笼,一摞一摞叠好搬回屋里。有人遛狗经过,狗在银杏树下闻了闻,被主人牵走了。
第二天下午两点,我穿了一件干净的深蓝色外套,把那本旧笔记本夹在胳肢窝里。出门的时候阳光很好,风不大,空气里有种深秋特有的清冽。坐地铁再转公交,到了所里大院门口。老周看见我,隔着窗户招了招手:“小林,你来得正好,里面有个人等你。”他指了指院子里面。
我走进去。旧的科研楼门口站着一个年轻女人,穿米色大衣,头发剪短了,比印象里长高了不少,但眉眼间还能认出当年的样子。她怀里抱着一只灰蓝色档案盒,看见我走过来,目光落在我脸上停了两秒。然后她笑了一下,很轻,嘴角弯起一个淡淡的弧度:“林深哥。”
“林苒。”我走上去,站到她面前。阳光照在她大衣的肩膀上,她怀里那只档案盒的边角写着“林建国”三个字,墨迹已经褪成暗蓝色了。
“方叔叔跟我说了,”她说,“你把那些东西都理清了。我爸的事,上面重审了。”她低头看了一眼怀里的档案盒,声音很轻,“我今天来拿他的东西。以前不让拿的,说涉密。今天可以了。”
我点了点头。“你妈还好吗?”
“好多了,”她说,“去年退休了。她现在在老年大学学画画,画了一堆山水,客厅都挂不下了。”她笑了一下,那笑里有阳光,“她说等过年让我带你去家里吃饭。”
我愣了一下,然后说:“好。”
她把手里的档案盒换了个姿势抱着,抬头看了我一眼:“我爸当年跟我说过你。他说你这个人,脑子快,手也快,就是嘴太慢。有些话该说的时候不说,过了再说就晚了。”她说完这句话,风把她的头发吹乱了几缕,她伸手拢了一下,“不过现在说也还行。”
我站在科研楼门口的台阶上,阳光落在脚边,拉出一道影子。院子里那棵老槐树的叶子已经掉光了,枝丫在蓝天下线条分明。林苒把档案盒夹在胳膊底下,从口袋里掏出一部手机,给我看了一张照片。照片上是她家客厅的墙面,挂着一幅水墨画,画的是山,山顶有一棵孤零零的松树。画的角落题了一行小字,我看不太清,但落款写着“林建国”三个字。
“他出事那年画完的,”林苒说,“最后一幅。他以前不让挂,说画得不好。去年我妈把它裱了挂墙上了。”她把手机收回去,“好了,我该走了,车在外面等着。”她转身走了几步,又停下来回头看了我一眼,“林深哥,那幅画下面还有一行字,你下次来看就知道了。”
她走了。米色大衣在阳光里拐过办公楼转角,消失了。我站在台阶上,风在院子里打转,吹起地上几片枯叶,绕着槐树根打旋。我把那本旧笔记本从胳肢窝下拿出来,翻开封皮,里面有一页画着那幅松树的水墨稿——铅笔画的,线条很轻,角落用圆珠笔写着:“给小林。做完该做的事,再来画下一幅。”那是导师的字,窄窄的,有点瘦,笔画收得很干脆。
我合上笔记本,站了一会儿。阳光暖融融的,照在脸上,没有风的时候安静得能听见自己的呼吸。我掏出手机,翻到陈敏的对话框,打了几个字删掉,又打了几个字又删掉。最后发了一句:“晚上有空吗?我请你吃饭。”
发完之后我站在院子里,阳光照在手机屏幕上,反光有点刺眼。消息发出去后“已读”两个字隔了半分钟才跳出来。然后她回了一个字:“好。”
我把手机揣回兜里,沿着台阶走下来,经过门卫室的时候老周探出头来:“小林子,你那个档案盒还要不要?”我回头看了一眼,他手里拿着那只文件盒,就是我昨天搁书架顶层那只,上面“归档”两个字的纸条还在。“你怎么拿来的?”
“你早上忘门口了,我帮你收着了。”他说,“还给你。”
我接过来,抱着那只文件盒,站在所里大院门口。阳光从槐树枝丫间漏下来,碎碎地洒在水泥地上。远处有车鸣了一声喇叭,街口包子铺的蒸笼又冒起白汽,老板娘在擦桌子。风从南边来,带着一点点暖意,吹到脸上的时候,像秋天深处最后一道温和的手掌。
我抱紧那只盒子,往街口走去。手机在口袋里轻轻震了一下,我没拿出来看。阳光拉长了影子,我走在铺满银杏叶的人行道上,脚步不紧不慢。那只文件盒的分量刚刚好,不沉,但攥在手里,能感觉到里面的东西安安静静地待着,不再发热,不再跳动,像一扇终于关上了的门。
往前走的时候,我想起林苒最后说的那句话。那幅画下面还有一行字,她没说是什么。但我猜得到。导师写的那句话,大概跟我笔记本里画的那幅铅笔稿一样——做完该做的事,再来画下一幅。
我做了。
现在该画下一幅了。
第7章
后来,我在街口那家包子铺请陈敏吃的晚饭。不是她以为的西餐厅,也不是什么有红酒蜡烛的地方,就是包子铺门口支了一张折叠桌,老板娘端了两碗小米粥和一屉猪肉大葱包,热气腾腾地搁在塑料桌面上。十月底的晚上凉了,路灯的光从头顶洒下来,两个人坐在折叠椅上,面前升腾的白气把灯光晕得毛茸茸的。她穿着那件驼色大衣,头发散着,手里捏着筷子夹了一个包子,低头咬了一口,烫得轻轻吸了一口气。我坐在对面,看着她的脸在热气后面模糊了一瞬又清晰起来。
“你以前从来没带我吃过这种地方。”她说,把包子搁回碟子里,拿纸巾擦了擦嘴角。我掰了一瓣蒜搁在她碟子边:“你以前也不吃蒜。”她看了那瓣蒜一眼,伸手拿起来咬了一口,表情皱了一下,然后笑了。那个笑跟她六年前照片上的一模一样,眼角弯下去,嘴唇微微张开。路灯的光在那一刻晃了一下,风吹过来,把蒸笼的白汽吹散了一缕。
那天晚上我们没聊太多。她没再问通道的事,我也没提那张照片和那封信。吃完了我送她到公交站,她上车前在台阶上站了一下,回头看了我一眼:“你那个房子还租着吗?”
“租期到下个月。”
“你下个月找房子的时候,我帮你一起看吧。”她说这话的时候眼睛看着站牌上的线路图,没看我。车来了,她上了车,隔着车窗朝我摆了摆手。车开出去的时候尾灯在夜色里拉出两道红痕,我站在站台上看着它拐过街角,才转身往回走。
一个月后。我换了一套房子,离老所大院两条街,一室一厅,朝南,窗户外有一棵老槐树,叶子掉光了,枝丫在冬天阳光里看着很清楚。搬家那天陈敏来了,帮我搬了两箱书,蹲在地上拆纸箱的时候她头发上沾了灰,我伸手帮她拍了一下,她没躲。晚上两个人坐在新客厅的地板上,外卖盒子搁在中间,她开着手机外放听歌,是首老歌,旋律轻轻的。窗外的槐树影子映在墙上,风一吹就晃。
导师的案子在十一月中旬重新定性了。文件我收到一份复印件,盖了红章,上面写的是“经复核认定,原涉密定性依据不足,相关责任认定予以撤销”。我把它收进了那只文件盒里,盒子上“归档”那两个字没撕,就留着。林苒后来给我发了一张照片,她家客厅那幅画下面果然有一行小字,墨色比画淡一些,写的是:“水泼出去了,还能下雨。雨落下来,还能长草。”我盯着那行字看了很久,想起导师当年在实验室里跟我说的最后一句话,不是“你要小心”,而是“走吧,明天见”。第二天他就没再来了。
方明远在十二月初给我打过一个电话。他声音比上次听着松了些,说材料递完之后他回老家住了半个月,每天坐在阳台上晒太阳,把烟戒了。“林深,我五年没好好晒过太阳了。”他说这句话的时候,我听见电话那头有鸟叫。我说那你就多晒晒。他笑了,说好。
赵东升的公司最后还是换了底层协议,巨合重新做了对接,项目保住了。他给我发过一次微信,只有一行字:“陈敏说你搬家了,有空请你吃饭。”我回了个“行”字,没定时间。沈薇后来没再联系我,但我听说她调了部门,不再负责项目对接那块了。有人说她主动申请转岗,去管企业内部培训了。我不知道真假,也没问。
老孙退休了。十二月底的某天,他给我打了个电话,说他在郊区租了个小院子,准备养鸡种菜。“小林啊,你以后要是想吃土鸡蛋,来找我。”我说好。挂了电话之后我站在新房子的阳台上,看着外面枯树枝间露出的天空,灰色,云层薄薄的,有一缕阳光从缝隙里钻出来,落在对面楼的墙面上,一小块金色。
陈敏没有搬回来住,但她来得很勤。有时候带菜来,有时候带水果,有时候空着手来,就坐在地板上看书。有一天晚上她走的时候在门口穿鞋,弯着腰系鞋带,忽然头也没回地说了句:“林深,你以后有什么事,能不能跟我说一声?”我没立刻回答。她系好鞋带站起来,转脸看着我,眼睛在玄关的灯下很亮。“不用全说。就一句也行。告诉我你今天干了什么,见了谁,吃了什么。让我知道你还在这个世界上活着就行了。”
我说了一句:“好。”
她点了点头,推门走了。门关上的时候我听见她的脚步声沿着楼道往下,走得不快,鞋底拍着台阶,一下一下,最后消失在一楼门厅的关门声里。我站在玄关里,灯还亮着,门上挂着一串钥匙,新配的,齿还没磨亮。我伸手拨了一下那串钥匙,铜片碰撞发出细碎的响声,在安静的屋子里很清晰。
后来。这句话写出来的时候我已经坐在新家的书桌前,台灯开着暖黄的光,窗外槐树的影子被风摇碎了。笔记本打开着,封皮翻开到最后一页,空白页上我搁着一支笔,笔尖悬在纸面上方,还没落下。脑子里有句话转了几圈,最后落定下来,我低头写上去。字迹不重,笔尖划过纸面沙沙地响。写完了我把笔帽合上,笔记本合拢,搁在书架那只文件盒旁边。两个东西并排站着,灰蓝色和白色,在灯光下安安静静。
我往后靠在椅背上。阳台的门半开着,冷风挤进来一条缝,吹得窗帘下摆微微晃。楼下有人说话,声音隔了几层楼听不清,像远处河面上浮着的碎光,飘飘悠悠地散了。手机搁在桌面上,屏幕暗着,没有新消息。一切都在它该在的位置上。
如果非要我说一个道理,那就是——有些事,做错了就是做错了,覆水难收。但收不回来的水不必去收。它渗进土里,养出一片草,来年春天绿得比哪一年都早。
给读到这里的你一句建议吧。结婚前,先看看对方的家庭是什么样的人,再看你自己愿不愿意把自己家底亮给他看。藏得越深,裂开的时候越疼。那个愿意蹲在门口地垫下面给你留一把钥匙的人,值得你在能开口的时候先说一句“我想跟你聊聊”。
我站起来走到阳台边,把半开的那扇窗完全推开。冷风涌进来,灌满整个屋子。外面的夜很沉,路灯亮着,老槐树的枝丫在光里像一幅细笔画。远处高架桥上的车流像慢速流动的碎玻璃渣,一闪一闪地挪动。我趴在栏杆上看了很久,呼出的白汽在路灯下浅浅地飘散了。
屋里手机响了一声。我转身回去拿起来看,是陈敏发的消息,一张图片——她今天下午拍的,一只胖橘猫蹲在小区花坛边上,在晒太阳。图片下面跟了一行字:“明天降温,你多穿一件。”我盯着那只胖橘猫看了一会儿,猫眼睛眯成一条缝,嘴角像带着点笑。我把手机锁屏,放回桌上,重新走到阳台边上。
风还在吹,但我不觉得冷了。远处有一盏灯亮着,暖黄的,在某栋楼的某个窗户后面。我不知道那是谁家的灯,但它亮着,就像还在等着什么人回家。我回到屋里把阳台门带上了,窗帘垂下来,遮住外面的夜色。台灯还亮着,书桌上的笔搁在合上的笔记本旁边,笔帽扣得严严实实。我伸手把灯关了,屋里暗下来。黑暗从四周涌上来,但并不压人,像一层薄薄的毯子,轻轻地盖住了所有的声响。
我躺到床上的时候,手机在床头柜上亮了一下又灭了。我没看。窗外的风在树枝间穿行,发出低低的哨音,像在哼一首没有词的歌。我把被子拉到下巴的位置,闭上眼睛。脑子里什么东西都没有,空的,干净的,像秋天最后一场雨过后那种透亮的天空。那个空不是缺了什么的空,是一切都放完了之后留下的那片余地。
第二天早上醒来的时候,阳光从窗帘缝里挤进来,一条细细的金线横在天花板上。我睁开眼坐起来,窗外槐树的枝丫上停着一只麻雀,歪着脑袋啄了两下羽毛,扑棱棱飞走了。厨房里锅是干净的,水壶是满的,冰箱里有鸡蛋和青菜,日历翻到了十二月的最后几天。我站在厨房里烧了一壶水,水汽把窗户蒙上一层雾,我伸手在雾面上画了一道弧线,透过那道弧线看见外面的天空很蓝,蓝得透亮,像刚洗过的。
手机在桌上亮了一下。是陈敏发的:“今天中午有空没?我包了饺子。”我回了一个字:“有。”然后我把手机揣进兜里,穿上外套,换了鞋。钥匙在口袋里磕了一下,金属碰撞的声音清脆又轻。我推开门,走下楼,阳光从楼道窗户斜进来,一阶一阶地亮着。走到一楼单元门口的时候,我回头看了一眼那扇门,门上贴着崭新的门牌号,数字在阳光里反着光,亮得晃眼。
我走出去,脚步踏在落满碎阳光的人行道上,往她说的那个方向走。风有点凉,但阳光把后颈晒得暖融融的。树梢上有几只麻雀在叫,声音不大,一下一下的,跟天空一样干净。
那只胖橘猫蹲在小区门口的花坛边上,眯着眼晒太阳。我路过的时候它睁开一只眼看了我一下,又闭上了。
我继续往前走。