晋江文学城
下一章 上一章  目录  设置

2、幽灵的邀请函 ...

  •   第三天。
      沈谛安已经记不清这是第几次看表。凌晨两点十分,办公室的灯光惨白,从天花板上的格栅灯倾泻下来,照得一切都没有影子——或者说,一切都被照得只剩影子。他的工位在窗边,玻璃窗像一面黑色的镜子,映出他佝偻的背影和屏幕上滚动的代码。
      他在追踪那条“蒲公英”地址指向的境外服务器。三天了,对方像一条泥鳅,每次快要触及核心时,IP就会跳转,路由就会重置,数据流就会消失在某个加密隧道的尽头。他换过三种追踪策略,动用了五个跳板,甚至写了一个自动化脚本试图预判对方的下一跳——都没有用。对方的技术在他之上,这一点他已经开始接受。
      屏幕上的代码还在滚动。他揉了揉眼睛,指腹触到眼睑时,能感觉到眼球表面的干涩和微热——那是长时间盯着屏幕后,眨眼次数减少导致的。眼球表面像蒙了一层细沙,每一次转动都有轻微的刺痛。他从抽屉里摸出一瓶人工泪液,仰头滴了两滴。冰凉的液体滑进眼眶,短暂的刺痛后是片刻的舒缓。他眨了眨眼,液体顺着泪点流进鼻腔,有一股淡淡的咸味。
      办公室很安静。这种安静不是绝对的静,而是由各种细微的声音组成的:服务器散热风扇的低鸣,空调出风口的咝咝声,远处某个房间里偶尔传来的脚步声,还有他自己的呼吸。这些声音混在一起,像一首催眠曲,但他不敢睡。他怕一觉醒来,那些线索就断了。
      就在他重新看向屏幕的瞬间,邮箱客户端弹出一条新邮件提示。
      “叮”的一声,在安静的办公室里格外刺耳。
      发件人:省厅科技信息化处 kjxxh@xxgk.gov.cn
      主题:关于“净土系统”压力测试补充数据的通知
      沈谛安的目光在发件人地址上停留了两秒。格式正确,域名正确,甚至连落款的字体和行文风格都和他平时收到的上级通知一模一样。他点开邮件,正文是一段标准的公文,用的是省厅惯用的仿宋字体,行间距、段间距都无可挑剔:
      “各相关单位:根据‘净土系统’上线前最后一次压力测试安排,现需补充提交近三月异常流量监测数据。请于48小时内将数据包上传至指定加密通道。附件为数据格式说明及上传工具。”
      附件是一个压缩包,名称是“data_format_20240315.zip”。大小1.2MB,时间戳显示今天下午五点零三分创建。
      沈谛安的手指悬在鼠标上。一切看起来都很正常,但他没有点开。他盯着那封邮件,眉头慢慢皱起来。额头上有一条细细的皱纹,平时不明显,但一皱眉就深得像刀刻的。
      省厅科技信息化处的确负责净土系统的测试协调,他们的公文格式他也熟悉。但这封邮件里有一个细节——日期。今天是3月15日,但上周的内部协调会上,陆天明亲口说过,补充数据的截止日期是3月20日,要求48小时内上传,时间太紧了。当时他还觉得这个安排不合理,但陆天明说“上面定的,就这样吧”。现在这封邮件却要求48小时内上传,按时间算,截止日就成了3月17日,和协调会的安排不符。
      他拿起桌上的座机,拨了省厅科技信息化处的电话。听筒贴在耳朵上,能听见线路里轻微的电流声。
      响了三声,接通了。一个男声,带着熬夜后的沙哑:“您好,科技处。”
      “我是虚拟犯罪调查科沈谛安。想问一下,今天发的那封关于净土系统补充数据的邮件,是你们发的吗?”
      电话那头停顿了一秒。这一秒很长,长得沈谛安能听见对方的呼吸声。然后那个男声说:“什么邮件?我们没有发过关于净土系统的邮件啊。你是说那个补充数据通知?那要等下周一才会发,还在走流程。”
      沈谛安的心脏猛地收缩了一下。他感觉胸腔里有什么东西被攥紧了,血液涌上头顶,耳朵里嗡嗡作响。他强迫自己冷静下来,说:“好的,打扰了。”然后挂断电话。
      听筒放回座机时,他的手微微发抖。
      他立刻断开那台电脑的网络连接——拔掉网线,关闭无线网卡,甚至把蓝牙也关了。然后才打开那个附件。压缩包里的内容他用十六进制编辑器看过,只有一个可执行文件:“format_tool.exe”。没有其他隐藏文件。
      他没有运行。他打开虚拟机,在一个与物理机完全隔离的沙箱环境里,双击那个文件。
      屏幕上,一个命令行窗口闪了一下,然后弹出一个进度条,显示“正在解析数据格式……”。进度条平滑地前进,10%、30%、50%、70%、90%、100%。然后窗口关闭,一切恢复正常——看起来就像什么都没发生过。
      但沈谛安知道,一定有东西留下了。
      他检查沙箱的内存转储。没有异常进程,没有可疑线程,没有隐藏模块。检查磁盘写入记录。没有新文件,没有修改过的系统文件,没有注册表改动。检查网络连接。沙箱的网络是断开的,木马不可能向外发送数据。
      一切正常得反常。正常得让他后背发凉。
      就在他准备放弃、准备重新分析那个可执行文件的代码时,屏幕中央突然弹出一个对话框。
      不是Windows的系统对话框,也不是任何常见软件的弹窗。那是一个纯黑色的窗口,没有任何边框,没有任何按钮,只有中间一行白色的小字。字体很细,像是某种手写体,但仔细看又不是——那是用像素点阵拼出来的,每一个笔画都带着微小的锯齿。
      “您的数据格式已解析完成。如需查看结果,请点击确认。”
      沈谛安没有点击。他盯着那行字,手指在键盘上悬着,大脑在飞速运转。这是一个钓鱼邮件。一个极其精准、极其专业的鱼叉式钓鱼攻击。对方伪造了省厅的邮箱,掌握了净土系统压力测试的日程,甚至知道他会先验证邮件真伪——那个“48小时”的时间陷阱,就是为了让他产生怀疑,从而在验证后放下警惕,打开附件。
      但为什么?如果是为了窃取数据,这个木马应该静默运行,不应该弹窗暴露自己。
      他点开了虚拟机的进程管理器,找到那个弹窗的进程,试图附加调试器。就在他准备操作时,那行白字消失了,取而代之的是一串新的字符:
      “S2VsbCBZb3UgRm91bmQgTWUu”
      那些字符是白色的,在黑色背景上格外显眼。沈谛安看着它们,心跳开始加速。那是Base64编码——他太熟悉了。他复制下来,在另一个窗口里用标准的Base64解码:
      “Kell You Found Me.”
      不对。这不是英文,Kell是什么?他重新检查编码,发现字母表顺序被改过了。这不是标准的Base64,而是某种变种——常见的有几种,比如用不同的字符映射表,或者打乱顺序。他花了几分钟写了一个脚本,暴力尝试常见的变种。到第八种时,解码成功:
      “如果你找到了我——”
      后面还有内容,但被截断了。解码出来的只是第一行。
      沈谛安盯着屏幕,忽然意识到一件事:这个弹窗不是木马的恶意行为,而是木马的——邀请函。对方的目标不是窃取数据,而是让他发现这个弹窗,然后被引导去解密密文。这是一场游戏,一场考验,一次——对话。
      他继续分析那个弹窗进程,发现它在关闭之前,往沙箱的临时目录里写入了一个加密文件。文件名是一串随机字符:“7f3a8c9d2e1b4f5a”。他把那个文件复制出来,打开,里面是一段看起来毫无意义的十六进制数据:
      “4B 65 6C 6C 20 59 6F 75 20 46 6F 75 6E 64 20 4D 65 2E 0A 59 6F 75 20 41 72 65 20 4E 6F 77 20 4F 6E 20 54 68 65 20 4C 69 73 74 2E”
      他把这段十六进制转成ASCII,得到一行英文:
      “Kell You Found Me. You Are Now On The List.”
      又是那个变种的Base64?他把这行英文用同样的方式解码,这次得到了一个完整的句子:
      “你在找的,也在找你。”
      沈谛安的手指僵在键盘上。指尖能感觉到键帽的微凉和轻微的磨砂质感,但那一刻,他感觉不到自己的手指。他感觉整个人都被定住了,只有心脏在狂跳。
      他在找的——三十七个伪造记录,N-37节点,药资,蒲公英。那个“也在找你”的人,就是弹出这个对话框的人,就是那个在链上留下“zkp_fake_clean_07”的人,就是那个自称“K”的人。
      对方一直在看着他。从他发现第一个异常开始,从他写下那个渗透脚本开始,从他按下回车键开始,对方就看着他,知道他会追查下去,知道他会发现那个弹窗,知道他会一步步走进这个精心设计的——邀请。
      他忽然有一种奇怪的感觉。不是恐惧,不是愤怒,而是一种被看穿的、赤裸的、无所遁形的羞耻感。就像一个人在黑暗中自以为隐秘地行走,却不知道头顶一直有一盏灯照着,每一步都被看得清清楚楚。还有一丝——敬畏。对方了解他。了解他的工作习惯,了解他的技术手段,了解他会如何验证邮件的真伪,了解他会如何分析木马。对方甚至了解他一定会打开那个附件——因为对方知道,他不会放过任何一个疑点。
      就像一场提前写好的剧本,他只是按照剧本,一步步走向预定的位置。
      他靠在椅背上,闭上眼睛。眼皮后面有暗红色的光晕在浮动,那是视网膜残留的影像。他深吸一口气,又缓缓吐出。办公室里的空气很干燥,带着一股淡淡的臭氧味——那是电子设备长时间运行后产生的味道。他睁开眼睛,重新看向屏幕。
      那个加密文件还在。他需要解开它。
      第二天上午十点,沈谛安把那个加密文件交给了科里的密码分析工具。
      工具运行了六个小时,没有结果。他坐在电脑前,看着进度条一次又一次地从头走到尾,然后弹出“解密失败”的提示。常用的字典、彩虹表、暴力破解,都试过了,解不开。那个加密算法不是标准的AES或RSA,而是一种他没见过的方式——对称加密,但密钥长度和生成方式都极其特殊。他试着逆向那个木马,想找出加密算法的实现,但木马在运行后就自毁了,留下的只有那个加密文件。
      下午三点,他正在重新分析那个文件的结构时,手机响了。是陆天明。
      “到我办公室来一趟。”陆天明的声音很平静,但沈谛安听出了平静下面的一丝不同寻常。
      陆天明的办公室里还有一个陌生人。四十岁左右,穿着件旧夹克,领口磨得发白。头发乱糟糟的,不是那种故意的乱,而是真的没有打理过——有几缕垂在额前,遮住了半边眉毛。眼窝深陷,像是熬了很多夜,但眼睛很有神,是那种常年做实验的人特有的专注。他坐在沙发上,手里捧着一杯茶,没有喝,只是捧着,目光落在茶杯上方的虚空处,像是在思考什么。
      “这是海关缉私局的老韩,”陆天明介绍,“韩启明,他们科最近在做新型毒品的光谱特征库。”
      沈谛安和老韩握了手。老韩的手很粗糙,指节粗大,指腹有厚厚的茧——那是常年握着移液枪和试管留下的痕迹。握手的力度很轻,但很稳。
      “叫你来是有件事,”陆天明说,他的桌上也放着一杯茶,已经凉了,没动过,“老韩他们最近检测到一批新型毒品,光谱特征和以往都不一样。他们怀疑是‘星尘2.0’。”
      沈谛安听到“星尘2.0”这个词,心里动了一下。那是那个“蒲公英”文件里提到的——三年无忧记忆的买家,跟踪“星尘2.0”的物流光谱。他感觉有什么东西在脑海里一闪而过,太快了,没抓住。
      “光谱数据能给我看看吗?”他问。
      老韩从包里掏出一个平板。那个平板的外壳上有几道划痕,边角也磕破了,是经常带出去的痕迹。他调出一张图谱,把平板递给沈谛安。那是一张紫外吸收光谱图,横坐标是波长,从200纳米到400纳米,纵坐标是吸光度。在280纳米的位置,有一个尖锐的特征峰,像一根刺,扎在平滑的曲线上。那个峰的顶端很尖,半峰宽很窄,说明这是一种纯度很高、结构很独特的化合物。
      “这是溴代□□衍生物的特征峰,”老韩指着那个峰说,他的声音有点沙哑,但很清晰,“以往的毒品里没见过这个结构。我们查了国际数据库,只有三篇论文提到过,都还是理论阶段。但这里,我们已经查获了实物。”
      沈谛安盯着那个峰,盯着那个精确的数值:280.37纳米。他的脑海里忽然闪过那个加密文件。他有一个直觉,疯狂但强烈的直觉——那个密钥,可能就在这张图里。
      “这个数据,能给我一份吗?”他问。他的声音很平静,但心跳已经开始加速。
      老韩看了陆天明一眼。陆天明点了点头,什么也没说。
      回到办公室,沈谛安把那份光谱数据导入了密码分析工具。他的手心有点出汗,手指在键盘上有点滑。他用纸巾擦了擦手,然后开始尝试。
      他不是用整个数据作为密钥——那样太长了,有几百个数据点。他试着用那个特征峰的精确数值:280.37纳米。
      输入,解密。进度条走到100%。“解密失败”。
      他又试了吸光度:0.892。
      “解密失败”。
      他试着把两个数值拼接起来:280.370.892。
      “解密失败”。
      他靠在椅背上,闭上眼睛。椅背有点硬,硌得后背疼,但他没在意。他在想:对方是什么人?一个精通网络技术的人,一个知道净土系统核心机密的人,一个——还会化学的人?
      化学。
      他重新睁开眼睛,看着屏幕上的那个加密文件,看着那串十六进制数据。如果对方把化学和密码学结合起来,会怎么做?不是用数值本身作为密钥,而是用数值经过某种变换后的结果。比如——哈希值。
      他把“280.37”和“0.892”拼接成一个字符串:“280.370.892”。然后计算了SHA256。那串哈希值很长,64个十六进制字符。他用这个哈希值作为密钥,尝试解密那个文件。
      屏幕上,进度条开始走动。1%、5%、10%、20%——这一次,进度条走得比以往都慢,像是在进行复杂的运算。30%、40%、50%——
      成功了。
      解密后的文件只有一行字。那行字是黑色的,在白色的编辑框里显得格外刺眼:
      “他们在用你筑的墙,搭建新神殿。想看清,跟踪‘星尘2.0’的物流光谱。”
      沈谛安盯着那行字,一动不动。他感觉自己的呼吸都停了。
      你筑的墙——净土系统。那是他参与设计、审计、测试的系统,那是他用无数个日夜筑起的数据高墙,那是他认为能挡住所有不该进来的人的保护屏障。他曾经为它骄傲,为它熬夜,为它反复检查每一行代码。他在心里把它当成自己的作品,自己的孩子。
      新神殿——建造在墙里的神殿。用他的墙,搭建他们的神殿。他们是谁?神殿里供的是什么?他不知道,但他能感觉到那背后的黑暗。
      他忽然想起陆天明说的那句话:有些墙,不是用来挡住外面的人,而是用来让里面的人看不见彼此。
      他们用他的墙,遮住了自己的影子。而他,还在墙外拼命地砌砖,以为自己在守护什么。
      十分钟后,沈谛安再次坐在陆天明的办公室里。
      这一次,他把所有东西都摊开了。打印出来的邮件截图,钓鱼木马的分析报告,那个加密文件,解密后的那句话,还有他整理的整个时间线——从N-37节点的异常开始,到三十七个伪造记录,到药资的发现,到蒲公英的弹窗,再到今天的解密。
      陆天明一份一份地看。他看得很慢,每一页都要看好几分钟。他的脸上没有表情,只有眼睛在动,从左到右,从上到下,像扫描仪一样。办公室里很安静,只有纸张翻动的沙沙声。
      窗外的光线在变化。下午的阳光从西边斜射进来,在地板上投下一道金黄色的光带。光带里有细小的尘埃在浮动,缓慢地、无意义地盘旋。随着时间的推移,光带慢慢移动,爬上墙壁,最后消失不见。黄昏来了。
      陆天明看完最后一页,把材料放下。他沉默了很久,久到沈谛安以为他不会说话了。然后他站起身,走到茶几旁边。那里有一套茶具,是他前几天带来的——老伴说他不会生活,让他练练泡茶。他动作生疏地烧水、温杯、投茶、注水,手法笨拙得像个刚学做饭的人。
      “老伴说我不会生活,让我练练。”他一边泡茶一边说,头也没抬,“你说,我都五十二了,还能学会吗?”
      沈谛安没回答。
      陆天明泡好两杯茶,推过一杯给沈谛安:“喝了再走吧。”
      沈谛安端起茶杯。茶汤颜色很淡,泡得太浅了。
      陆天明回到办公桌前坐下,双手交叠放在桌上,看着沈谛安。他的声音比平时更沉,更哑,像是从很深的地方发出来的:
      “谛安,你知道我做了多少年警察吗?”
      “三十年。”
      “三十年里,我见过很多事。”陆天明的声音很沉,“有些事,有答案。有些事,没有。有些事,有答案但你不能说。有些事,有答案但你说了也没用。”
      他顿了顿,眼神里有某种复杂的东西——疲惫,了然,还有一点点沈谛安从未见过的——决绝。
      “但这个,”他指了指桌上的材料,“不一样。这个,已经超出了我能处理的范围。”
      沈谛安等着他说下去。他感觉自己的心跳很慢,很稳,像是在等待什么不可避免的事情发生。
      “我不是技术人员,但我看得懂。”陆天明看着他,“对方能侵入你的电脑,能绕过你设下的所有防线,能知道你在查什么,还能用海关的光谱数据做密钥——这不是一个人能做到的。这是一个团队,一个懂技术、懂化学、懂我们内部运作的团队。”
      他顿了顿:“而且,他们在帮你。”
      沈谛安没有说话。他知道陆天明说的是对的。那个K,不管他是谁,不管他的目的是什么,他在用他的方式,把线索递到他们手里。那些伪造的记录,那个蒲公英地址,那个用光谱数据加密的信息——都是在帮他们看见那些被遮住的东西。
      “所以我们现在面对的是什么?”陆天明问,“一个犯罪组织?一个黑客团伙?还是别的什么?”
      “我不知道。”沈谛安说。他的声音很平静,但每一个字都像从心里挖出来的。“但我知道,如果那个‘新神殿’真的建成了,净土系统就不再是保护公民隐私的工具,而是他们洗白犯罪、隐藏交易的——帮凶。”
      陆天明点了点头。他沉默了几秒,然后做出了一个决定。那个决定像是从他身体里很深的地方升起来的,带着一种释然,也带着一种沉重。
      “我需要一个团队,”他说,“一个能处理这种事的团队。不归常规编制管,不按常规流程走,能自己决定调查方向,能调用一切需要的资源。”
      他看着沈谛安:“你负责。”
      沈谛安愣了一下:“我?”
      “你有技术,有经验,有执念。”陆天明说,“最重要的是,你不会停下来。这件事,需要一个不会停下来的人。”
      他拿起桌上的电话,拨了一个号码。等了几秒,说:“老李,是我。有个事,需要你批一下……对,虚拟犯罪调查科,级别特殊,人员特殊,直接向我汇报……好,材料明天送过去。”
      他放下电话,看着沈谛安:“成了。从现在开始,你找人,你组队,你负责。需要什么,跟我说。”
      沈谛安点了点头。他脑子里已经开始转动——需要什么人?需要什么资源?需要什么权限?但他心里更多的是一种复杂的感觉。是被信任的温暖,是被重压的恐惧,还有一点点的——希望。
      陆天明像是看穿了他的心思,说:“有一个人,你应该见见。”

      江弈是被陆天明从看守所里直接提出来的。
      沈谛安没有和他一起去,但陆天明回来后,给他看了一段视频。那是看守所的监控录像,拍的是江弈被提审前的样子。
      画面里,江弈坐在号房的角落里,背靠着墙,双腿伸直,双手搭在膝盖上。他穿着灰色的号服,头发很长,乱糟糟地垂下来,遮住了半边脸。他盯着对面的墙壁,一动不动。墙上什么都没有,只有斑驳的涂料和几道划痕。但他就那么盯着,像是在看什么别人看不见的东西。
      画面是静止的,只有右下角的时间在跳动。一分钟,两分钟,五分钟,十分钟。他一直保持那个姿势,连眼睛都没眨一下。只有偶尔,他的嘴唇会动一下,像是在说什么,但没有声音。
      “他在看守所里待了三周,”陆天明说,“三周,没和任何人说过一句话。狱警以为他是哑巴,但送饭的时候他会点头,会摇头,就是不出声。”
      沈谛安看着屏幕上的那个人。那张脸很年轻,二十八九岁的样子,但眼神里有一种很老的东西。那种老不是年龄的老,是经历过太多之后的那种——疲惫,或者说是空洞。
      “他的朋友叫林远,”陆天明继续说,“从小一起长大,一起学编程。后来林远因为吸毒过量死了。江弈花了两年时间追查那个卖毒品给他朋友的人,追到了那家科技公司的高管。他侵入服务器,拿到了证据,匿名发给了缉毒支队。但发完之后忘了清理痕迹,被抓了。”
      沈谛安看着屏幕上的江弈。那个空洞的眼神里,忽然有一点光闪了一下。他不知道那是什么,但他能感觉到,那是一种不会熄灭的东西。
      第二天,陆天明去提人。他站在号房的铁栏杆外面,看着里面的江弈。江弈还是坐在那个角落里,还是盯着那面墙。
      “江弈,”陆天明隔着铁栏杆喊他。声音在空旷的走廊里回荡。
      江弈没有动。
      “有一个机会。”陆天明说,“你可以出来,继续做你想做的事。但不是一个人,而是和我们一起。”
      江弈慢慢转过头。他的动作很慢,像是很久没有动过,肌肉都僵硬了。他看着陆天明,眼神里没有任何情绪——不是冷漠,是真正的空。
      “什么机会?”他的声音很沙哑,像是生锈的铁器摩擦。
      “加入一个团队。追查一种毒品。找到那些制造它、贩卖它、用它杀人的混蛋。”
      江弈沉默了几秒。那几秒很长,长到陆天明以为他不会回答了。然后他说:“我为什么要相信你?”
      “你不用相信我,”陆天明说,“你相信你自己就够了。”
      江弈盯着他看了很久。然后他站起来,走到铁栏杆前面。他的脚步很轻,像是踩着云。他站在陆天明面前,隔着铁栏杆,看着这个穿着半旧夹克的中年人。他的眼神里还是空的,但那空里,好像有什么东西在慢慢成形。
      他点了点头。
      江弈被带到虚拟犯罪调查科的那天,是3月18日,下午两点。
      沈谛安在办公室里等他。他提前收拾了一下桌面,把那些乱七八糟的线缆理了理,把空咖啡杯扔进垃圾桶。他不知道为什么要这么做,只是觉得应该。
      门推开的时候,他看见一个穿着皱巴巴连帽衫的年轻人走进来。那件连帽衫是灰色的,胸前印着一个褪色的科技公司logo,袖口磨得起了毛边。头发乱得像鸡窝,有几缕垂在额前,遮住了眼睛。他走进来的时候,脚步很轻,几乎没有声音。
      然后他抬起头,露出那双眼睛。
      沈谛安愣了一下。那双眼睛很亮,亮得惊人。不是温和的、友善的亮,而是一种锐利的、像刀锋一样的亮。那种亮让沈谛安想起一种动物——不是狼,是鹰。那种在高空盘旋、盯着地面每一丝动静的鹰。
      “沈谛安,”沈谛安伸出手,“虚拟犯罪调查科负责人。”
      江弈握了一下他的手。那只手很瘦,但很有力,手指很长,骨节分明,是一双常年敲键盘的手。握手的动作很短暂,一触即放。
      然后江弈的目光落在沈谛安的电脑屏幕上。那里还开着那个加密文件的解析界面,还有那张光谱图,还有那行解密出来的话。
      “你在解什么?”他问。声音很平静,但带着一种天然的警觉。
      沈谛安没有隐瞒。他把整件事从头到尾说了一遍。从N-37节点的异常开始,到三十七个伪造记录,到药资的发现,到蒲公英的弹窗,到那封钓鱼邮件,到用光谱数据解密出的那句话。他说得很详细,每一个技术细节都没有放过。他说了半个小时,江弈就听了半个小时,没有插一句话,只是眼睛一直盯着屏幕。
      说完之后,沈谛安靠在椅背上,等着他的反应。
      江弈沉默了很久。然后他走到沈谛安的电脑前,坐下来。他的动作很自然,好像那是他自己的电脑。他开始看那些数据——N-37节点的流量日志,伪造记录的随机数解码,蒲公英地址的追踪记录,加密文件的十六进制结构,光谱图的特征峰。
      他的动作很快。手指在键盘上飞舞,屏幕上的窗口一个接一个地打开、关闭、打开、关闭。他的眼睛跟着光标移动,眨眼的频率很低,像是在进入某种状态。沈谛安站在旁边看着,没有打扰。
      十分钟后,江弈停下来。他靠在椅背上,闭上眼睛,像是在思考。然后他睁开眼睛,转过头看着沈谛安,说了一句话:
      “这个K,不是敌人。”
      沈谛安看着他:“你怎么知道?”
      “他如果想害你,早就能害了。”江弈指着那个加密文件,“这个木马,完全可以植入一个后门,长期潜伏,窃取你所有的数据。但他没有。他只是留了一个信息,然后自毁了。他在——提醒你。”
      沈谛安没有说话。他也想过这个可能,但一直不敢确定。现在从江弈嘴里说出来,像是印证了什么。
      “而且,”江弈继续说,“他用的那个加密方式,是把化学数据和密码学结合起来。这不是普通黑客能做到的。这个人,要么是化学家转行做黑客,要么是黑客自学了化学。不管哪一种,都说明一件事——”
      他转过头,看着沈谛安,眼神里有一丝罕见的认真:
      “他在用自己的方式,帮我们看清真相。”
      沈谛安沉默了几秒。他看着江弈,看着那双锐利的眼睛,忽然有一种奇怪的感觉——这个人,和他一样,心里有一道不会愈合的伤口。只是他的伤口是六年前的搭档,而江弈的伤口是那个叫林远的朋友。
      “你愿意加入吗?”他问。
      江弈没有立刻回答。他转回头,看着屏幕上那些数据,看着那个解密的文本——“他们在用你筑的墙,搭建新神殿”。他看了很久,像是在读那行字背后的东西。
      很久之后,他说:“我有一个条件。”
      “说。”
      “如果最后找到那些用‘星尘’杀人的人,”江弈的声音很轻,但每一个字都像钉子一样,钉进空气里,“我要亲手抓住他们。”
      沈谛安看着他,看到了他眼神里那种燃烧的东西。那是仇恨,是痛苦,是无法愈合的伤口——就像他自己一样。他知道那种感觉。他知道那种夜里睡不着、一遍遍回想、恨不得把那些人撕碎的冲动。
      “成交。”沈谛安说。
      那天晚上,沈谛安和江弈一起加班到凌晨。
      办公室的灯还亮着,惨白的光照在两个人的脸上。江弈坐在沈谛安旁边的工位上,那台电脑是简晞的,但她今天不在——沈谛安还没来得及通知她。江弈用那台电脑调出了内部数据库里所有关于“星尘2.0”的缉毒报告。
      结果出乎意料。
      近半年来,“星尘2.0”被提及的次数只有七次,查获的实物只有三批,加起来不到五十克。而在黑市上,“星尘2.0”的口碑已经传遍了整个暗网——沈谛安让江弈登录了几个卧底账号,看到了那些聊天记录。有人说它比第一代更纯净,有人说它不会上瘾,有人说它是“通往天堂的钥匙”。有人在求购,有人在炫耀,有人在问哪里能买到。
      这说不通。
      如果一个毒品在黑市上如此受欢迎,查获量应该会大幅上升。毒品犯罪有一个规律:需求越大,流通越广,被警方查获的概率就越高。这是统计学上的必然。但这里,查获量和口碑之间存在着巨大的落差。
      除非——
      “除非有人在保护它,”江弈说。他的声音很轻,但在安静的办公室里格外清晰。“不让它出现在常规的缉毒视线里。”
      沈谛安点了点头。他也想到了这个可能。有人在他们内部,屏蔽了关于“星尘2.0”的信息,或者把它标记为“普通毒品”,让一线缉毒人员不会特别关注。这样,真正的“星尘2.0”就可以在某个特殊的渠道里流通,供给特定的人群。
      “专供特定渠道,”他说,“给特定的人,在特定的场合,用特定的方式流通。”
      江弈调出那七次提及“星尘2.0”的报告,开始分析时间、地点、查获方式。他把数据投到墙上,用投影仪放出来。那些数据点在地图上散落着,主要集中在几个区,但没有什么规律。
      然后他开始分析查获的样品。那些样品的检测报告里都有光谱图。他把那些光谱图调出来,和海关那张“星尘2.0”的光谱图并排放在一起。
      一眼就能看出区别。
      海关的那张图,在280.37纳米有一个尖锐的特征峰。而那七次查获的样品,有的在那个位置有一个很平缓的峰,有的什么都没有,有的甚至完全不同的波形。
      “这不是‘星尘2.0’,”江弈说,“这是假的。或者说是稀释过的,用来投放给底层市场,混淆视听的。”
      沈谛安凑过去看那些报告。江弈说得对,那些查获的“星尘2.0”,光谱特征和海关检测的完全不一样——没有那个280.37纳米特征峰。它们只是普通的□□类毒品,被贴上了“星尘2.0”的标签。
      真正的“星尘2.0”,从来没有出现在缉毒报告里。
      “它被保护起来了,”沈谛安说,“有人在我们内部,把真正的‘星尘2.0’从缉毒数据库里抹掉了。或者,从来没有让它们进入数据库。”
      江弈沉默了几秒。他盯着那些光谱图,眉头紧锁。然后他说:“所以K说的‘跟踪物流光谱’,是什么意思?”
      沈谛安想了想,调出海关的进口数据库。如果把“星尘2.0”的特征峰作为一种“光谱指纹”,理论上可以追踪所有含有这种物质的货物——不仅是毒品本身,还包括它的前体、原料、以及生产过程中产生的副产物。那些东西在进口的时候,会被海关抽检,会产生光谱数据。如果他们在那些数据里检索这个特征峰,就能找到和“星尘2.0”有关的进口记录。
      “他让我们用化学的方法,追踪它的来源和流向,”沈谛安说,“不是用警方的情报网,而是用海关的检测数据。”
      江弈点了点头。他开始在海关数据库里检索那个特征峰——280.37纳米,上下浮动0.05。他写了一个脚本,让程序自动比对所有进口化工原料的紫外吸收光谱。
      十分钟后,屏幕上弹出一条记录。
      那是一批从东南亚进口的化工原料,申报品名是“医药中间体”。抽检时发现了一个可疑的紫外吸收峰——280.35纳米,和“星尘2.0”的特征峰高度吻合,误差在允许范围内。
      收货方是一家名叫“明远生物科技”的公司。
      沈谛安看到那个名字,心跳漏了一拍。
      明远科技——N-37节点的租用方。
      他看向江弈,江弈也看着他。两个人都没有说话,但都明白这意味着什么。
      明远生物科技,就是N-37节点的幕后公司。而它进口的那批化工原料,可能就是制造“星尘2.0”的原料。
      证据链,开始闭合了。
      凌晨三点,沈谛安锁起硬盘,站起身走到窗边。
      窗外是沉睡的城市。远处的高楼还有几盏灯亮着,像是黑夜里的孤岛。近处的街道空无一人,偶尔有出租车驶过,车灯在地上拖出一道长长的光痕。天空是深蓝色的,没有星星,只有几缕薄云在月光下缓缓移动。
      他推开窗户,一股凉风涌进来。风里有春天的气息——湿润的泥土、刚刚发芽的树叶,还有一点点汽车尾气的味道。他深吸一口气,感觉肺里凉凉的,很舒服。
      江弈还在电脑前。他坐在那里,手指偶尔敲一下键盘,偶尔停下来,盯着屏幕发呆。他的侧脸被屏幕的冷光照得发白,那种燃烧的眼神在黑暗里格外醒目。沈谛安看着他的侧影,忽然想起六年前的自己。
      那时候他也是这样。不知疲倦,不知畏惧,相信只要足够努力,就能抓住所有坏人。他每天熬夜,每天追踪线索,每天和数据搏斗。他相信数据不会说谎,相信技术能筑起完美的墙。
      后来那堵墙塌了。他从废墟里爬出来,学会了怀疑,学会了计算,学会了在每一次行动前问自己:如果这次又错了,会死多少人?
      但现在,他看着江弈,看着那双燃烧的眼睛,忽然觉得——也许有些东西,不该被怀疑磨灭。也许有些火焰,需要被保护。也许,在学会怀疑之后,还需要学会重新相信。
      他转过身,重新看向窗外。
      城市的万千数据流在夜色中涌动,像无数条看不见的河流。在那些河流的深处,有一个自称“K”的人,正在某个角落,看着他们,引导他们,或者说——利用他们。但至少,他们现在在一起了。
      沈谛安没有看到的是,在他身后的屏幕上,一个新的弹窗正在生成。
      那是一个纯黑色的窗口,和之前那个一模一样。中间有一行白色的小字:
      “欢迎加入游戏。下一关:明远生物科技的实验室,在临市工业园区3号厂房的地下二层。你们的同事简晞,已经在那里等你们了。”
      弹窗停留了五秒,然后消失,没有留下任何痕迹。没有写入日志,没有修改注册表,没有留下任何可以追查的线索。
      只有江弈的余光捕捉到了什么。他转过头,屏幕上一切正常。但他知道,那不是幻觉。他感觉到了——那种被注视的感觉,那种有人在暗处看着他们的感觉。
      有人在看着他们。
      一直在看着。
      江弈没有告诉沈谛安。他转回头,继续盯着屏幕,手指在键盘上轻轻敲了一下。那是一句没有发出的消息,写给那个看不见的人:
      “我们来了。”

      凌晨四点二十分,沈谛安回到空无一人的家。
      玄关的灯没开,他摸黑换了鞋,走进厨房。冰箱的门上贴着一张便签,是妈妈的字迹,写得一笔一划,像小学生:“饺子在冷冻层,热透再吃。”
      他盯着那张便签看了几秒。妈妈上周来的,待了三天就走了——他每天早出晚归,连顿饭都没陪她吃。临走时她什么都没说,只是把冰箱塞满了。
      他打开冰箱,拿出一袋饺子。站在厨房里等水开的时候,他看着窗外。城市的霓虹还在闪烁,像一堆没熄灭的余烬。锅里的水慢慢冒起热气,然后翻滚起来。他把饺子倒进去,用勺背轻轻推了推,防止粘锅。
      水汽升腾起来,模糊了窗户。他看着那些翻滚的饺子,忽然想起父亲生前说过的话。那是一个冬天的晚上,他熬夜整理案子的线索,父亲端着一碗面进来,放在他手边。他说“爸你先睡”,父亲没动,站在旁边看了他很久,然后说:
      “爸不是不让你盖楼,是怕楼还没盖完,盖楼的人先垮了。”他顿了顿,声音低下去,“但爸也知道,那楼只有你能盖成这样。”
      那时候他不明白这句话的意思。现在他看着锅里翻滚的饺子,好像有点懂了。
      饺子熟了。他捞出来,站在厨房里吃完。汤有点烫,他吹了吹,一口一口喝下去。
      吃完他把碗洗了,放回碗架。然后走进卧室,和衣躺在床上。窗外还有车声,远远的,像潮水。
      他闭上眼睛。睡着之前,脑子里闪过一个念头:明天,得给妈妈打个电话。

  • 昵称:
  • 评分: 2分|鲜花一捧 1分|一朵小花 0分|交流灌水 0分|别字捉虫 -1分|一块小砖 -2分|砖头一堆
  • 内容:
  •             注:1.评论时输入br/即可换行分段。
  •                 2.发布负分评论消耗的月石并不会给作者。
  •             查看评论规则>>