暴雨像憋了半年的怨气,一股脑儿砸向人间。周默那辆除了铃铛不响、哪儿都响的破自行车,在能淹死耗子的积水里吭哧吭哧地刨着,活像条快散架的落水狗。塑料雨衣的帽子第N次被狂风掀翻,冰冷的雨水趁机灌进后颈,激得他一个激灵,车把一歪,前轮“哐当”一声磕在路牙子上,差点把他连人带车送进路边漂着烂菜叶的浑浊水沟。
“淦!今天黄历上绝对他妈写着‘宜落水、宜通渠’!”周默狼狈地单脚撑地,把湿透、糊在眼前的刘海狠狠抹到头顶,露出光洁但此刻写满“晦气”二字的额头。车轮碾过被垃圾堵死的井盖,溅起一蓬泥水,给他的裤腿又加了层“酱香”涂层。目标明确:小区最深处那栋墙皮剥落得像长了牛皮癣的旧楼,楼下那个传说中连收泔水的都绕着走的公共厕所。
这鬼地方,路灯早八百年就罢工了,只有远处楼栋窗户里透出的几点昏黄,在雨幕里苟延残喘。空气里混着暴雨冲出的土腥味,以及远处垃圾站飘来的、异常执着的酸馊气息。周默锁好自行车——这破车扔这儿,贼看了都得犹豫三秒要不要沾手——深吸一口气,不是鼓劲,是做好被生化武器正面糊脸的心理建设,然后毅然决然推开那扇布满可疑污渍、油腻反光的厕所木门。
“呕——!”
一股难以名状的混合型恶臭,带着温热的湿气,如同物理攻击般狠狠糊了他一脸,直冲天灵盖。他猛地后退一步,胃里翻江倒海。昏暗的白炽灯泡在头顶苟延残喘,光线吝啬地只照亮巴掌大一块地方,其余空间被浓重的、蠕动的阴影占据。苍蝇在仅有的光柱里开派对,嗡嗡声成了这污秽交响曲的主旋律。地面黏腻湿滑,每一步都得小心翼翼,生怕上演一出“自由落体”。他屏住呼吸,感觉肺快要炸了,目光像探照灯一样扫视着每一个坑位、每一个积满污水的角落,心里只有一个念头:那个该死的、害他沦落至此的芯片,到底在哪个“龙潭虎穴”里?
“老天爷,玩我呢?”周默低声咒骂,额角青筋突突直跳。这感觉,比连续加班调试三天三夜崩溃的代码还要让人绝望。他认命地从墙角抄起一根锈迹斑斑、顶端绑着破布条的疏通杆,那布条的颜色和质感,足以让任何有理智的人当场去世。他咬着后槽牙,像个即将奔赴刑场的悲壮囚徒,开始了他这辈子最不愿回忆的“寻宝”工作。
杆子探进第一个坑位深处搅动,反馈回来的手感……黏腻、沉重,还带着某种难以言喻的韧性。周默的脸瞬间绿了,胃里翻腾得更厉害。“妈的,这手感……加钱!必须加钱!精神损失费!”他一边干呕一边含糊不清地给自己打气(或者说泄愤)。他几乎是闭着眼,凭借着多年调试精密仪器练就的、对细微异物感的敏锐触觉,在令人作呕的泥泞中仔细分辨着。时间在恶臭和绝望中被无限拉长。
不知过了多久,就在他觉得自己快要被这味道腌入味、精神濒临崩溃的边缘时,杆尖传来一个极其微小、却迥异于周围“环境”的硬物触感!
周默的心脏猛地一跳,差点从嗓子眼里蹦出来。所有的不适瞬间被巨大的紧张感压了下去。他屏住呼吸,手腕稳定得如同精密机械臂,小心翼翼地将杆子往上提。动作慢得像是电影里的慢镜头,生怕一个不小心,那微小的硬物再次消失在深渊里。破布条带着一团难以描述的污物缓缓升起,就在那团污物的边缘,一个指甲盖大小、被脏污完全包裹、几乎看不出原貌的方形物体,死死地黏附在上面!
找到了!
周默几乎是扑过去,也顾不上那令人窒息的恶臭和视觉冲击,用两根手指(隔着薄薄的、早已湿透的一次性手套)捏住那个小方块,猛地一拽!
“噗嗤”一声轻响,伴随着几点不明液体的飞溅。周默看都没看,迅速把它甩进旁边一个相对干净点的洗手池里,拧开水龙头开到最大。冰凉的自来水哗啦啦地冲刷着,他挤了半瓶随身携带的消毒凝胶,疯狂搓洗着那个小东西和自己的手指。水花四溅,消毒凝胶刺鼻的气味暂时压过了厕所的“原味”。直到水流终于冲刷掉大部分附着物,露出了下面那个熟悉的、属于他那个二手拼装手机扩展坞的迷你存储芯片轮廓——虽然外壳已被腐蚀得坑坑洼洼,边缘发黑。
“呼……”他长长地、劫后余生般地吐出一口浊气,后背全是冷汗,混合着雨水贴在皮肤上,冰凉一片。顾不上擦,他小心翼翼地将这枚饱经磨难的芯片捏起来,凑到那苟延残喘的白炽灯下细看。金属触点蒙着一层灰白色的腐蚀痕迹,边缘的塑料封装更是被侵蚀得如同被虫蛀过。他的心一点点往下沉。
“完蛋,这下真成‘屎’无前例了!”他哀嚎一声,声音在空旷(且臭)的厕所里回荡,带着点走投无路的悲愤。这玩意儿还能用?数据还在?他脑子里瞬间闪过无数种复杂的、需要昂贵设备的专业级数据恢复方案,然后又被现实无情地一一拍死——他现在兜比脸干净,工具只有一套螺丝刀和一个用了五年的热风枪(吹风机)!
顶着能把人砸晕的雨幕,周默几乎是逃命般冲回他那间位于顶楼、只有十平米的出租屋。关上门,隔绝了外面世界的狂风暴雨和垃圾站的余味,他才感觉自己重新活了过来。屋里一片狼藉,泡面碗、电路板、散落的工具书和几件分不清是干净还是脏的衣服,共同构成了一个标准的“技术型社畜(且贫穷)”的生存空间。空气里弥漫着焊锡膏和过期泡面汤混合的独特“芬芳”。
他甩掉湿透的外套和鞋子,赤着脚冲到那张既是餐桌、又是工作台、偶尔还客串一下床铺的折叠桌前。顾不上擦干头发上滴落的水珠,他一把抓过那个放在角落、积了层薄灰的工业级热风枪——这玩意儿功率贼大,平时用来吹焊电路板或者给bGA芯片加热植锡球的。
“兄弟,这次靠你了!”周默对着热风枪拜了拜,动作麻利地插上电源。嗡嗡的低沉轰鸣瞬间充满小小的房间,盖过了窗外的雨声。他把那枚湿漉漉、沾着可疑水渍的芯片小心翼翼地放在一块干净的隔热硅胶垫上。热风枪的枪口对准它,犹豫了一下,把温度旋钮从平时吹焊用的三百多度,猛地往回调了一大截。
“低温……慢烤……求你了祖宗,给点面子,千万别糊……”他嘴里念念有词,像是在进行某种神秘的仪式。右手稳稳地持着热风枪,枪口距离芯片大约十公分,缓缓地、均匀地左右移动着热风。左手也没闲着,紧张地感受着硅胶垫传导上来的温度。
时间一分一秒过去。芯片表面的水渍最先消失,接着,那些附着在金属触点和缝隙里的细小水珠,在持续的热风下,开始极其缓慢地蒸发。一股难以形容的、混合着厕所残留物、消毒水和高温灼烤塑料的诡异气味,开始在房间里弥漫开来。周默屏住呼吸,眼睛死死盯着芯片的变化,汗水沿着鬓角滑落,滴在桌面上,他也浑然不觉。
五分钟……十分钟……十五分钟……
就在他手臂开始发酸,感觉希望越来越渺茫的时候,热风枪口吹拂过芯片的一个瞬间,他眼角的余光似乎瞥到金属触点上那层灰白色的腐蚀痕迹,极其轻微地……剥落了一点点?露出了下面一点点黯淡的金属光泽?
有戏!
周默精神一振,像打了鸡血。他更加专注,热风枪移动得更慢、更稳。温度不敢升高,只能靠时间和耐心。汗水浸湿了他的t恤后背,额前的头发黏在皮肤上,痒得难受,他也顾不上擦。
又过了漫长的七八分钟。忽然,“啪”的一声极其微弱的轻响,像是某个微小的水泡爆开的声音。周默的心提到了嗓子眼,凑近细看。只见芯片边缘一处被腐蚀得最严重的黑色区域,在热风持续的烘烤下,竟然裂开了一道细微的缝隙!
“成了!水分烤干了!”他激动地低吼一声,迅速关掉了热风枪。嗡嗡声停止,房间里只剩下他粗重的喘息和窗外依旧滂沱的雨声。他小心翼翼地把依旧有些烫手的芯片捏起来,对着台灯的光线仔细端详。虽然外壳依旧惨不忍睹,但那些致命的腐蚀水汽,似乎真的被驱散了大部分。金属触点虽然黯淡,但至少露出来了!
“老天爷,今天总算开了次眼!”他长长吁了口气,感觉像跑完了一场马拉松。顾不上休息,他立刻把芯片插入一个备用的USb读卡器,然后颤抖着手,将读卡器插进他那台外壳都磨得包浆的二手笔记本电脑。
USb设备接入的提示音清脆地响起。周默的心跳也跟着漏了一拍。他颤抖着点开“我的电脑”。
一个陌生的、容量显示为0字节的可移动磁盘图标,赫然出现在屏幕上!
周默脸上的笑容瞬间僵住,心沉到了谷底。“0字节?玩我呢?!”他绝望地拍了下桌子,老旧折叠桌发出一阵不堪重负的呻吟。他不死心,右手发狠地猛点鼠标,试图打开那个该死的盘符。
“咔哒!咔哒!咔哒!”
鼠标点击声在寂静的房间里显得格外刺耳。屏幕上的光标转起了那个令人心焦的蓝色小圈圈,转啊转啊,仿佛转了一个世纪那么漫长。
就在周默准备拔掉读卡器、承认自己今晚所有的努力和忍耐都喂了狗的时候——
硬盘灯疯狂地闪烁起来!
那个0字节的磁盘图标猛地一跳!容量条像是回光返照般向上蹿了一小截,虽然依旧少得可怜,但终于不再是零了!紧接着,一个进度条弹窗粗暴地霸占了屏幕中央,上面显示着令人血压飙升的提示:
**【数据恢复中… 文件系统严重损坏,正在尝试读取原始扇区… 预计完成时间:未知。】**
“未知?!我未知你大爷!”周默气得差点把鼠标扔出去。这破电脑,关键时刻掉链子!他只能死死盯着那个慢得像蜗牛爬的进度条,感觉每一秒都是煎熬。窗外雨声哗哗,像在嘲笑他的徒劳。他烦躁地抓了把湿漉漉的头发,起身去厨房倒了杯冷水,咕咚咕咚灌下去,试图浇灭心头的焦躁。
就在他端着水杯走回桌边,目光无意间扫过屏幕的刹那——
进度条,终于爬到了100%!
屏幕猛地刷新。一个文件夹图标,孤零零地出现在那个刚刚还显示0字节的磁盘分区里。文件夹的名字是一串毫无意义的乱码,像是系统崩溃后留下的残骸。
周默的心提到了嗓子眼,手心里全是汗。他深吸一口气,小心翼翼地点开了那个乱码文件夹。
里面只有一个文件。
一个同样顶着乱码名字的、后缀为“.bin”的原始数据文件。大小只有几百K,小的可怜,孤零零地躺在那里。
“就……这?”巨大的失落感如同冰水浇头。他冒着暴雨,忍受着非人的恶臭,费尽九牛二虎之力抢救回来的,就是这么个玩意儿?几百K?能存个啥?一首低音质mp3都不够!
他几乎是带着破罐子破摔的怨气,双击点开了那个文件。系统弹出了选择打开方式的窗口。周默熟练地从列表里选择了一个十六进制编辑器——这是他平时分析嵌入式固件的老本行工具。
编辑器窗口打开,瞬间被密密麻麻、如同天书般的十六进制代码和对应的AScII字符流填满。绿色的0和1,黑色的字母数字符号,在白色的背景上疯狂滚动,看得人头晕眼花。周默强忍着失望和烦躁,滚动鼠标滚轮,目光在这片由0和1组成的“数字荒漠”里快速扫描。
大部分区域都是无意义的填充字符(FF FF FF FF…)或者全零区块。这芯片在污水里泡了那么久,又在高温下烘烤,数据能保留这点残渣,似乎已经是奇迹了。
就在他滚动到文件大约三分之一的位置,准备放弃,考虑要不要把这破芯片供起来当个“苦难纪念章”的时候——
屏幕上一片连续的、代表填充符的“FF FF”海洋中,突兀地出现了一小段结构化的数据!
周默的眼皮猛地一跳!他立刻停止滚动,身体前倾,鼻尖几乎要碰到屏幕。手指迅速敲击键盘,调整编辑器的显示模式,将焦点锁定在那片异常的数据区域。
【… 54 68 75 20 4A 75 6c 20 30 34 20 30 33 3A 31 35 …】 对应的AScII字符显示为:【thu Jul 04 03:15…】
一个时间戳!周默精神一振,手指在滚轮上快速拨动,继续往下看。
紧接着时间戳后面,是一段更加复杂、明显带有特定格式的数据块。开头几个字节是某种标志位或指令码,然后是长度标识……再往后……
【… 4F 70 65 72 61 74 69 6F 6E 3A 20 43 4F 4E 54 41 49 4E …】 对应显示:【operation: coNtAIN…】
“contain?遏制?”周默眉头紧锁,低声念了出来。这词在技术文档里通常意味着隔离、限制或控制。什么操作需要用到“遏制”?
他快速滚动鼠标滚轮,跳过中间一段被严重损坏、显示为乱码的区域。心脏在胸腔里擂鼓般跳动,一种混合着紧张和巨大好奇的情绪攫住了他。
编辑器窗口继续向下滚动。损坏的区域结束,又出现了一小段相对完整的十六进制代码。开头的几个字节引起了周默的注意:【… 50 52 4F 54 4F 43 4F 4c …】—— 【pRotocoL】!
“协议!”周默的眼睛瞬间亮了,呼吸也变得急促。他屏住气,目光死死锁定在紧随其后的字符上。损坏似乎再次袭来,几个字节模糊不清,但紧接着,几个关键的、完整的字符如同黑暗中点亮的信号灯,清晰地跳了出来:
【… 2d 46 49 52 45 …】—— 【-FIRE】!
“-Fire?背火?逆火?”周默脑子飞速运转。一个完整的词组呼之欲出!他激动得手指都有些颤抖,几乎是迫不及待地继续往下滚动屏幕,寻找那缺失的、决定性的前缀!
来了!就在“-FIRE”前面几个被腐蚀损坏的字节位置之后,一个被部分破坏、但关键字母依旧顽强显示出来的单词:
【… 42 41 43 4b …】—— 【bAc K】!虽然中间损坏导致空格异常,但拼起来就是……
“bAcK-FIRE!”周默几乎是脱口而出,声音因为激动而有些变调,“逆火!**逆火协议 (backfire protocol)**!”
这四个字像一道冰冷的电流,瞬间贯穿了他的脊椎!逆火协议?这是什么鬼东西?听起来就不像是给幼儿园小朋友准备的睡前童话!一股强烈的不安感,如同窗外冰冷的雨水,瞬间浸透了他刚刚因为发现线索而兴奋发热的身体。
就在这心脏狂跳、全身血液仿佛都冲向大脑的瞬间——
“滋啦!”
头顶那盏昏黄的节能灯管猛地爆出一串刺眼的电火花!
紧接着——
啪!
一片漆黑,毫无征兆地降临。
不是跳闸那种温柔的熄灭,而是如同被一只无形的巨手,粗暴地掐断了整栋楼的电力供应!窗外远处楼栋的灯火也同步消失,整个世界瞬间被浓稠如墨的黑暗和更加狂暴的雨声彻底吞噬。
只有周默那台老旧笔记本电脑的屏幕,还在凭借着内置电池发出最后一点微弱、惨白的光芒,幽幽地照亮了他瞬间失去所有血色的脸。屏幕上,那串冰冷的十六进制代码和“逆火协议”的名字,在屏幕惨白的光线下,像一张无声狞笑的鬼脸。
热风枪的余温还残留在指尖,吹风机嗡嗡的轰鸣似乎还在耳边残留回响,而那股芯片被烘烤出的、混合着厕所消毒水和塑料熔解的诡异气味,此刻在绝对的黑暗中,变得无比清晰,丝丝缕缕地钻入鼻腔,带着一种令人毛骨悚然的、不祥的预兆。
周默僵在椅子上,像一尊被骤然冰封的雕像。窗外,只有暴雨砸在铁皮雨棚上发出的、震耳欲聋的狂暴声响,如同千军万马在黑暗中奔腾践踏。
心脏在死寂的胸腔里,沉重地撞击着肋骨,发出擂鼓般的轰鸣。
咚…咚…咚…