窗外的天色暗透了。巷子里的路灯亮起来,昏黄的光晕染在湿漉漉的石板路上。
陈默推开餐馆的门,冷风灌进来,卷走了身上最后一点暖意。沈清澜跟在他身后,高跟鞋踩在石板上,发出清脆的嗒嗒声。李贺去开车,尾灯的红光在巷口一闪一闪。
“直接回公司?”沈清澜问。她的声音在风里有点散。
陈默点点头。他拉开车门,皮革座椅冰凉。沈清澜坐进副驾,系安全带的时候,金属扣咔哒一声,很响。
车开起来。
街灯的光流进车里,一道一道划过她的脸。明,暗,明,暗。她侧着头看窗外,玻璃上映出她模糊的轮廓。
车厢里很安静。只有引擎的低鸣,和空调出风口的呼呼声。
陈默的手指在方向盘上轻轻敲着。一下,两下。节奏很慢,像在数什么。他在想招标会上,赵志刚那个眼神。
不是愤怒,是计算。
还有吴永年提问时的语气。太精准了,像早就知道答案,只是为了走个过场。问题本身没问题,但时机和角度,都恰好打在默视技术方案最容易被误解的点上。
“不对。”陈默忽然说。
沈清澜转过头。
“什么不对?”
“赵志刚今天的问题。”陈默放慢车速,拐进创业园区的辅路,“他问双向数据流会增加带宽负载,这没错。但他举的例子,那个上万个摄像头的场景……”
他顿了顿。
路灯的光照进车里,能看见他眉头微微皱着。
“我们标书里写的试点规模,是三千个点位。”他说,“上万个,是二期规划的远景数字。这部分内容,只在技术标书的附录三,第七页提到过。”
沈清澜坐直了身体。
“你的意思是……”
“他看过我们的标书。”陈默说,“不是粗略看,是仔细看过。连附录里的远景规划都注意到了。”
车停在默视楼下。
玻璃幕墙黑漆漆的,只有几扇窗户还亮着灯。保安室的灯光是暖黄色的,人影在里面晃动。陈默熄了火,没立刻下车。
他打开系统界面。
没有触发推演,但有个日志功能一直开着。记录着过去二十四小时内,所有外部数据访问的痕迹。他滑动屏幕,找到标书文件的访问记录。
文件上传到公司服务器的时间,是四天前下午三点十七分。
之后有十二次访问记录。
大部分是张伟和王璐的,时间集中在提交前那两天。还有两次是沈清澜的,一次是陈默自己的。这些都正常。
但有一条记录,时间显示是昨天凌晨两点零三分。
访问ip来自公司内网,但终端设备编号是陌生的。陈默点开详情,设备型号是一台旧款thkpad,系统显示该设备未在it部门登记。
访问时长七分钟。
七分钟,足够翻完一份三百多页的pdf,找到附录三,第七页。
“有人昨晚动过标书。”陈默说。
沈清澜凑过来看屏幕。蓝光照在她脸上,睫毛的阴影投在鼻梁上。她盯着那条记录,看了很久。
“能查到是谁吗?”
“it那边应该有内网登录日志。”陈默关掉系统,“但如果是用未登记的设备,可能绕过了认证。得去机房查。”
两人下车。
夜风更凉了,吹得楼前的旗子猎猎作响。旗杆是金属的,在风里发出轻微的嗡鸣。陈默刷开门禁,玻璃门向两侧滑开。
大堂里空荡荡的。
值班保安趴在桌上打盹,听见脚步声,猛地抬起头。看见是陈默,松了口气,又趴回去。电梯正在下行,数字从八跳到一。
叮。
门开了。里面没人,轿厢壁亮得能照见人影。陈默按了五楼,电梯缓缓上升。钢索摩擦的声音,吱吱呀呀,从头顶传下来。
五楼是技术部。
走廊的灯是声控的,他们走过去,一盏一盏亮起来。白光很冷,照在浅灰色的地毯上。张伟的办公室还亮着灯,门虚掩着。
陈默敲了敲,推开。
张伟正趴在电脑前,屏幕上是密密麻麻的代码。他听见声音,转过头,眼镜滑到鼻尖。看见陈默和沈清澜,他愣了一下,然后站起来。
“陈总,沈总监?你们怎么……”
“招标会上有点问题。”陈默走进来,随手带上门,“我们技术方案的细节,可能泄露了。”
张伟的脸瞬间白了。
他摘下眼镜,用衣角擦了擦,又戴上。动作有点慌,镜腿挂到耳朵,挂了好几次才挂上。
“泄露?怎么泄露的?”
“还不确定。”沈清澜说,“但赵志刚今天提的问题,针对性太强。他提到了我们标书附录里,二期规划的数据。”
张伟张了张嘴,没发出声音。
他转身走到白板前,板子上还画着昨天的架构图。他用手指点了点某个节点,手指有点抖。
“这个双向优化模块,我们上周三才最终定稿。”他说,“标书里的描述,也是那天晚上才加进去的。如果泄露……”
“知道这个模块细节的,有几个人?”陈默问。
张伟想了想。
“我,沈总监,还有算法组的甲和乙。”他说,“甲负责核心代码,乙做测试。就我们四个。”
“甲和乙现在在吗?”
“甲应该下班了。”张伟看了眼手机,“乙还在,刚才还在群里问测试数据的事。”
陈默点点头。
他走到窗边,窗外是园区的夜景。远处写字楼的灯光像星河,一片一片的。近处的路灯下,有只野猫蹿过去,影子拉得很长。
“把乙叫来。”他说,“还有,联系it的小刘,让他带着内网访问日志过来。”
张伟拿起电话。
拨号音在安静的办公室里显得特别刺耳。嘟,嘟,嘟。响了七八声,那边才接起来。张伟说了几句,声音压得很低。
挂断后,他看向陈默。
“乙马上过来。小刘在机房,说十分钟后到。”
陈默在沙发上坐下。沙发是真皮的,坐下去的时候发出细微的挤压声。沈清澜坐在他旁边,从包里拿出那个银色u盘,握在手心。
金属表面反着光,冷冷的。
办公室里安静下来。能听见空调出风口的风声,还有张伟电脑主机风扇的嗡嗡声。屏幕上的代码还在滚动,绿色的字符一行一行往下跳。
过了大概五分钟,门被敲响。
乙推门进来。他是个瘦高的年轻人,头发有点乱,穿着件灰色的连帽卫衣。看见屋里这么多人,他愣了一下,站在门口没动。
“陈总,沈总监,张哥。”他挨个打招呼,声音有点紧。
“进来坐。”陈默指了指对面的椅子。
乙走过来,坐下的时候动作有点僵。椅子是转椅,他坐下后,手放在膝盖上,背挺得笔直。
“招标会上的事,听说了吗?”陈默问。
乙点点头。
“群里有人说了。”他舔了舔嘴唇,“说沈总监讲得特别好,把评审都镇住了。”
“赵志刚提的问题呢?”
乙的脸色变了变。
“也听说了。”他说,“关于带宽那个。其实……其实那个问题,甲前天跟我讨论过。”
办公室里空气一凝。
沈清澜抬起头。张伟猛地站直身体,眼镜又滑下来。陈默没动,只是看着乙。
“详细说。”
“就是前天下午。”乙的声音更紧了,“甲跑来找我,说他在看标书,发现那个双向流模块可能有个隐患。他说,如果摄像头数量上去,带宽压力会很大。”
“他怎么说的?”
“他说……”乙努力回忆,“他说‘要是评审拿这个点问我们,我们得有个解释’。然后我们就一起算了笔账,用二期规划的万级点位模型算的。”
陈默和沈清澜对视了一眼。
前天下午。那时候标书已经定稿,但还没有提交。甲确实有权限看到文件,但他主动去算二期规划的数据,还特意找了乙一起。
太刻意了。
“甲平时会主动看标书吗?”沈清澜问。
乙摇摇头。
“他从来不看商务的东西。”他说,“只埋头写代码。上次王总监让他帮忙核对技术参数,他还不乐意,说这不是他的活。”
门又被敲响。
it的小刘抱着台笔记本电脑进来。他是个圆脸的男生,穿着格子衬衫,头发剃得很短。看见屋里这么多人,他缩了缩脖子。
“陈总,您要的日志。”
他把电脑放在桌上,打开。屏幕亮起来,是一串密密麻麻的表格。时间,ip地址,设备编号,访问路径。数据多得眼花。
“查昨天凌晨两点左右,标书服务器的访问记录。”陈默说。
小刘的手指在触控板上飞快滑动。
页面滚动,停在一行数据上。时间戳:02:03:17。ip是内网地址,设备编号一栏,显示着一串乱码。
“这个设备没登记。”小刘说,“但登录账户是……”
他顿了顿,抬起头。
“是甲的工号。”
办公室里死一般的寂静。
窗外的风声忽然大起来,呜呜的,像野兽在低吼。张伟的电脑屏幕自动熄了,黑漆漆的,映出每个人僵住的脸。
乙的脸白得像纸。
他张了张嘴,想说什么,但没发出声音。手指死死抠着膝盖,指节泛白。卫衣的帽子歪在一边,露出半截脖子,能看见喉结在上下滚动。
“确定吗?”陈默的声音很平静。
“确定。”小刘调出另一份日志,“这是vpn登录记录。甲的工号,昨天凌晨一点五十分,从外部网络连入公司内网。登录地点显示是……”
他放大地图。
一个红点,在城市的另一端闪烁。地址是某个住宅小区,离公司开车要四十分钟。
“这是他住的地方?”沈清澜问。
“应该是。”小刘说,“员工档案里有住址,我核对一下。”
他又打开一个文件。表格滚动,停在甲的信息栏。住址那一列,和地图上的红点完全吻合。
小主,这个章节后面还有哦,请点击下一页继续阅读,后面更精彩!
陈默向后靠进沙发。
皮革发出长长的叹息声。他闭上眼睛,揉了揉眉心。指尖压在皮肤上,能感觉到血管在跳动。
一下,一下,很有力。
“甲最近有什么异常吗?”他问,眼睛还闭着。
张伟和乙对视了一眼。
“好像……有点。”张伟先说,“上周开始,他下班特别准时。以前都是熬到十点以后的,但这周,六点一到就走。”
“还有呢?”
乙想了想。
“他上周换了新手机。”他说,“最新款的旗舰机,要一万多。我问他怎么舍得买,他说是抽奖中的。但……”
他咽了口唾沫。
“但我昨天看他手机,屏保是张照片。是他老婆和孩子的,背景是个挺贵的私立幼儿园。那个幼儿园,一个月学费就七八千。”
陈默睁开眼睛。
他看向沈清澜。沈清澜也正看着他,眼神很清,但深处有什么东西沉了下去。像石子投进深潭,一直往下沉,看不见底。
“他老婆没工作。”沈清澜轻声说,“去年生孩子后,就一直在家带孩子。甲一个人的工资,要还房贷,要养一家三口。”
“付不起私立幼儿园的学费。”陈默接上。
“付不起。”
办公室里又安静下来。只有小刘的电脑风扇还在转,呼呼的,像在喘气。窗外的野猫又叫了一声,凄厉,短促,然后没了声音。
陈默站起来。
他走到窗边,看着外面漆黑的夜。玻璃上倒映出他的脸,模糊的,像隔着一层雾。他看了很久,然后转过身。
“乙,你先回去。”他说,“今天的事,不要跟任何人说。”
乙连忙点头。
他站起来,椅子腿刮过地板,发出刺耳的吱呀声。他几乎是跑着出去的,门在他身后关上,砰的一声。
“张伟。”陈默又说,“明天早上,正常开晨会。甲要是来了,什么都别说,像平时一样。”
张伟点点头。
他摘下眼镜,用力揉了揉眼睛。眼眶有点红,不知道是累的,还是别的什么。
“陈总,甲他……”
“我知道。”陈默打断他,“你先回去休息。明天再说。”
张伟拿起外套,慢慢走出去。脚步很重,每一步都踩得很实。走廊的声控灯又亮起来,白光从门缝里漏进来,一道狭长的光。
小刘也收拾电脑准备走。
“陈总,那些日志……”
“发我一份。”陈默说,“原件备份,不要删。”
小刘应了一声,抱着电脑出去了。门轻轻合上,办公室里只剩下陈默和沈清澜。空调还在吹,风有点冷,吹得沈清澜缩了缩肩膀。
陈默走过去,把温度调高了两度。
出风口的声音变了,从呼呼变成了嗡嗡。暖风慢慢涌出来,带着塑料加热的淡淡气味。
“你打算怎么办?”沈清澜问。
她坐在沙发上,手里还握着那个u盘。握得太久,金属表面都有了温度。她松开手,u盘掉在沙发上,弹了一下,滚到角落。
陈默没立刻回答。
他走到白板前,拿起笔。笔是马克笔,笔盖拔开的时候,有轻微的啪声。他在白板上写下几个字。
甲。访问记录。新手机。幼儿园。
然后画线,把几个词连起来。线是蓝色的,在白色板面上很刺眼。他画完,把笔帽扣回去,又是啪的一声。
“赵志刚找过他。”陈默说。
“而且给了不少钱。”沈清澜接上,“足够付私立幼儿园的学费,还能换新手机。可能还有别的,我们不知道的。”
“但他为什么留着访问记录?”陈默转过身,“用自己工号登录,从家里连vpn。这太明显了,像故意留尾巴。”
沈清澜想了想。
“也许他没想到我们会查。”她说,“或者,他根本不知道it有这种日志。他只是个写代码的,不懂这些。”
陈默摇摇头。
“甲不笨。”他说,“相反,他很聪明。能写出核心算法的人,不会犯这种低级错误。”
“那你的意思是……”
“他在求救。”陈默说。
这个词说出来,办公室里忽然静了一瞬。空调的嗡嗡声,电脑风扇的转动声,还有远处电梯运行的钢索声,都变得清晰起来。
沈清澜站起来。
她走到白板前,看着那几个字。蓝色的线连成一张网,把甲困在中间。网很密,几乎没有出口。
“你是说,他故意留下痕迹,让我们发现?”她问。
“有可能。”陈默说,“赵志刚找上他,用钱,或者用别的什么威胁他。他没办法,只能照做。但他心里过不去,所以留了破绽。”
“那我们现在……”
“等。”陈默说,“等他主动来找我们。或者,等下一个证据。”
他走到办公桌前,打开电脑。屏幕亮起来,壁纸是默认的星空图,深蓝色的,点点星光。他登录邮箱,有一封新邮件。
发件人是李贺。
标题是:招标会现场照片(高清版)。
附件很大,下载进度条缓慢地向右爬。百分之十,百分之二十。陈默点开第一张,是沈清澜在台上讲话的照片。
灯光打在她身上,深灰色的西装泛着淡淡的光。她站得很直,一只手扶着讲台边缘,手指微微弯曲。
第二张是评审席。
吴永年端着茶杯,眼睛盯着台上。但仔细看,他的视线没有聚焦在沈清澜身上,而是稍微偏了一点,落在她身后的屏幕上。
第三张是赵志刚。
他坐在台下,侧着脸,正在跟旁边的女人说话。嘴唇微微动着,能看出嘴型。陈默放大照片,像素有点模糊,但勉强能辨认。
他说的是:“差不多了。”
差不多什么?
陈默关掉照片,靠在椅背上。椅子向后仰,发出轻微的咯吱声。他盯着天花板,灯管一头确实发黑了,像被烧过。
“沈清澜。”他忽然说。
“嗯?”
“你那个u盘里的录音,能给我一份吗?”
沈清澜走过来,从沙发上捡起u盘。她插进电脑,复制文件。进度条很快走完,叮的一声提示音。
“你要做什么?”她问。
“找人听听。”陈默说,“赵志刚逼你签协议的时候,语气,用词,有没有什么特别的地方。也许能找出他惯用的胁迫手段。”
沈清澜看着他。
“你觉得他对甲,用了同样的方法?”
“可能更直接。”陈默说,“对你,他还要装装样子,走法律程序。对甲,一个普通程序员,他不需要那么麻烦。”
文件复制完成。
陈默拔下u盘,握在手心。金属还是温的,带着沈清澜掌心的温度。他握了一会儿,然后放进外套口袋。
“明天我去见个人。”他说。
“谁?”
“一个朋友。”陈默没细说,“以前做过刑侦,后来转行做信息安全。他擅长分析这类事情。”
沈清澜点点头。
她没有追问,走回沙发坐下。窗外彻底黑了,只有远处写字楼的灯光还亮着。那些光隔着玻璃,朦朦胧胧的,像隔着一层毛玻璃。
“陈默。”她轻声说。
“嗯?”
“如果甲真的是被迫的……”
“我知道。”陈默打断她,“我会处理。”
他说得很轻,但每个字都像石头,沉甸甸的。沈清澜听出来了,没再说话。她靠在沙发上,闭上眼睛。
呼吸声很轻,几乎听不见。
陈默继续看邮件。李贺又发了几条消息,说评审组那边有朋友透露,吴永年会后脸色很难看,一个人先走了。
还有,招标结果明天下午三点公布。
陈默回了个“收到”,关掉邮箱。电脑屏幕暗下去,映出他疲惫的脸。眼睛里有红血丝,下巴上冒出青色胡茬。
他看了眼时间,十一点二十。
该走了。
他站起来,膝盖有点僵。坐得太久,血液循环都不畅了。他走到沙发边,沈清澜已经睡着了。
头歪在一边,头发散下来,遮住半边脸。呼吸均匀,胸口微微起伏。她睡得很沉,眼睫毛在眼下投出浅浅的阴影。
陈默没叫醒她。
他从柜子里拿出一条毯子,轻轻盖在她身上。毯子是羊绒的,很软,盖上去的时候几乎没声音。沈清澜动了动,但没醒。
陈默关掉大灯,只留了一盏台灯。
暖黄的光晕开一小片,照在沙发角落。光线很柔和,不刺眼。他走到门口,手放在门把手上,停顿了一下。
然后轻轻拉开门,走出去。
走廊的声控灯应声而亮。白光刺眼,他眯了眯眼睛。脚步声在空旷的走廊里回响,嗒,嗒,嗒。
他走到电梯间,按了下行键。
电梯从一楼缓缓上升。数字跳动,一,二,三。钢索摩擦的声音越来越近。叮,门开了。
轿厢里空无一人。
镜面墙壁映出无数个他,层层叠叠,延伸到深处。他走进去,按了一楼。门缓缓合上,那些镜像也一个个消失。
最后只剩他自己。
电梯下降,失重感很轻微。他看着数字跳动,四,三,二。然后停住,门开了。
大堂的灯光比楼上更亮。
保安已经醒了,正在泡面。开水冲进碗里,腾起白色的热气。香味飘过来,是红烧牛肉味的。保安看见陈默,点点头。
陈默也点点头,走出大楼。
夜风迎面吹来,带着湿冷的寒意。他裹紧外套,走向停车场。车停在路灯下,黑色的车身蒙着一层薄薄的水汽。
他拉开车门,坐进去。
没立刻发动,而是拿出手机。通讯录里翻到一个名字:周正阳。下面标注着:信息安全顾问。
他拨通电话。
响了三声,那边接起来。背景音很吵,有音乐声,还有人群的喧哗。
“喂?陈默?”周正阳的声音有点大,“这么晚了,有事?”
“有事。”陈默说,“明天上午,能见一面吗?”
“明天……上午十点以后可以。老地方?”
“老地方。”
“行,到时候见。”
电话挂断。陈默放下手机,发动车子。引擎低鸣,车灯亮起,两道白光刺破黑暗。他倒车,转向,驶出园区。
街道空荡荡的。
偶尔有出租车驶过,顶灯亮着红色的“空车”。红绿灯在寂静中变换颜色,从绿到黄,再到红。陈默在路口停下,看着红灯倒计时。
六十,五十九,五十八。
数字一跳一跳,像心跳。他想起甲的脸。上次见甲,是上周的晨会。甲坐在会议室后排,低着头记笔记,笔尖划得飞快。
那时候他还不知道,甲已经换了新手机,孩子进了私立幼儿园。
绿灯亮了。
陈默踩下油门,车子滑出去。轮胎压过湿漉漉的路面,发出沙沙的声音。雨刷器自动启动,在挡风玻璃上刮出扇形的水痕。
雨终于下下来了。
细细密密的,在路灯的光束里像银色的丝线。丝线落下,打在车窗上,绽开一朵朵小小的水花。
陈默打开收音机。
深夜频道在放老歌,女声低低地唱,歌词听不清,只有旋律在车厢里流淌。哀伤的,缓慢的,像在讲一个很久以前的故事。
他跟着哼了两句,然后停住。
目光落在后视镜上。镜子里,公司的楼越来越远,缩成一个小点,最后消失在雨幕里。只有楼顶的红色航空障碍灯还在闪烁。
一下,一下,像在呼吸。
他转了个弯,驶入主干道。车流多了起来,尾灯连成红色的河流,在雨夜里缓缓流动。雨刷器有规律地摆动,左,右,左,右。
像钟摆。
他想起沈清澜还在公司睡着。毯子够不够厚?空调会不会太冷?明天早上她醒来,发现自己一个人在办公室,会怎么想?
这些问题没有答案。
他摇摇头,把这些念头甩出去。现在要想的,是甲,是赵志刚,是后天的仲裁,是明天下午的招标结果。
太多事了。
像一团乱麻,理不出头绪。但必须理,一根一根,慢慢来。他深吸一口气,又缓缓吐出来。白色的雾气在车窗玻璃上凝成一小片模糊。
雨更大了。
噼里啪啦打在车顶,像无数颗小石子砸下来。他调大雨刷器的频率,刷,刷,刷。视野清晰了一瞬,又被雨水模糊。
就这么一路开回家。
停车场空荡荡的,他的车位在最里面。停好车,熄火。雨声瞬间清晰起来,哗哗的,像瀑布。他坐在车里,没立刻下去。
听着雨声。
听了大概三分钟。然后推开车门,跑进楼道。雨点打在背上,冰凉。他抖了抖外套,水珠溅在地砖上。
电梯上行,到家。
打开门,屋里漆黑一片。他按亮灯,暖黄的光洒下来。客厅很小,沙发,茶几,电视。东西摆得整齐,但没什么人气。
他换了鞋,走到厨房倒水。
水是凉的,喝下去,喉咙一阵清爽。他端着杯子走到窗边,看着外面的雨。雨幕重重,对面的楼都看不清了。
只看见窗玻璃上,自己的倒影。
模糊的,扭曲的,像另一个人。他看了很久,直到杯子里的水喝光。然后转身,走进卧室。
没开灯,直接倒在床上。
床垫很软,陷下去一块。他盯着天花板,黑暗中什么也看不见。但能听见雨声,持续不断的,像背景音。
他就这么躺着。
脑子里过电影一样,闪过今天的画面。招标会,沈清澜站在台上,赵志刚离场的背影,餐厅里的谈话,办公室里的日志。
还有甲那张脸。
最后停在一个画面上:甲的工号,显示在访问记录里。那串数字他记得很清楚,是0379。
0379。
他默念了一遍,然后闭上眼睛。
雨还在下。哗哗的,像要把整个世界都洗干净。但有些东西,洗不干净。比如背叛,比如威胁,比如藏在阴影里的手。
那些东西粘在骨头上,要一点点刮。
刮到见血,刮到见骨。
他翻了个身,脸埋在枕头里。枕套是棉的,有洗衣液的味道,淡淡的茉莉香。他深吸一口气,然后慢慢呼出来。
呼吸渐渐平稳。
睡着了。