那一天下午三點,開始下雨。
或者說,開始有雨聲。
陸離在二樓的基地裡,坐在窗邊看書——余浩然上週給了他一份手寫的代碼修煉基礎文件,密密麻麻的,大部分是系統理論,他在慢慢啃,有些地方需要反覆讀幾遍才能想通。外面的巷子是窄的,對面是舊磚牆,下午的光線斜斜地落在磚縫裡,很靜。然後雨聲來了。
先是屋頂,是那種雨滴打在瓦片上的聲音,從細碎到密集,很快就成了一片白噪音,雨聲從各個方向漫進來——對面的磚牆被打濕的聲音,遠處街道積水的聲音,某個地方排水管嗚嗚地排水的聲音。
陸離往窗外看了一眼,然後往代碼視角裡掃了一下。
天空的標籤顯示:
Weather: Clear
Precipitation: NONE
Humidity: 63%
晴天。無降水。
他側耳聽了一下,雨聲是真實的,音質清晰,有層次,不像錄音,更像真實的環境音——但代碼層顯示現在沒有任何降水事件在運行。
他站起來,走到窗邊,把手伸出去。
手背是乾的。沒有水落在上面。
外面的磚牆,在代碼視角下,Surface_moisture 顯示的是:Dry,沒有濕潤,沒有被雨水打到的物理反應。
但他能聽見雨聲。清清楚楚的雨聲,從四面八方滲過來,細密而均勻,就像一場真實的雨。
他在代碼視角裡把感知往聲音的方向推,試著找到那個聲音的源頭——
找到了。在距離這棟樓大約 150 公尺的地方,有一個標籤:
[System Audio Layer — Active]
Event: precipitation_audio_v3.2
Source: world.environment.AudioManager
Status: PLAYING
Coverage_radius: 300m
Trigger: [EXTERNAL COMMAND — SMD_Directive_019]
Sync_with_visual: FALSE
一個音頻事件,由 SMD 的第十九號指令觸發,播放範圍半徑 300 公尺。
但 Sync_with_visual: FALSE——沒有同步視覺效果。
只有聲音,沒有雨。
他把這件事告訴了謝鳴山。
謝鳴山放下茶杯,往窗外聽了一下,臉色沒有明顯的變化,但他把椅子往旁邊挪了一點,把視線往幾個方向掃,像是在確認什麼。
「這是 SMD 的干擾手段,」他說,「音頻遮罩,用環境音製造一個感知干擾區,讓在這個範圍內的覺醒者的聽覺感知出現混淆。」
「為什麼是雨聲?」
「因為雨聲在人類的聽覺習慣裡是最難被定向分析的,」謝鳴山說,「它的頻率分佈很廣,沒有明顯的方向性,覆蓋之後,你很難靠聲音判斷附近有多少人,他們在哪個方向,在做什麼。」
「讓覺醒者的聲音感知失靈,」陸離說,「但代碼視角不受影響。」
「是,但問題是,大多數覺醒者的代碼視角在使用時,習慣性地配合聽覺進行輔助判斷,把聲音輸入和代碼輸入放在同一個注意力框架裡,」謝鳴山說,「雨聲的干擾讓那個框架產生雜訊,不是讓你完全失聰,而是讓你的注意力被聲音拉走一部分,讓你的代碼掃描出現微小的間隙。」
陸離往窗外再聽了一下,試著把耳朵的輸入和代碼視角的輸入在意識層面分開,當做兩個獨立的感知頻道,不讓它們互相干擾。
可以做到,但需要主動維持那個分離,一旦注意力鬆一下,兩個頻道又會自動合並,被聲音影響。
「他們部署了這個,說明他們確認我在這個區域的某個地方,」他說,「但還沒找到具體位置。」
「對。這是第二波搜索策略,」謝鳴山說,「第一波是炸彈網,讓你觸發然後定位;第一波失敗了,第二波是感知干擾,讓維護組在干擾覆蓋下更有效率地搜索,因為你的聽覺感知在干擾下效率降低,你不容易提前發現他們接近。」
「他們在往這個方向縮圈,」陸離說。
「是,你的信號強度調到了 0.3,他們沒辦法直接偵測,但他們排查的是一個區域,只要你不動、他們繼續搜索,遲早會縮到這裡來。」
陸離在椅子上坐下來,雨聲繼續下著,均勻的,沉穩的,完全假的。
「那個音頻事件的 Source 是 world.environment.AudioManager,」他說,「這是系統的環境音頻管理器,不是 SMD 獨有的系統,而是這個世界的基礎層設施。」
「對,SMD 有權限調用環境音頻管理器,這是他們維護組的標準工具。」
「那如果我也往那個管理器裡打一個補丁呢?」陸離說,「不是取消雨聲——取消雨聲他們會知道他們的手段被識破——而是在雨聲裡加一個非常細微的方向性異常,讓雨聲在某個特定方向有一個你察覺不到但代碼層能讀到的模式。然後我用那個模式做定向標記。」
謝鳴山靜靜地看著他。
「你想把他們的干擾工具,改成你自己的方向感知輔助工具,」他說。
「不改掉它,讓它繼續運行,但在它的輸出裡加一個陸離版本的隱藏頻道,」陸離說,「他們以為雨聲只是干擾,但裡面還有我的眼睛。」
謝鳴山沉默了比較長的時間。
「你現在的能力做得到嗎?」他最後問。
「打補丁的基礎操作我做過了,」陸離說,「但這次的目標是外部系統,不是我自己的架構,技術上更難,我不確定能不能做到。但——」
「但你想試。」謝鳴山說,帶著一種陸離沒辦法判斷是欣賞還是憂慮的語氣。
「趁雨聲還在,試一次,」陸離說,「如果做不到,沒有損失;如果做到了,我們在這個區域的移動安全性會大幅提升。」
他試了將近一個小時。
跟在自己的代碼架構上打補丁不同,外部系統有它自己的接口格式,而他沒有在那個系統上的任何許可權。他必須找到那個音頻管理器的代碼結構,找到它可以被外部合法讀取的部分,然後從那個部分的邊緣,把一段非常小的附加邏輯插進去。
他失敗了七次。每次失敗的原因各不相同:有的是格式不兼容,有的是訪問被拒,有的是補丁插進去了但在系統的下一次刷新週期裡被自動清除,因為它的簽名不在白名單裡。
第八次,他換了思路——不是試著往系統核心層插補丁,而是找那個音頻管理器在低精度環境下運行時的一個已知設計節省:這個管理器在鐵南區這類低優先級區域裡,對音頻輸出的完整性校驗是關閉的,因為沒有人認為有必要精確校驗一個沒人來的地方的雨聲品質。
校驗關閉,意味著那個方向有一個沒有守衛的後門。
他把那個後門找到,從那裡把一段非常輕量的模式——不是代碼,而是音頻輸出流裡的一個節奏性微偏差,人耳察覺不到,但他的幽靈代碼感知能讀出——插了進去。
雨聲沒有改變,還是那場完全一樣的假雨。
但現在,在那場假雨裡,他能讀到一個定向的信號,一個跟音頻輸出的方向數據掛鉤的細微模式,讓他知道雨聲覆蓋範圍內每個方向上的環境代碼密度。
用假雨做了一張即時的感知地圖。
他掃了一遍,確認了這個區域目前沒有 SMD 的即時活動——維護組還沒進入這個圈,他還有時間。
林曉晴在旁邊一直沒說話,等他做完,她說:「我剛才用我的感知掃了一遍,沒有讀到任何你在那個音頻管理器上動了什麼。」
「因為我改的是輸出流裡的音頻模式,不是代碼結構,你的感知讀的是代碼層,讀不到音頻層的細微差異,」陸離說,「SMD 也一樣,他們如果沒有特別去掃音頻輸出的模式,他們讀不到我在裡面加了什麼。」
林曉晴不說話了,盯著他看了幾秒。
「你剛才做的,正式的名字叫『信號寄生』,」她說,「是一個三境以後才會的技術,在別人的系統輸出裡隱藏自己的信號,讓你的存在對系統透明。」
「我沒有完整的三境能力,只能做一個很簡陋的版本,而且只在低精度環境下有效,精度高的地方我沒辦法繞過校驗,」陸離說,「算是用了一個 bug,不是正規做法。」
「工程師的話,這叫什麼?」她問。
「管它叫什麼,」他說,「它在跑就行了。」
林曉晴笑了出來,是那種被什麼出乎意料的東西逗到的笑,短暫的,帶著一點什麼說不清楚的輕鬆。
外面,假雨繼續下著,均勻而沉穩,裡面藏著他的眼睛。













