凡煙小說

幽靈的邀請函

關燈
幽靈的邀請函

第三天。

沈諦安已經記不清這是第幾次看表。淩晨兩點十分,辦公室的燈光慘白,從天花板上的格柵燈傾瀉下來,照得一切都沒有影子——或者說,一切都被照得只剩影子。他的工位在窗邊,玻璃窗像一面黑色的鏡子,映出他佝僂的背影和屏幕上滾動的代碼。

他在追蹤那條“蒲公英”地址指向的境外服務器。三天了,對方像一條泥鰍,每次快要觸及核心時,IP就會跳轉,路由就會重置,數據流就會消失在某個加密隧道的盡頭。他換過三種追蹤策略,動用了五個跳板,甚至寫了一個自動化腳本試圖預判對方的下一跳——都沒有用。對方的技術在他之上,這一點他已經開始接受。

屏幕上的代碼還在滾動。他揉了揉眼睛,指腹觸到眼瞼時,能感覺到眼球表面的幹澀和微熱——那是長時間盯著屏幕後,眨眼次數減少導致的。眼球表面像蒙了一層細沙,每一次轉動都有輕微的刺痛。他從抽屜裏摸出一瓶人工淚液,仰頭滴了兩滴。冰涼的液體滑進眼眶,短暫的刺痛後是片刻的舒緩。他眨了眨眼,液體順著淚點流進鼻腔,有一股淡淡的鹹味。

辦公室很安靜。這種安靜不是絕對的靜,而是由各種細微的聲音組成的:服務器散熱風扇的低鳴,空調出風口的噝噝聲,遠處某個房間裏偶爾傳來的腳步聲,還有他自己的呼吸。這些聲音混在一起,像一首催眠曲,但他不敢睡。他怕一覺醒來,那些線索就斷了。

就在他重新看向屏幕的瞬間,郵箱客戶端彈出一條新郵件提示。

“叮”的一聲,在安靜的辦公室裏格外刺耳。

發件人:省廳科技信息化處 [email protected]

主題:關於“凈土系統”壓力測試補充數據的通知

沈諦安的目光在發件人地址上停留了兩秒。格式正確,域名正確,甚至連落款的字體和行文風格都和他平時收到的上級通知一模一樣。他點開郵件,正文是一段標準的公文,用的是省廳慣用的仿宋字體,行間距、段間距都無可挑剔:

“各相關單位:根據‘凈土系統’上線前最後一次壓力測試安排,現需補充提交近三月異常流量監測數據。請於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號廠房的地下二層。你們的同事簡晞,已經在那裏等你們了。”

彈窗停留了五秒,然後消失,沒有留下任何痕跡。沒有寫入日志,沒有修改註冊表,沒有留下任何可以追查的線索。

只有江弈的餘光捕捉到了什麽。他轉過頭,屏幕上一切正常。但他知道,那不是幻覺。他感覺到了——那種被註視的感覺,那種有人在暗處看著他們的感覺。

有人在看著他們。

一直在看著。

江弈沒有告訴沈諦安。他轉回頭,繼續盯著屏幕,手指在鍵盤上輕輕敲了一下。那是一句沒有發出的消息,寫給那個看不見的人:

“我們來了。”

淩晨四點二十分,沈諦安回到空無一人的家。

玄關的燈沒開,他摸黑換了鞋,走進廚房。冰箱的門上貼著一張便簽,是媽媽的字跡,寫得一筆一劃,像小學生:“餃子在冷凍層,熱透再吃。”

他盯著那張便簽看了幾秒。媽媽上周來的,待了三天就走了——他每天早出晚歸,連頓飯都沒陪她吃。臨走時她什麽都沒說,只是把冰箱塞滿了。

他打開冰箱,拿出一袋餃子。站在廚房裏等水開的時候,他看著窗外。城市的霓虹還在閃爍,像一堆沒熄滅的餘燼。鍋裏的水慢慢冒起熱氣,然後翻滾起來。他把餃子倒進去,用勺背輕輕推了推,防止粘鍋。

水汽升騰起來,模糊了窗戶。他看著那些翻滾的餃子,忽然想起父親生前說過的話。那是一個冬天的晚上,他熬夜整理案子的線索,父親端著一碗面進來,放在他手邊。他說“爸你先睡”,父親沒動,站在旁邊看了他很久,然後說:

“爸不是不讓你蓋樓,是怕樓還沒蓋完,蓋樓的人先垮了。”他頓了頓,聲音低下去,“但爸也知道,那樓只有你能蓋成這樣。”

那時候他不明白這句話的意思。現在他看著鍋裏翻滾的餃子,好像有點懂了。

餃子熟了。他撈出來,站在廚房裏吃完。湯有點燙,他吹了吹,一口一口喝下去。

吃完他把碗洗了,放回碗架。然後走進臥室,和衣躺在床上。窗外還有車聲,遠遠的,像潮水。

他閉上眼睛。睡著之前,腦子裏閃過一個念頭:明天,得給媽媽打個電話。

本站無廣告,永久域名(fanyan.cc)