凌晨三點四十七分,金邊市區一間廉價旅館的房間內,螢幕的藍光映照著林昊疲憊卻專注的臉龐。他的手指在鍵盤上快速敲擊,終端機視窗內一行行代碼飛快滾動。桌上有三罐空掉的紅牛,還有一包已經涼透的炒麵。
距離阿蓮被擄走已經過去了十八個小時。
老鬼在兩小時前傳來了一個加密壓縮檔,聲稱裡面有蛇爺旗下一個隱藏C2伺服器的節點資訊。林昊花了整整九十分鐘才繞過那個壓縮檔的三層混淆殼——第一層是標準的AES-256,第二層是自訂的XOR位移演算法,第三層最棘手,是一個用Go語言寫的客製化加殼工具,會在有除錯器附加時自動刪除內容。
「這老狐狸,連給情報都要測試我的技術底子。」林昊低聲咒罵了一句,眼睛卻沒有離開螢幕。
解壓縮後的文件只有一個IP位址和一個埠號:103.xxx.xxx.47:8443。沒有域名,沒有SSL憑證資訊,沒有額外的上下文。但這個IP的ASN歸屬讓林昊心頭一沉——它屬於金邊一家註冊在柬埔寨商務部的ISP,而這家ISP的股東名單上,赫然出現了一個熟悉的名字:宋南,柬埔寨國會貿易委員會的副主席。
「該死。」林昊往後靠在椅背上,揉了揉太陽穴。
政治連結正在浮出水面。蛇爺從來不只是個普通的黑幫頭子——他有政府層級的保護傘。這解釋了為什麼金邊警方多年來始終無法動搖他的事業,也解釋了為什麼他能夠取得那麼多高價值的網路資源。一個國會副主席的影響力,足以讓任何針對蛇爺的調查在到達檢察官辦公室之前就被攔截下來。
但現在不是害怕的時候。阿蓮還在他們手上。
林昊重新坐直身體,開始對目標C2伺服器進行偵查。他沒有直接進行連接——那太魯莽了,任何有基本安全意識的C2都會記錄所有連線嘗試,並且在收到異常連線時觸發警報。相反地,他使用了三層代理跳板:第一層在荷蘭的一個VPS,第二層在巴西的一家小型主機商,第三層則是一個位於緬甸的受感染路由器。
然後他開始執行被動偵察。
他利用Shodan和Censys的API查詢該IP的歷史服務記錄,發現這台伺服器在過去三個月中掃描到了七種不同的服務指紋。其中五次是標準的HTTPS,一次是SSH,還有一次是一個非標準的服務——在埠7331上執行的一個自訂協定。這個協定的指紋特徵與幾個已知的遠端存取木馬(RAT)的控制面板非常相似,但有細微的差異。
「蛇爺有自己的開發團隊。」林昊喃喃自語。這不是一個好消息。一個能夠修改和客製化惡意軟體的對手,比只會使用現成工具的黑客危險得多。
他決定採取一個更大膽的策略。
林昊打開了他的虛擬機管理程式,啟動了一個預先配置好的Windows 10虛擬機。這台虛擬機的網路設定經過精心偽造——MAC地址對應的OUI屬於一家深圳的硬體製造商,時區設定在北京時間,瀏覽器指紋使用了中國大陸常見的Chrome版本和字型列表,甚至連預設的搜尋引擎和DNS服務器都指向百度。
他要偽裝成一個不小心點擊了釣魚郵件的中國受害者,讓蛇爺的C2伺服器主動來連接他。
這是一個極高風險的操作。如果蛇爺的團隊夠敏銳,他們會反過來在他的虛擬機中植入後門,從而追蹤回他的真實位置。但林昊已經做好了準備——這台虛擬機被隔離在一個獨立的VLAN中,任何出站流量都會經過一個位於泰國的透明代理,而那個代理每五分鐘會更換一次出口IP。
他從老鬼提供的情報中篩選出了一條可用的釣魚連結。那是一封偽裝成柬埔寨稅務局通知的電子郵件,附件中包含一個啟用巨集的Word文件。林昊沒有直接打開它——他知道這些巨集會在下載並執行第二階段的Payload之前,先檢查沙盒環境和除錯工具。
相反地,他手動逆向分析了那個Word文件中的VBA代碼。
巨集的邏輯相當精巧。它首先檢查系統中是否存在Wireshark、Process Monitor、或任何虛擬機管理程式的行程——如果發現這些工具,巨集會立即停止執行,並在螢幕上顯示一個無害的「文件損壞」錯誤訊息。如果系統通過了檢查,它會從一個硬編碼的URL下載一個DLL檔案,然後利用Windows的DLL側載技術將其注入到一個合法的系統行程中。
「典型的現代惡意軟體手法。」林昊評論道。他修改了虛擬機中的幾個關鍵註冊表值,讓巨集誤以為它運行在一台真實的商用電腦上,然後手動觸發了巨集的執行。
幾秒鐘後,虛擬機中的網路流量監控工具捕捉到了一次外連請求。目標正是那個C2伺服器的IP。
「上鉤了。」
林昊立刻開始分析雙向的網路流量。C2伺服器返回了一個經過Base64編碼的資料包,解碼後是一個JSON結構的配置檔案,其中包含了指令輪詢的間隔時間、心跳訊號的格式、以及一個用於資料上傳的二級C2位址。
但林昊的注意力被配置檔案中的一個欄位吸引住了:
「user_id」: 「snake_ops_14」
蛇爺的組織使用編號系統來追蹤不同的受害者或殭屍電腦。如果「snake_ops_14」代表第十四個成功植入的目標,這意味著蛇爺的網路犯罪行動規模相當可觀。但更讓林昊在意的是配置中的另一個參數:
「data_routing」: 「golden_future_bridge」
金色未來。
阿蓮的組織。
林昊的心跳加快了。這個參數強烈暗示蛇爺正在利用金色未來的基礎設施來路由他的惡意軟體流量——或者更糟,金色未來的內部系統已經被蛇爺完全控制,成了他網路犯罪的掩護。
他必須確認這一點。
林昊打開了另一個終端機視窗,SSH進入了他在新加坡租用的一台私有伺服器。這台伺服器上運行著一套他自行開發的被動網路監控工具——一個能夠分析大量網路流量並識別出異常模式的流量分析引擎。
他從老鬼提供的第二個情報檔案中提取了一份清單:金色未來在金邊使用的所有公開IP範圍和子網段。然後,他將這些資訊輸入到了流量分析引擎中,開始掃描過去七十二小時內,與這些IP範圍相關的所有可疑連接。
分析需要時間。林昊趁這個空檔站起來伸展了一下僵硬的身體。窗外的金邊夜景在凌晨時分顯得格外寂靜,只有遠處偶爾傳來的摩托車引擎聲打破了寧靜。他想起了一個月前和阿蓮在河邊的那次談話——她充滿熱情地描述著金色未來的使命,說要幫助柬埔寨的弱勢兒童透過教育改變命運。她的眼睛裡有光,那種真誠的光芒讓林昊相信她是真心在做正確的事。
但現在,那份光芒可能正被蛇爺的黑暗一點一點吞噬。
流量分析的結果在十五分鐘後出來了。
報告顯示,金色未來的網路中確實存在異常流量。具體來說,有三台伺服器——名義上是金色未來的捐款管理系統——在過去一週中,每天凌晨兩點到四點之間都會向外發送大量的加密資料包。這些資料包的目標IP分佈在五個不同的國家:俄羅斯、荷蘭、賽普勒斯、巴拿馬、以及香港。
典型的money mule網路路由。
林昊將這些IP位址記錄下來,開始逐一進行反向查詢。俄羅斯的那個IP屬於一家註冊在聖彼得堡的虛擬貨幣交易所;荷蘭的則是一個公認的bulletproof主機商——他們以不理會任何投訴或法律通知而聞名;賽普勒斯的目標是一家投資顧問公司;巴拿馬的是一家法律事務所;香港的則是一個外匯兌換平台。
這是一條完整的洗錢鏈。
蛇爺利用金色未來的伺服器作為資料中繼站,將非法所得的資金透過加密通道傳送到不同國家的金融機構,最終讓這些錢看起來像是合法的海外投資。金色未來的員工——包括阿蓮在內——可能完全不知情,他們以為那些凌晨的資料傳輸只是正常的系統備份或更新。
但這同時也給了林昊一個機會。
如果蛇爺的金融網路依賴於金色未來的伺服器作為資料橋樑,那麼只要他能切斷這條橋樑,蛇爺的資金流就會受到嚴重打擊。而打擊一個犯罪組織的資金鏈,比直接攻擊他們的伺服器更有效。
問題在於,他不能直接關閉或破壞金色未來的伺服器——那是阿蓮的事業,也是她多年來的心血。如果他毀了金色未來,即使救出了阿蓮,她也會恨他一輩子。
他需要一個更精細的手法。
林昊打開了筆記本,開始在紙上畫出一條攻擊鏈。他必須在不破壞金色未來正常運作的前提下,有效地將蛇爺的非法流量隔離出來,然後引導到一個他可以控制的系統中。這就像在一個繁忙的機場中,精確地將一架可疑的航班引導到一個預設的停機坪,而不讓其他乘客察覺到任何異常。
他的方案分為三個階段。
第一階段:滲透金色未來的核心路由器。他需要獲得對該路由器配置的完整存取權限,這樣才能在不影響正常業務流量的情況下,重新路由蛇爺的資料。
第二階段:建立一個偽造的C2端點。他會在自己的伺服器上建立一個模仿蛇爺原始C2伺服器的服務,將所有被引導過來的流量接管下來,從而分析蛇爺的整個通信架構。
第三階段:利用收集到的情報逆向追蹤蛇爺的真實位置和資金存放點。這是最危險的一步,因為一旦蛇爺發現自己的通信被攔截,他會立刻知道有人在針對他——而林昊最不希望的,就是讓蛇爺有機會在用阿蓮作為人質之前,先做出極端的反應。
「時間。」林昊看了看手錶,凌晨四點二十五分。距離天亮還有大約兩個小時。在金邊,天亮意味著新的危險——蛇爺的人會在白天活動,他們的據點遍佈城市各處,任何一個可能的目擊者都可能向他們通風報信。
他必須在天亮之前完成第一階段。
林昊再次將注意力轉回到電腦上。金色未來的核心路由器是一台Cisco ASR 1000系列,運行IOS-XE作業系統。這是一種企業級的路由器,安全性相當高,但並不是無懈可擊的。
他先檢查了該路由器的SSH服務配置。出廠預設設定已經被修改過——這是一個好跡象,表示金色未來的IT團隊至少有一定的安全意識。但是,林昊發現他們仍然開啟了HTTP服務,而不是強制使用HTTPS。這是一個可以利用的弱點。
他使用了一個針對Cisco IOS-XE的已知漏洞——CVE-2021-34730,一個在HTTP服務中的權限提升漏洞。這個漏洞已經被發布了超過一年,理論上應該已經被修補了,但林昊賭的是金色未來的IT團隊沒有及時更新韌體。
他的賭注成功了。
漏洞利用代碼執行後,他獲得了一個等級15的權限——Cisco設備中的最高管理權限。他現在可以完整地查看路由器的運行配置,包括所有的ACL規則、NAT映射、以及路由表。
在配置中,林昊找到了三條隱藏的靜態路由。它們的下一跳IP指向一個不在金色未來正式網路文件中的位址——192.168.xxx.200。這個私有IP位址對應的設備,很可能是蛇爺偷偷安裝在金色未來機房中的一台隱藏伺服器。
林昊沒有直接刪除這些路由規則——那會立刻驚動蛇爺。相反地,他在路由表中添加了一條更精確的靜態路由,將原本導向那台隱藏伺服器的流量,複製一份並發送到他控制下的一個分析節點。這在網路術語中稱為「端口鏡像」或「SPAN」,是一種被動的流量複製技術,不會影響原有的網路路徑。
完成這一步後,他設置了一個自動化腳本,該腳本會持續監控通過這條鏡像路徑的所有流量,並在發現任何包含特定特徵碼的資料包時,自動觸發警報。
第一階段完成,用時四十三分鐘。
林昊擦了擦額頭上的汗,喝了一口已經涼掉的咖啡。現在是第二階段——建立偽造的C2端點。
他從之前分析的C2配置中提取了協議格式。蛇爺的C2使用了一種基於WebSocket的自訂協定,每次通訊前需要先進行一次ECDH金鑰交換,然後使用AES-256-GCM對後續的訊息進行加密。這種設計相當穩健,即使流量被攔截,沒有私鑰的人也無法解密通信內容。
但林昊不需要解密——他只需要模仿。
他寫了一個簡單的Python腳本,使用Asyncio庫建立了一個WebSocket伺服器,該伺服器完整實現了蛇爺C2的通訊協議,包括金鑰交換的握手流程。然後,他將這個伺服器部署在一個位於日本的VPS上,並修改了金色未來路由器上的隱藏路由規則,將原本導向真正C2伺服器的流量,重新導向到他的偽造伺服器。
「如果一切順利,蛇爺的系統會以為他們還在跟自己的C2通訊,」林昊自言自語道,「但實際上,所有的訊息都會先經過我的伺服器。」
第二階段完成,用時五十二分鐘。
現在是最關鍵的第三階段。林昊需要從捕獲的流量中提取出可用情報。
他的偽造C2伺服器在啟動後的第一分鐘內,就收到了來自三個不同外部IP的連線請求。這些請求都遵循了正確的ECDH金鑰交換流程,表示它們是蛇爺網路中的受感染節點,定時向C2伺服器回報狀態。
林昊記錄下了這些IP位址。但他沒有急於追蹤它們——這些可能只是殭屍網路中的普通節點,追蹤它們只會浪費時間。他需要的是一個能夠揭示蛇爺核心圈子的通訊模式。
他在偽造伺服器上設置了一個陷阱。他模仿C2伺服器的協議格式,向所有連線的節點發送了一個指令:要求它們回報所有近期連接過的、具有高權限存取權的內部系統資訊。這是一個非常具有侵略性的指令,正常的C2伺服器不會這樣做——但如果偽裝得夠好,受感染的節點會乖乖地將它們知道的資訊全部吐出來。
這個策略像是一個資訊炸彈。在短短十五分鐘內,林昊收到了來自十四個受感染節點的回覆,其中包含了一份令人震驚的資產清單:
- 柬埔寨國家銀行的某個內部系統的存取憑證
- 金邊國際機場的貨運管理系統後門
- 三家大型賭場的監控系統存取權限
- 一個名為「Mekong Finance」的註冊金融公司的完整資料庫存取權
- 以及——最讓林昊吃驚的——柬埔寨內政部警政署的案件管理系統的存取權限
蛇爺的觸角已經深入到了柬埔寨政府的核心部門。林昊之前猜測蛇爺有政治背景,但親眼看到這些證據,仍然讓他感到一陣寒意。一個能夠存取警政署案件系統的黑幫老大,基本上可以隨時掌握所有針對他的調查進度——他甚至可以在檢察官發逮捕令之前就收到風聲。
但這份清單也給了林昊一個意想不到的突破口。
Mekong Finance。這家公司不在任何公開的金融監理機關登記中——它可能是一個影子金融機構,專門為蛇爺的犯罪帝國處理資金。如果能夠存取他們的資料庫,林昊就有可能找到蛇爺的核心資產分佈,甚至可能找到他用來控制那些政治人物的把柄。
他嘗試使用受感染節點回報的憑證登入Mekong Finance的資料庫。成功了一半——他通過了第一道身份驗證,但系統隨後要求輸入一個動態的一次性密碼(OTP),這個密碼會發送到系統管理員的手機上。
「雙因素驗證。」林昊皺起了眉頭。這比他預期的要困難一些。但他沒有放棄,而是開始分析系統的回應模式。OTP的驗證請求透過一個標準的RADIUS伺服器進行處理,而這個RADIUS伺服器的IP位址,竟然就在金色未來的網路範圍內。
蛇爺把關鍵的身份驗證基礎設施也架設在了金色未來的機房中。這反而成了林昊的優勢——他已經控制了金色未來的路由器,現在他可以利用這個優勢來攔截OTP請求。
他在路由器上添加了另一條鏡像規則,專門複製所有發往那個RADIUS伺服器的流量。然後,他運行了一個簡單的Python腳本,即時分析RADIUS封包中的使用者名稱和挑戰值。
五分鐘後,他捕獲到了一筆OTP驗證請求。使用者名稱是「mekong_admin」,挑戰值是「865421」。這個挑戰值對應的OTP,理論上只有系統管理員的手機才能生成。但林昊不需要生成正確的OTP——他只需要讓系統以為他已經通過了驗證。
他利用RADIUS協議中的一個已知弱點:當驗證伺服器收到一個格式錯誤的響應時,如果攻擊者在同一秒內發送多個包含不同OTP值的請求,系統有可能因為內部計時器競爭而誤判其中一個為正確。這是一種race condition攻擊,成功率不到百分之三十,但在沒有其他選擇的情況下,值得一試。
林昊寫了一個多執行緒的Python腳本,在十毫秒內同時發送了五十個不同的OTP猜測值。
系統沉默了整整三秒鐘。
然後,資料庫的大門打開了。
林昊幾乎不敢相信自己的眼睛。Mekong Finance的資料庫中包含了一份完整的資金流向記錄,時間跨度長達五年。每一筆交易都詳細記錄了來源、目的地、金額、以及經手人員的代號。這不僅僅是一個洗錢網絡的帳本——這是整個蛇爺帝國的財務心臟。
他快速瀏覽了最近三個月的交易記錄。數字令人咋舌——總金額超過了兩億美元,來源包括網路詐騙、勒索軟體贖金、毒品交易、以及非法賭博。資金的最終流向,指向了分布在六個國家的三十六個銀行帳戶和一些加密貨幣錢包。
但有一筆交易引起了林昊的特別注意。
就在三天前,一筆金額為五十萬美元的交易從Mekong Finance的帳戶轉出,目的地是一個標記為「S-01」的加密錢包。交易備註中寫著:「取消障礙物——專案金色」。
取消障礙物。專案金色。
林昊的拳頭緊緊握了起來。這筆交易是為了支付「清除」阿蓮的費用。蛇爺從來沒有打算讓阿蓮活著——她對金色未來的內部運作太了解了,一旦被救出,她可以成為指控蛇爺的重要證人。所以蛇爺打算在她成為威脅之前,先將她消滅。
時間所剩無幾了。
林昊立刻開始追蹤那筆交易的接收錢包。加密貨幣的匿名性並不是絕對的——每一筆交易都會被永久記錄在區塊鏈上,而只要有一個環節連接到真實世界的身份,整個偽裝就會崩潰。
他使用了一個區塊鏈分析工具,追蹤了那個錢包的所有交易歷史。資金在到達S-01錢包後,經過了三次跳轉——先轉移到一個隱私錢包,然後透過一個去中心化交易所轉換成了另一種加密貨幣,最後被發送到了一個在幣安交易所註冊的帳戶。
幣安。這意味著那個帳戶曾經通過了KYC(實名認證)。只要幣安配合調查,他們就可以提供該帳戶所有者的真實身份資訊。但林昊沒有時間走正式的法律程序——他需要更快的方法。
他嘗試了一個非常規的手法。他偽造了一份看似來自幣安安全團隊的緊急通知郵件,發送給與該帳戶關聯的電子郵件地址,聲稱帳戶存在異常登入行為,要求收件人點擊一個連結來驗證身份。那個連結實際上是一個釣魚頁面——林昊設計得跟真正的幣安登入頁面一模一樣,唯一的差別是,輸入的任何資訊都會先發送到他的伺服器。
這是一個不太光采的手段。林昊一直以來都鄙視釣魚攻擊——那是腳本小毛孩才會用的手法。但現在情況特殊,阿蓮的性命危在旦夕,他沒有時間去講究道德潔癖。
釣魚郵件發送出去後,他開始了漫長的等待。
時間一分一秒地流逝。林昊在房間裡來回踱步,時不時檢查一下伺服器上的日誌。凌晨五點十分,五點二十五分,五點四十分……天邊已經開始泛白,金邊的清晨即將到來。
就在他快要放棄這個策略的時候,伺服器上傳來了一聲清脆的通知音。
有人點擊了連結。
林昊迅速就位,手指懸停在鍵盤上。釣魚頁面捕獲到了一個幣安帳戶的使用者名稱和密碼——雖然經過了雜湊處理,但林昊在頁面中嵌入了一個鍵盤記錄器,成功地捕捉到了按鍵的原始順序。他還獲得了使用者的IP位址、瀏覽器指紋、以及Session Token。
但最關鍵的收穫是:使用者在登入後,瀏覽了帳戶的「提現記錄」頁面。這表示該帳戶最近確實有資金流入——那筆五十萬美元的款項已經到達了它的最終目的地。
林昊立刻利用捕獲的Session Token登入了那個幣安帳戶。他需要查看帳戶的註冊資訊——姓名、地址、電話號碼——這些都可能指向直接參與綁架阿蓮的人。
帳戶的KYC資訊顯示,註冊人姓名是「Somchai Wongsuwan」,泰國籍護照,年齡三十四歲。但林昊一眼就看出這是偽造的身份——護照照片欄中的頭像和帳戶自拍中的臉型明顯不符。蛇爺的組織使用人頭帳戶來接收資金,這在意料之中。
但他需要的不只是這個人頭的身份。他需要知道這個Somchai——或者使用這個帳戶的實際操作者——現在在哪裡。
林昊檢查了帳戶的登入歷史。在過去二十四小時內,該帳戶有兩次登入記錄:一次來自一個金邊的IP位址,另一次來自柬埔寨與泰國邊境附近的一個城市——波別(Poipet)。
波別。
這個地名讓林昊的神經緊繃起來。波別位於柬埔寨西部邊境,與泰國的亞蘭(Aranyaprathet)隔界相望。那個城市以賭場、地下錢莊、以及各種犯罪活動聞名。更重要的是,波別有一個規模龐大的中國城,許多從中國逃出來的罪犯都在那裡找到了庇護所。如果蛇爺把人質關在波別,那將是一個非常難攻堅的位置——當地警方幾乎完全被犯罪組織控制。
但至少他現在有了一個方向。
林昊將所有收集到的情報整理成了一份報告:蛇爺利用金色未來作為洗錢中繼站的完整證據鏈、那筆五十萬美元的「清除」費用的流向、波別的可能藏身點、以及那份令人震驚的政治人物網絡圖。他將這份報告加密後儲存在了一個安全的位置,作為日後可能需要的籌碼。
現在,他需要做出一個決定。
他可以繼續待在房間裡,通過網路來對抗蛇爺——但這樣做只能削弱蛇爺的勢力,卻無法直接救出阿蓮。或者,他可以親自前往波別,在那裡尋找阿蓮的下落——但這樣做會讓他暴露在極大的物理危險中,而且他對波別的地形和人脈幾乎一無所知。
他需要老鬼的幫助——不僅僅是作為情報來源,而是作為一個在地的接應。
林昊拿起了他的加密衛星電話,撥出了老鬼留給他的那個緊急聯絡號碼。
電話響了七聲,然後被接起。話筒那端傳來一個沙啞的聲音,用帶著濃重粵語口音的普通話說道:「你最好有很好的理由在這個時候打電話來。」
「我需要去波別,」林昊直接說,「我需要一個人帶我進去,找到阿蓮被關的地方。」
老鬼沉默了幾秒鐘,然後發出了一聲低沉的苦笑。「你知道波別是什麼地方嗎?那是蛇爺的後花園。你進去了就出不來。」
「我知道。」林昊的聲音異常平靜。「但阿蓮沒有時間了。蛇爺已經付了錢要殺她。」
又是一陣沉默。這次更長。
「我在波別有一個老朋友,」老鬼終於開口了,「他叫阿東,以前是泰國警方的情報員,後來因為某些原因跑到了柬埔寨。他對波別的地下世界瞭若指掌,但他不會輕易相信任何人。」
「怎麼才能讓他相信我?」
「告訴他『曼谷的雨』這四個字。他知道這是什麼意思。」
林昊將這個資訊記在了腦中。「謝謝。」
「先別急著謝我,」老鬼的聲音變得嚴肅起來,「波別只是第一步。如果你真的找到了蛇爺的弱點,準備好面對更可怕的東西。我這些年收集的情報顯示,蛇爺只是一個前台的代理人。真正在背後操控這一切的,是比你我想像中更高層的人物。」
「你是說……」
「我什麼都沒說。」老鬼打斷了他。「等你到了波別,找到阿東之後,他會告訴你更多。前提是——你能活著到那裡。」
通話結束了。
林昊將衛星電話收好,然後開始收拾他的裝備。他需要輕裝行動——一台筆記型電腦、一隻加密隨身碟、一部備用手機、還有足夠現金。他把所有不需要的設備都留在了旅館房間,包括那三台用來進行網路偵察的伺服器——它們的任務已經完成了。
走出旅館房間的那一刻,金邊的清晨陽光灑在了他的臉上。街道上已經有了來往的行人和車輛,賣早餐的小販在路邊支起了攤位,空氣中瀰漫著炒粿條和咖啡的香味。這個城市看起來和往常一樣寧靜、充滿活力。
但林昊知道,在這片平靜的表面之下,戰爭才剛剛開始。
他攔下了一輛嘟嘟車,用高棉語對司機說:「去中央市場。」
那是前往波別的第一站。在中央市場的長途巴士站,有一班每天早上六點半發車的巴士,沿著國道5號一路向西,穿過磅清揚(Kampong Chhnang)和菩薩(Pursat),最終抵達波別。全程大約需要六到七個小時。
林昊坐在嘟嘟車上,看著逐漸遠去的旅館,心中充滿了複雜的情緒。他的雙手因為長時間的鍵盤操作而微微發抖,眼睛因為缺乏睡眠而布滿血絲,但大腦卻異常清醒。他正在做一個可能讓自己喪命的決定——離開網路世界的安全掩護,走進一個完全由蛇爺控制的實體領地。
但他別無選擇。
阿蓮曾經對他說過一句話:「在柬埔寨,真正的勇氣不是拿起武器戰鬥,而是在知道一切都可能失去的情況下,仍然選擇站出來。」
現在,輪到他實踐這句話了。
嘟嘟車在清晨的車流中穿梭,林昊的手機突然震動了一下。他低頭看了一眼螢幕——是一則透過加密即時通訊軟體發送的訊息,來自一個他沒有儲存的號碼。
訊息只有一行字:
「你以為你找到了什麼?」
林昊的心臟猛地收緊。這則訊息沒有任何署名,但他知道是誰發來的。蛇爺——或者蛇爺的人——正在監視他。
他迅速關閉了手機的數據連線,拔出了SIM卡,並將手機拆成了兩半。如果蛇爺能夠追蹤到他的手機訊號,那麼從現在開始,他必須完全依靠老式的通訊方式——面對面接觸、預先約定的會面點、以及那部無法被追蹤的衛星電話。
嘟嘟車在中央市場的入口處停了下來。林昊付了車費,背起他的背包,走進了熙熙攘攘的人群中。市場裡到處都是吆喝的小販和挑選商品的顧客,空氣中混雜著魚乾、香料和鮮花的氣味。他在人群中穿梭,不時回頭確認是否有人跟蹤。
在市場的另一端,他找到了開往波別的長途巴士。司機正在將行李一件一件地塞進車底的行李艙。林昊買了一張票,選了一個靠窗的位置坐下。
巴士發動引擎,緩緩駛出了車站。林昊看著車窗外逐漸遠去的金邊天際線,手指不自覺地摸向了口袋中的加密隨身碟。那裡儲存著他所有的心血——蛇爺的犯罪帝國的數位指紋,一條通往真相的數位道路。
巴士駛上了國道5號,朝著西方的邊境城市前進。林昊靠在椅背上,閉上了眼睛。他需要休息,哪怕只有幾個小時。因為他知道,當他到達波別的時候,真正的戰鬥才會開始。
在這片充滿謊言和背叛的土地上,鍵盤和程式碼已經不足以為他提供保護。接下來的每一步,都將是用血肉之軀去丈量的距離。
但他已經做好了準備。
為了阿蓮。為了正義。也為了證明,即使在最黑暗的角落,仍然有人願意點亮一盞燈。
巴士在晨光中加速前行,車輪揚起一陣塵土。金邊在後視鏡中越來越小,而前方的道路,正通向不可預知的深淵。