服務區(qū)的燈光在凌晨四點的風里微微顫動。周承岳沒有發(fā)動引擎,只是把駕駛座的靠背略微后調了一點,讓視線保持在前方路面的覆蓋范圍內。顧晏把那臺頻譜儀重新拿了出來,開機后掃了一遍周邊環(huán)境,屏幕上的噪聲曲線平直穩(wěn)定,沒有異常的射頻信號。
陸維楨靠在座椅里閉著眼睛,但腦子里“天工“系統(tǒng)的光屏正在持續(xù)運作。b1-sub離線時間戳的數(shù)據已經被系統(tǒng)做了多輪關聯(lián)分析,輸出結果以簡潔的條目形式排列在他的視野里:十一月二十七日晚八點十七分,b1-sub向蓉城中心區(qū)某ip發(fā)出確認信號。該ip段正好覆蓋那家國際連鎖酒店的b座客房網絡。確認信號的數(shù)據包大小只有不到十千字節(jié),內容很可能是位置確認或者身份驗證,而不是數(shù)據本身。
他睜開眼?!胺兜旅谞柊延布没亓司频??!八f,“b1-sub的離線信號發(fā)送時間是晚上八點十七分,他在那之前就已經把設備從工廠地下取出來了。今晚他出現(xiàn)在井蓋旁邊,一是確認a-04還在工作,二是看看有沒有人在井蓋附近做多余的動作?!?/p>
周承岳把座椅靠背調回了豎直位置。“所以他手里現(xiàn)在有地下主機的原始數(shù)據。“
“有?!瓣懢S楨說,“但他拿到的數(shù)據和我們今天替換進終端的那批數(shù)據不是同一份。b1-sub作為地下主機,它存儲的數(shù)據范圍比a-04更廣。a-04只是它的一個數(shù)據接收節(jié)點,類似于它放在外面的耳朵。b1-sub里面存著過去一段時間內從多個節(jié)點采集匯總的全部原始記錄。范德米爾拿走了整套數(shù)據集?!?/p>
顧晏從挎包里取出手機重新翻看了設備間的照片,把終端列表里那條離線狀態(tài)的時間戳截圖放大?!叭绻鸼1-sub在八點十七分發(fā)送了確認信號到酒店ip,說明范德米爾到酒店的時間應該早于八點十七分。他把硬件帶進房間之后開機通電,它自動連上了酒店的網絡并發(fā)送了位置確認信號。“
“那他拿到數(shù)據之后為什么還要去井蓋旁邊確認a-04?“周承岳問。
“他要確認數(shù)據鏈路上的每一個環(huán)節(jié)都處于未被觸碰的狀態(tài)。“陸維楨說,“他有原始數(shù)據,但如果a-04或者終端鏈路被人動過,那原始數(shù)據和鏈路數(shù)據之間的偏差會被記錄下來。他需要確認他的整條采集網絡從硬件到傳輸?shù)浇邮斩歼€是干凈的。今晚他確認完a-04之后,才會在明天凌晨三點正式接收終端里存的那批數(shù)據。兩條鏈路的數(shù)據如果一致,說明系統(tǒng)仍然安全?!?/p>
陸維楨說到這里停了半拍。他意識到范德米爾的計劃有一個核心邏輯前提:他必須等到明天凌晨三點接收到終端數(shù)據之后,才能對比兩組數(shù)據做一致性判斷。這意味著——從現(xiàn)在到明天凌晨三點之間,范德米爾還不會對酒店房間里的b1-sub硬件做任何處理。他需要那個硬件里的原始數(shù)據留著,等到明天凌晨接收完終端數(shù)據之后做比對。
“硬件還在他酒店房間里?!瓣懢S楨說,“他沒動過它。因為他需要等終端數(shù)據到齊之后再一起處理?!?/p>
周承岳的車鑰匙在點火開關上轉動了半圈,引擎低鳴著啟動了。他沒有說話,但車的方向已經明確——返回市區(qū),朝城中心方向駛去??焖俾飞系能嚵髟诹璩克狞c多仍然稀疏,深色suv以穩(wěn)定的速度穿過一段段路燈照亮的橋面,城區(qū)建筑的輪廓開始在前方的天際線處密集起來。
陸維楨在手機上打開了那家國際連鎖酒店的建筑結構圖紙,是通過公開的地產備案信息查到的。酒店b座一共十二層,標準層平面呈回字形布局,客房分布在回字形外圍,中間是采光天井。范德米爾登記的房間號在六層,朝向西南,正好對著龍科院方向和東郊工廠方向之間的夾角。
“如果硬件被帶進房間之后開機通電就自動發(fā)送了確認信號,“顧晏說,“那它現(xiàn)在應該還在房間內。酒店客房不像實驗室,沒有電磁屏蔽,它的射頻信號如果還在工作,頻譜儀在外部就能收到。“
陸維楨看向顧晏挎包里的那臺手持式頻譜儀。他在心里估算了一下酒店建筑結構和外部街道之間的距離:六層樓,西南朝向,靠近酒店內部天井的墻壁厚度大約二十五厘米,外側幕墻是玻璃幕加金屬龍骨。射頻信號穿透這些結構之后到達街面的衰減量應該仍然處于可測范圍內。
“車停酒店對面那條街。“陸維楨說,“面向西南方向,六層高度的位置。如果信號還在,我們在街對面應該能捕捉到。“
周承岳在一個路口減速后轉向了酒店北側的一條平行街。車輛在一排夜間關閉的商鋪前面停了下來,車頭朝酒店方向。從這個角度看上去,b座六層西南方向的窗戶正對著他們所在的街面,之間有大約四十米的直線距離。
顧晏把頻譜儀的天線從車窗縫隙伸出去,對準酒店b座六層西南方向的窗面啟動了掃描。屏幕上跳出了噪聲基底之上的微弱信號峰值,頻率穩(wěn)定在一個與echo-7設備工作頻段吻合的窄帶范圍內。信號強度不高,但持續(xù)存在,間隔特征和設備待機狀態(tài)下的周期性心跳信號完全一致。
“硬件還在房間里?!邦欔贪哑聊粋认蜿懢S楨,“信號強度顯示它的位置在六層西南側,正對著我們。沒有任何移動或者被屏蔽的跡象。它還在原地等明天凌晨的數(shù)據比對?!?/p>
陸維楨透過前擋風玻璃看向那扇窗戶。六樓西南方向的窗簾是半拉的,透出一線暖黃色的室內燈光。看不到人影,看不到活動痕跡。整個酒店外觀在凌晨的街道燈光下沉睡著,只有大堂門廊的頂燈亮著將一小片地面照成暖白色。
他把目光收回來,落在自己的手背上。車內的暖氣把窗玻璃上的凝霜融化了一層,水滴沿著窗面流下來,把酒店的外輪廓模糊成一條條垂直的亮線。
“b1-sub的確認信號發(fā)送給酒店ip之后,“他開口時聲音不大,“服務器那邊會收到一個回執(zhí),內容應該是設備已上線,等待數(shù)據接收指令。范德米爾如果想在明天凌晨三點接收數(shù)據時讓b1-sub正常工作,他不能把它關機。它要保持在線狀態(tài)等待指令。“
周承岳在駕駛座上沉默了一下?!澳悄阌袥]有辦法讓它“換一個人等待指令“?“
陸維楨看著那扇半拉的窗簾。車窗上的水滴繼續(xù)垂直流淌著,把窗簾和燈光拉成一道道模糊的流光。他腦子里正在快速評估一個操作的可行性:酒店房間距離街面四十米,設備發(fā)出的射頻信號被他用頻譜儀捕捉到了,那么反向——如果他從街面上向酒店房間發(fā)送一個偽造的指令包,只要功率和協(xié)議匹配,b1-sub會把它當作來自服務器的合法指令來響應。
“需要兩個條件?!八f,“第一,我要知道它的指令格式——今天從a-04和終端數(shù)據里我們已經拿到了足夠多的協(xié)議樣本。第二,我要在它接收指令的頻段上以適當?shù)墓β拾l(fā)送偽造數(shù)據包?!?/p>
“用定向天線?!邦欔陶f,“頻譜儀的射頻輸出口可以做發(fā)射源,配合一只定向天線聚焦射向六樓那扇窗戶。功率控制好,確保信號到達時剛好在設備的接收靈敏度以上,不會讓房間內的其他電子設備產生誤響應?!?/p>
“需要多近距離?“周承岳問。
“不需要更近。“陸維楨說,“四十米,定向天線的波束半徑在三米以內,剛好覆蓋那扇窗戶的區(qū)域。我坐在車里就能完成發(fā)射。“
他重新看向那扇窗簾半拉的窗戶。暖黃色的燈光穩(wěn)定地從縫隙里透出來,把窗簾邊緣的一小段輪廓照得清晰可見。他的手指懸在筆記本的鍵盤上方,準備開始構造偽造指令包。外面的路燈在凌晨的低溫中發(fā)出穩(wěn)定的白光,酒店建筑整體的輪廓在夜空中安靜地矗立著,六樓西南朝向那扇窗戶透出的燈光像一只半闔的眼睛注視著街對面深色suv里坐著的人。
但陸維楨在準備開始輸入之前,忽然注意到了另一件事。那扇窗簾透出的燈光在窗面左上角有一個極小的暗斑——不是玻璃上的污漬,而是從房間內部投射在窗簾上的一個形狀規(guī)整的物體剪影,大小和輪廓近似于一臺臺式機箱或同等尺寸的設備。它貼在窗簾內側,沒有移動,沒有變化,和燈光一起穩(wěn)定地存在于那里。
他盯著那個暗斑看了幾秒。天工系統(tǒng)的光屏自動拉近了那個區(qū)域的圖像對比度,暗斑的邊緣被銳化后呈現(xiàn)出清晰的矩形輪廓,側面還有一組隱約可見的通風孔陣列——那種標準服務器機箱的散熱格柵形態(tài)。b1-sub就放在窗簾內側的桌面上,正面朝向龍科院的方向,正在安靜地等待明天凌晨三點接到的指令。它的散熱格柵在窗簾上留出的暗斑像是嵌在光線里的一個方形印記,比周圍亮著的部分暗了一整圈,像是在告訴對面街上的每個人它所處的位置。