技术科在市公安局主楼五层,走廊尽头没窗户的那一间。
许怀舟进去的时候,姚琳正对着一排显示器,屏幕上密密麻麻全是十六进制的代码。她没回头,只抬了一下下巴算是打了招呼。
“过来看看。”她说。
许怀舟搬了把椅子坐到她旁边。显示器上开了好几个窗口,其中一个窗口的画面他看了好几秒才认出来——那是宋菲手机的操作界面。
“系统恢复了?”他问。
“恢复了一部分。”姚琳敲了两下键盘,画面切到另一个窗口,“手机被做了出厂重置,但这种操作不可能把数据彻底清干净。底层存储芯片里残留了一些碎片,我给拼回来了大概百分之四十。”
屏幕上跳出一段加密的通讯日志。
“这是他死前三天内唯一一条对外发送的信息。”姚琳指着屏幕上的某一行,“不是短信,不是微信,走的是一个非公开协议。”
“内容呢?”
“内容是加密的。但我找到了接收端——不是一个人,是一个服务器节点,部署在境外。”
许怀舟盯着那行代码看了一会儿,什么也看不懂。他把椅子往后一靠:“意思是,有一个境外的服务器,接收了他死前发出的消息。然后呢?”
“然后——对方回他了。”
姚琳切到另一个画面。
“这是他手机最后一次接收数据的记录。时间凌晨一点五十八分,距他的死亡时间大约一小时。我从碎片数据里还原出了一段视频文件的缓存。”
“视频?”
“对。”姚琳转过椅子,看着许怀舟,“不是普通的视频文件。是一个直播流的数据片段——手机接收了一个直播信号,持续了大约三分钟。然后信号中断,再也没有恢复过。”
许怀舟没说话。
姚琳的显示器上,一个视频播放器窗口已经打开了。画面是黑的,底部有一条时间轴,长度只有三分钟。
她说:“你要看一下吗?”
许怀舟看了她一眼,然后看向屏幕。
姚琳按下了播放键。
画面亮起来。
画质很差,明显是夜间模式拍摄的。画面中心是一堵红砖墙,墙面上有些斑驳的水渍,墙脚堆着几个黑色的垃圾袋。
许怀舟认出那面墙了。
那是后巷东侧的墙。
画面上没有人。但能听到声音——风声,远处偶尔的车声,最下层,有一种细微的、有节奏的声响。
是呼吸声。
有人在拍。
镜头晃了一下。画面偏移了几度,然后屏幕的右下角出现了字幕。字不大,白底黑边,一行一行地跳出来:
「第47期冷冻游戏」
「参赛者:北极星」
「环境温度:摄氏2度」
「倒计时:180分钟」
许怀舟的视线停在那几行字上。
画面继续。镜头从红砖墙往下移,移到一个垃圾桶的侧面。桶旁的地上放着一叠衣服——一件灰色卫衣,里面是一件白色T恤。
叠得很整齐。
不像是被人随手扔在那里的,像是有人一件一件脱下来,提前叠好,码放在那里的。
字幕又跳了一行:
「脱衣阶段:已完成」
「低温适应:10分钟」
「正式挑战:即将开始」
画面里,那叠衣服旁边,出现了一只脚。然后是另一只脚。
是宋菲。
他从镜头外的某个地方走进了画面,全身**,只在腰间系了一条深色的布条——看起来像是从什么衣服上撕下来的。
他没看镜头。
他蹲下去,用手摸了摸那面红砖墙。动作很慢,像是在确认墙的温度。然后他在墙根坐下来,背靠着墙,把腿伸直,两只手搭在膝盖上。
像是一个准备好了的人。
画面上字幕继续跳动:
「挑战开始」
「祝你好运,北极星」
视频到这里就停了。
三分钟。前面两分钟是背景,后面一分钟是宋菲坐下来的画面。
姚琳关掉了播放器。
“后面的直播流呢?”许怀舟问。声音比他预想中要平淡。
“没有数据片段了。技术上说,要么是手机在直播过程中断开了连接,要么是直播源那边主动切断了推送。”姚琳顿了一下,“也可能,是手机的主人没有再操作下去。”
“什么意思?”
“直播需要手机端的配合。如果手机被放在口袋里,或者信号被屏蔽了,数据流就断了。死者临终前可能——已经拿不住手机了。”
许怀舟没接话。
他坐在椅子上,看了一会儿面前那排已经黑掉的显示器。屏幕反光里映出他自己的脸,表情看不太清楚。
“那个平台呢?”他问,“能追到吗?”
姚琳沉默了一下。
“追不到。”她说,“不是常规的网络架构。那个加密频道走的是P2P的隧道协议,每过一段时间节点就会自动切换,没有固定的服务器地址。我试了三次,三次的入口都不一样。像是——”
她停下来想了想。
“像是一个迷宫。而且墙会动。”
许怀舟转过椅子,看着窗外。
窗外还是那片铅灰色的天空。五楼的视野高一些,能看到远处的几栋高楼,楼顶的信号塔一只一只地竖在那里,像沉默的鸟。
“那要怎么进去?”他问。
姚琳摊了下手。表情里有一点不甘心。
“除非有另一种技术路线——不是我这种搞刑侦技术的出身能搞的。得找懂P2P加密底层的人,那种能在暗网里自己搭路由的天才。云城也不是没有这种人,但是——”
“但是什么?”
“这种人不会老老实实来报案。”
许怀舟站起来,在技术科的房间里走了两步。三分钟的视频,四百二十七个人,一个会动的迷宫。
“把手机和视频数据打包。”他说,“我去找方队。”
姚琳点了点头,转回身去。显示器重新亮起来,她的手在键盘上敲了几下,几行代码开始在屏幕上滚动。
许怀舟走到门口的时候,她头也没回地说了一句话。
“许队。”
“嗯?”
“那个视频我看了三遍。有个细节。”姚琳的手没停,眼睛一直在屏幕上,“字幕的最后一行——'祝你好运,北极星'。句号后面,还带了一个空格。”
许怀舟站住了。
“空格怎么?”
“那个空格不是打字习惯。是代码里自动带的——字幕的字库调用了某种编程语言的字符串拼接函数。程序员写代码的时候,字符串拼接默认会在结尾带一个空格。”
“所以?”
“所以开发那个直播平台的人,要么是不在意这种细节,要么——他是个喜欢显摆的人。这种小尾巴,故意不擦干净,是一种签名。”
许怀舟看着她的背影,等了两秒。
姚琳转过头来,对他笑了一下。
那笑容里有一点别的什么——不是轻松,更像是某种确信。
“会留下签名的人,不会只留一次。我继续找。”她说。
方远征的办公室在七楼,门开着,烟灰缸里的烟头已经满了。
许怀舟把手机数据、视频片段和加密频道的追踪结果放在他面前时,他只是看了一眼,没急着拿起来。
“四百二十七个人?”他问。
“直播间的实时观众数。技术科确认了。”
“除了那个加密频道,有没有别的直播入口?比如说普通网页、APP?”
“没有。只能通过那个频道进去,而且频道入口在不断变动。姚队试了三次,全部被redirect到不同的节点。”
方远征把烟头掐灭在烟灰缸里,发出沉闷的一声。
“所以我们现在是这个情况——”他伸出手来,一个一个地数,“死者身份刚确认。死因还没正式出,但基本可以确定是有计划的谋杀。直播平台上四百多个人看着一个人被冻死,没人报警。技术科——”他停了一下,“技术科目前的水平,追不进去。”
“对。”
方远征靠在椅背上,椅子发出吱呀一声。他看了许怀舟一会儿。
“你想怎么办?”
“找人帮忙。”
“谁?”
“云城大学有个学生,就是我跟你说过的那个小孩——全省CTF大赛第一的那个。”
方远征的表情没有变化,但手指在桌面上敲了两下。
“我想见见他。”许怀舟说。
“你知道他的底细吗?”
“档案我看过。他叫江屿,计算机系大三,二十一岁。技术能力——目前为止他遇到的所有考试和比赛,没有拿过第二。”
方远征沉默了很久。
窗外,远处云城的天际线沉默地横亘着。冬天天黑得早,刚过五点,天色已经开始暗下来了。七楼的窗户能看到一大片灰蒙蒙的天,和更远处隐隐约约的山影。
“你去见他可以,”方远征终于说,“但有一点——他不是警察,不是技术顾问,不是我们的线人。他是外人。”
“我知道。”
“让他看过材料就够了。别让他入行太深。”
许怀舟点了点头。
他走出办公室的时候,走廊的灯已经亮了。日光灯管发出轻微的嗡鸣声,白色的光照在地砖上,一片惨淡。
他拿出手机,翻开通讯录。
没有江屿的号码。他们从来没见过面。
但他认识一个人——省厅网安总队的老赵,当年就是老赵经手那孩子的事。
他拨通了老赵的号码。
嘟了两声之后,对面接了起来。
“喂,老赵,我怀舟。”
“哟,许队,稀客。”
“想跟你打听一个人。”
“谁?”
“江屿。”
电话那头安静了两秒钟。
老赵的声音压低了:“你找他干什么?”
“有个案子,需要懂技术的人帮忙看看。”
“什么案子?”
许怀舟站在走廊尽头,窗外第一盏路灯亮了起来。黄色的光落在湿漉漉的柏油路上,像一小片一小片碎掉的月亮。
“一个被直播的死亡。”他说。
电话那头又沉默了。这一次沉默得更久。久到许怀舟以为信号断了。
然后老赵说:“你等一下,我给你翻一下他的号码。但许队——”
“嗯?”
“那孩子不是你们局里那些按规矩办事的小孩。他十六岁就能在省厅的系统里来去自如——不是瞎猫撞上死耗子的偶然突破,是正儿八经的黑进了三层防火墙,在教务数据库里留了个txt文件,上面只写了一行字:'你们的密码该换了'。省厅当时请了三个安全公司来做溯源,折腾了两周才定位到他。你猜怎么着?”
老赵笑了一声。那笑声里没有恶意,倒是有几分说不清的意味。
“那三个安全公司的人看完他的代码之后,有俩HR当场给各自总部打了电话,问能不能直接发offer,刑责他们来帮扛。”
许怀舟没说话。
“你找他帮忙,”老赵继续说,“就要做好他不按你规矩来的准备。”