array(5) { ["chapterid"]=> string(8) "49252319" ["articleid"]=> string(7) "7279746" ["chaptername"]=> string(7) "第8章" ["content"]=> string(21681) "面包车在省道305上颠了四十分钟。
林哲把车窗摇到底。晨风灌进来,带着一股子湿润的草腥味。路边的野地里有几棵歪脖子构树,叶子被风吹翻了背面,灰白色的。倒悬山的天空在后视镜里越缩越小,最后变成一条灰蒙蒙的线,压在远处的地平线上。
副驾驶座上的手机震了一下。
他没看。
临市老城区的路牌在晨雾里渐渐清晰起来。春城南路的路标还和昨天一样,蓝底白字漆皮剥落,露出底下锈红的铁。林哲把面包车停在巷口,熄了火。引擎冷却下来,发出轻微的嗒嗒声。
五金店的卷帘门还关着。灯箱铁架框上停着一只灰鸽子,歪着头看他。
他绕到楼后面。铁楼梯在早晨的风里微微晃,扶手上的锈蹭在掌心里,粗粝的。二楼门口地上放着一个塑料袋。透明的一次性餐盒,里面装着两个包子,一袋豆浆。袋子底下压了张纸条,用圆珠笔写的——“巷口买的。趁热。”
林哲蹲下来。包子还温着,塑料袋里凝了一层水珠。他把纸条翻过来,背面还有一行字,笔迹更潦草。
“今天走。别等我。”
他把纸条折好塞进裤兜。站起来敲了三下门。
没人应。
又敲了三下。铁楼梯在风里咯吱响。晨风从巷子里灌进来,把门缝底下的广告单吹得翻了边。林哲伸手推了一下门——没锁。铁链扣垂在门框上,晃了一下,磕在金属门板上叮的一声。
客厅空了。
茶几还在,旧笔记本还在,烟灰缸还在。瓷缸子底上的豁口还在,里面多了两个烟头。但书架上的牛皮纸信封没了。角落里的行李箱没了。窗户上糊的报纸被撕掉了,晨光从玻璃外面直直地打进来,照在墙上一块长方形的印子上——那里挂过什么东西,取下来了。
桌上放着一张折叠椅搬动时刮出来的白印子。还有一张便签纸,压在烟灰缸底下。
林哲走过去拿起来。
“东西搬走了。灰域协议留给你,在你外套口袋里。密钥没了——我用掉了。春城南路17号今天起没人住。别找了。赵。”
他把便签纸翻过来。背面干干净净,没字。
烟灰缸旁边有个东西,银色的一小截。是U盘的外壳碎片,被踩扁了,金属壳裂开,里面芯片的边角露出来,断口很新。林哲捡起来放在手心里看。壳子上胶布的残迹还在,标签没了。
他攥紧那截碎片。金属壳硌在掌心里,凉的。
外套口袋。他伸手摸。右边口袋里多了一个U盘,塑料壳磨花了,没有标签。不是赵冬梅原来那个——这个更旧,接口的金属片有反复插拔留下的划痕。他拿出来的时候,一个角上粘着的小块胶布翘起来,上面用圆珠笔写了三个字母。
“GHO”。
灰域的缩写,少了最后两个。
他把U盘攥在另一只手心里。两只手都攥着。左边是踩碎的旧U盘,右边是新的。冷气和体温在掌心里交换。他站了一会儿,把两样东西都放进背包夹层里,拉上拉链。
冰箱没响。整栋楼都很安静,只有巷子里风吹广告单的沙沙声。墙角挂历还在,翻到的那一页还是三年前的六月,褪色的海,不是蓝的,是某种说不清颜色的青。
林哲走到窗边。玻璃外面,老城区的屋顶在晨光里铺展开去,拆了一半的楼房露出红砖和电线。远处23路公交进站,柴油发动机的突突声隔着两条街传过来。有人拎着菜篮子从巷子里走过去,踩到积水,溅起一片泥点子。
他把视线收回来。
烟灰缸旁边还有一样东西。是那张牛皮纸信封里抽出来的工单复印件,折得四四方方,压在烟灰缸底下和林哲那张便签纸之间。纸面被烟灰烫了三个小洞,排成一条线,像是有人拿烟头一个挨一个摁上去的。烫痕边缘焦黄,透着烟灰的灰色。
林哲把复印件拿起来。纸页边缘的折痕已经很深了,快破了。他打开看了一遍。技术文档、工单编号、签名栏,数据管理部的红色公章——全都和昨晚看到的一样。最后一页的“灰域项目清理方案”被荧光笔画出来的那行字旁边,多了几笔。不是荧光笔,是黑水笔,划了一道横线,穿过“协议终止”四个字。
横线下面写了一行小字,赵冬梅的笔迹,很轻。
“协议终止过一个人。我前夫。他在被终止之前把灰域协议的源码发给了我。发完五分钟,他的社保记录清零。”
下面还有一行字,更轻,像是怕自己写重了。
“我没能把他从系统里拿回来。”
林哲盯着最后那行字。手指压在复印纸边缘上,指腹感觉到纸张受潮之后的粗糙纹理。
他把工单折好,放进背包里。
茶几上的旧笔记本合着。他打开,屏幕亮了,电量还有半格。桌面还是那张褪色的海。回收站里有个文件,没清空。他点开。文件名是一串乱码,创建时间是今天凌晨四点五十二分。文本文件,里面只有一行字。
“U盘里不是灰域协议。是灰域协议加上一个清理脚本。运行之后它会自动删掉所有挂载在灰域节点上的数据——包括源文件、工单和我的证言。你做完逆协议之后,灰域会自动清理你那边的痕迹。这边我手动清。双向擦除之后,系统里不会有任何关于退订的记录。倒悬山查不到是谁做的。”
林哲把笔记本合上。屏幕暗了,倒映出他自己的脸,嘴唇抿得很紧。
双向擦除。赵冬梅把自己这边的证据全清了。灰域协议、工单、她的证言——她写在文档里的那行字——“三个条件齐全了也不一定退得掉”——她把自己这个第三个条件也抹掉了。系统里不会有人知道赵冬梅参与过逆协议。她自己的人间蒸发,是她自己点的确认键。
他站起来。椅腿在地板上刮出一声短促的尖响。
巷子里传来一阵脚步声。不是路过那种碎步——是硬底鞋踩在水泥地上,步子不快,节奏很稳。林哲侧身靠在窗框旁边,从玻璃边缘往下看。
两个穿深蓝色制服的人站在铁楼梯下面。肩膀上有银色倒山logo。
不是临市的制服。是倒悬山数据管理部的。
其中一个人抬头往二楼看。另一个人拿出手机,贴在耳朵上,嘴唇在动,隔着玻璃听不见说什么。手机壳是黑色的,和林哲那部一样。
林哲从窗边退开。他把背包拎起来挎在肩上,走到门口。门还是虚掩的,铁链扣垂在门框上。他推开——铁楼梯上没有人。脚步声在楼下。
他侧身挤出门,贴着墙往铁楼梯反方向走。楼背面有一截锈掉的铁梯通往楼顶,扶手已经断了一截,但梯子本身还固定在墙上。他踩上去的时候,脚底下的铁板往下陷了一下,锈屑从他裤腿边掉下去。
楼顶上堆着废弃的太阳能热水器,玻璃管碎了大半,水垢干了之后留下白色的斑痕。晾衣绳上挂着一条洗烂的抹布,风一吹晃得像只灰色的鸟。林哲蹲在热水器后面,把手机掏出来。
灰点没亮。备份程序还在断路状态。
他把通话记录调出来。最近一条——王恺。昨天凌晨三点五十八分,通话时长四分钟。第二条——林哲的手指停住了。屏幕上显示的通话记录里,在凌晨四点零一分,有一条拨出的电话。号码他不认识。临市的区号,通话时长两秒。
没接。
凌晨四点零一分。他在倒悬山第八区数据中心七楼机房B,刚执行完逆协议。他没打这个电话。
赵冬梅打的。
她用他手机拨了一个两秒的电话。两秒钟,刚好够响一声挂断。不是要通话——是要让人知道这部手机在临市。
林哲攥紧手机。她把数据管理部的人引到这里来了。不是害他。是给他争取时间。两个深蓝制服跑到春城南路17号来找手机信号,就不会去倒悬山边界堵那辆蹭掉漆的面包车。
他把通话记录关掉。屏幕显示时间:上午七点四十一分。
楼下巷子里传来铁楼梯的咯吱声。有人在往上走。脚步不快,但每一步都在金属梯面上踩出回响。
林哲蹲在热水器后面没动。风从楼顶吹过去,晾衣绳上的抹布贴着他的肩膀飘了一下。他听见敲门声,三下。然后是铁链扣碰撞的声音——门被推开了。说话声从二楼房间的窗户里飘上来,闷闷的,但能听清。
“走了。”
“东西搬空了。”
“手机信号定位在楼顶。”
林哲把手机关机。屏幕黑了,灰白的晨光映在玻璃上,只看到自己的脸。他从热水器后面站起来,压低身子走向楼顶边缘。后面是另一条巷子,更窄,两面墙之间堆着装修废料和一辆拆掉轮子的三轮车。
他翻过楼顶边缘的水泥栏,脚踩在三轮车座上。弹簧座垫塌了,铁架子从海绵底下戳出来,硌在脚后跟上。他跳下去,膝盖咔哒响了一声。
巷子尽头是菜市场。早晨的摊位刚摆出来,塑料棚子底下铺着蛇皮袋,堆着白菜和萝卜。有人推着手推车从他旁边过去,车轱辘嘎吱嘎吱响。林哲把背包带子挎好,低着头穿过摊位之间的窄道。
一个卖豆腐的女人抬头看了他一眼。和昨天下午是同一个人。她手里的刀切在豆腐块上,白浆从木板边缘淌下来。
“走后面的。”她说,没抬头,声音混在切豆腐的闷响里。
林哲侧身挤进货摊后面的窄过道。纸箱堆到胸口高,烂菜叶在脚底下打滑。过道通到另一条街上,街边停着一辆23路公交,司机正拧开水杯盖子。
林哲上了车。刷了卡。倒悬山的公交卡,在临市还能用。余额显示还剩十一块。
坐到最后一排靠窗的位置。车开动的时候,他把手机重新开机。屏幕亮了,锁屏界面弹出来。那张拍糊的第八区夜景还在,灯光线拖着橙黄色的轨迹。信号栏跳了一下,零格,又跳回两格。
灰点没亮。
窗外,春城南路的路牌在车玻璃上一闪而过。公交车拐了个弯,老城区的拆楼被甩在后面,代之以临市新区的整齐楼群。路面变平了,水泥路换成沥青路,公交道两边种着修剪整齐的女贞。
手机震了一下。
林哲低头。灰点不知道什么时候亮了,在左上角一闪一闪的。一条消息弹出来,白底黑字。
“备份程序重新上线。检测到宿主终端信号波动。凌晨四点到七点之间有三次定位请求,来源是倒悬山数据管理部内网。三次请求都被拦截了。拦截方不是灰域协议——是另一套系统。”
林哲打字:“什么系统。”
回复隔了四秒弹出来。
“没有签名。不是脚本。是人为操作。拦截时间点分别是四点零三分、五点十七分、六点四十二分。每次间隔半小时左右。像是有人在手动盯着。”
林哲盯着屏幕。凌晨四点到七点之间,人不可能那么精准地每半小时操作一次。除非不止一个人。或者——有人提前写好了定时程序,设定每隔半小时自动拦截一次定位请求。
他想起赵冬梅凌晨四点五十二分创建的那个文本文档。回收站里最后那行字。
“U盘里不是灰域协议。是灰域协议加上一个清理脚本。”
她写程序的时候习惯在文件名里用乱码。不是粗心。是习惯。
“拦截程序是赵冬梅留下的。”
备份程序沉默了两秒。
“可能性很高。但拦截程序已经停了。最后一次操作是六点四十二分。后面没有再触发。她可能设定了自动关闭条件。”
“什么条件。”
“定位请求连续三十分钟内不再发出。或者——操作者手动终止。”
林哲把手机攥紧。公交车过了新区,路边的楼变矮了,又变回城郊的平房和小型厂房。窗外有辆洒水车慢吞吞地开过去,水柱喷在路面上,把灰土冲进下水道。
赵冬梅走了。不知道去哪。带走了牛皮纸信封,用掉了密钥,把自己从系统里擦掉了一大半,还留了一个U盘和一个拦截程序。拦截程序保护他到今天早上六点四十二分,然后停止。
她自己手动关的。
林哲把手机放在膝盖上。屏幕暗了,灰点还在左上角一闪一闪。
公交车到终点站的时候,车里又只剩他一个。司机从后视镜里看了他一眼,拧开水杯又喝了一口。林哲站起来下车。站牌旁边是临市的长途客运站,水泥广场上有几辆大巴在待客。去邺城、去三河、去几个他没听过的小镇。售票窗口是铁皮搭的小屋子,玻璃窗上贴着票价和时刻表,字被太阳晒褪了色,有些字已经看不清了。
他站在时刻表前面看了一会儿。
售票窗口里的女人敲了敲玻璃。“上哪。”
林哲把手从玻璃上放下来。背包带子压着左边肩膀,右边口袋里装着赵冬梅用过的便签纸和那个新U盘,工单复印件。
“还有去倒悬山的班车吗。”他问。
女人抬头看了他一眼。眼睛在他脸上停了两秒。“倒悬山。你从哪来的。”
“临市。”
“临市就是倒悬山边上的。”她把票价表往窗台上推了推,指了一行小字。倒悬山第十区,上午十点半一班,下午两点一班。票价四十八。“去十区。”
“十区。”
女人点了下头,把窗口往回收了半截。
林哲掏出钱包。两千块现金,昨天到今天只用了几个包子钱。他抽出五十块纸钞,塞进窗口的槽里。女人找了两块硬币,拍了拍玻璃。硬币是倒悬山铸造的,背面有那个倒山logo。在临市一样流通。
十点半的车还有两个小时。他在候车大厅的塑料椅子上坐下来。椅子是蓝色的,坐垫被人坐塌了,能感觉到底下的铁条。对面墙上挂着一台电视,正放着倒悬山的早间新闻。画面是第八区的街道,记者站在数据中心大楼前面,身后的玻璃外墙在太阳下反光。画面底下的滚动字幕写着——“倒悬山市政新闻:第三期智慧治理试点项目评估报告将于本月下旬发布。据悉,前三期试点市民的生活满意度普遍提升。”
林哲把视线从屏幕上移开。
他从背包里掏出赵冬梅留下的U盘,在手指间转了一下。塑料壳上磨花的划痕在候车室的日光灯下泛着细碎的反光。他得找个终端机看看里面到底是什么。
灰域协议加上一个清理脚本。
窗外大巴发动了,柴油引擎突突地响,排气管冒出黑烟。售票窗口那女人正给另一个人找钱,硬币落在铁盘里叮叮当当。林哲把U盘塞回口袋,站起来,往候车室角落走去。那里有台公共终端,屏幕亮着待机画面,蓝底白字的“倒悬山公共信息服务”。
他插上U盘。系统识别得很慢,硬盘咯吱咯吱响了十几秒,才弹出文件夹。里面只有两个文件。
一个叫“GHOST”,可执行文件。灰域协议。
另一个是文本文件。名字是一个句号——全角字符,在文件名栏里是一个小小的圆圈。
林哲点开。
文档很短。三行字。
“灰域协议和清理脚本已经合并成一个程序。运行之后它会做两件事。第一件,把你接入倒悬山数据管理部的内网,找到被锚定的剩余终端,批量执行退订。第二件,清理操作结束之后,把灰域协议从系统里自删。连带源文件、日志、卸载记录。干净得像是没存在过。”
第二行字。
“你是王恺标记的第二十个终端。但你不是最后一个。前面十九个里还有一部分没退订。系统里找不到他们,可能是我擦得太干净了,也可能是他们自己躲起来了。你能找到几个,就是几个。”
第三行。
“别去找王恺。他已经不在审查室了。今天凌晨的逆协议执行之后,系统里关于他的记录全部清空。没有社保,没有医保,没有档案。一个没有身份的人,在倒悬山活不下去。他要么被转移了,要么早就不在那里了。你进去找,只会再陷进去一个。”
下面是空的。光标停在第四行,没字。林哲往下翻了一页,空白。再翻,也是空白。
他关掉文档。
公共终端的风扇嗡嗡响。候车大厅里有人在吃泡面,叉子刮在塑料碗边上。电视新闻换了一条,播音员在念一条通告,说倒悬山第十区即将举行为期一周的“智慧生活体验展”,地点在行政审批中心一楼。
林哲把U盘拔下来。终端屏幕跳回待机画面,蓝底白字。
他回到候车区的塑料椅子上,背包放在膝盖上。阳光从大厅的玻璃顶棚上漏下来,在水泥地面上照出一块块亮斑。一只灰麻雀从门口飞进来,在大厅里扑腾了几下,又飞出去了。
背包夹层里有半瓶水,是路过菜市场时灌的自来水。他拧开盖子喝了一口。水温吞吞的,带着铁锈味。
裤兜里的手机震了。灰点弹出一条消息。
“你在看清理脚本。”
“是。”
“运行之前需要接入内网。你现在手上有能接入内网的设备吗。”
“没有。”
“数据中心七楼机房B-07端口还在。访客卡用过了不能再用。但赵冬梅的清理脚本里有一个无线接入点——她用灰域协议在临市的公共网络里架了一个穿透节点。能连到第八区内网的残影缓存。”
“残影缓存。”
“内网的数据交换缓存。刷新频率很低,但还能用。从临市远程接入的话,你需要找一个固定的IP出口。图书馆、市政厅、公立医院——这些地方的公共终端都有固定IP。”
林哲站起来。背包挎上肩膀的时候,带子磨到了昨天钻铁丝网时划破的袖子,布裂口又扯大了一点。他没管。
候车厅外面是临市的公交枢纽。站牌上有去市图书馆的车。等车的几分钟里,裤兜里那张便签纸硌着手背。他掏出来看了一遍。赵冬梅写的那行字——今天走。别等我——在晨光里变得更淡了,纸被汗泡得有些透。
他把便签纸翻过来。背面的那行字还在。“别让我白做。”王恺写的。写在好几天前,写在第八区数据中心隔壁便利店的黄色便签纸上。另一个人的笔迹。
公交车来了。上去的时候,他把便签纸重新折好,放回裤兜。
临市图书馆在新区的大道边上,是一栋六层的灰色建筑,外墙贴着白色的瓷砖,台阶上蹲着两只石狮子。入口的玻璃门贴着开放时间的告示,早上九点到晚上九点。
林哲走进去。公共终端区在一楼大厅右侧,三排电脑,屏幕亮着待机画面,没人用。他挑了最里面那台,把U盘插上去。公共终端的系统权限很低,但不妨碍灰域协议的运行——赵冬梅把脚本写成了便携版,不需要管理员权限。
灰域协议启动。界面弹出来,黑色的命令行窗口。一行字跳出来——“灰域协议v2.2。目标:远程接入倒悬山第八区内网残影缓存。等待连接。”
他在图书馆里坐着,盯着屏幕上的进度条。窗外有洒水车的音乐声,叮叮当当的,从街头响到街尾。
倒计时开始。这一次不是九十秒。是不限时。
灰域协议的界面上弹出一串IP地址。都是倒悬山市内的终端,标注着“规则破坏者”——有人的ID后面跟着绿色的状态栏,写着“未激活锚定”,有的跟着灰色的,写着“状态未知”。
林哲数了一下。灰色状态栏的有四个。
他一个一个点击。清理脚本自动运行,把退订指令写进残影缓存。屏幕上的进度条爬了一条,再爬一条。第三条的时候,卡住了。
弹窗跳出来——“目标终端离线。无法完成退订。是否继续?”
他点了继续。
第四条同样离线。
第五条也离线。
六个灰色状态栏里,四个离线。两个还在,被退订了。
林哲盯着屏幕上的那几行灰色状态栏。离线。赵冬梅说系统里找不到他们,可能是她擦得太干净了,也可能是他们自己躲起来了。四条离线——不是躲起来。是没有了。
他关掉灰域协议。屏幕退回桌面,壁纸是临市图书馆的logo,蓝色调。他把U盘拔下来。U盘塑料壳上沾了手心汗,滑腻腻的。
公共终端风扇还在嗡嗡响。林哲站起来,把背包挎好。落地窗外面的阳光已经挪到了第二排椅子底下,光照里的灰尘慢慢飘。
他走到门口的时候,裤兜里的手机震了。
不是备份程序。是系统短信。
“尊敬的市民,您的退订申请已受理。感谢您参与倒悬山智慧治理试点项目。您的护航服务将于今日零时正式终止。如有任何疑问,请致电倒悬山数据管理部客服热线。”
蓝底白字。
林哲把手机攥在手里。指节贴着机身边缘,一阵阵发凉。他站在图书馆门口,台阶上两只石狮子的影子被上午的太阳拖得很长。
台阶下面,洒水车刚过去,路面上湿了一片。等公交车的人用鞋子踩着还没干的水印子。" ["create_time"]=> string(10) "1785516844" }