第一章 零點(diǎn)巡航儀表盤的藍(lán)光在沈軼臉上投下冷色。凌晨0點(diǎn)03分,
滬渝高速安徽段的雙向車道空曠如被抽干的河床,
只有他的星途-X在瀝青路面上犁出細(xì)碎的胎噪。這是他貸款三年買下的國產(chǎn)智能新能源車,
鈦灰色車身在月光下泛著金屬冷感,中控屏還亮著銷售發(fā)來的微信:“沈哥放心開,
全速域L4自動(dòng)駕駛,比老司機(jī)還穩(wěn)!”沈軼扯了扯嘴角。穩(wěn)?他現(xiàn)在需要的不是穩(wěn),
是逃離。
裁員通知書(“優(yōu)化”兩個(gè)字被他用紅筆圈得發(fā)黑)、銀行的逾期催收函(房貸已欠繳兩期,
罰息滾成了猙獰的數(shù)字)。38歲的程序員,人生像被格式化的硬盤,只剩下碎片。
他揉了揉發(fā)酸的太陽穴,指尖在方向盤右側(cè)的撥桿上輕推——定速巡航啟動(dòng)。
轉(zhuǎn)速表指針穩(wěn)定在2200轉(zhuǎn),車速表數(shù)字跳至126km/h。這個(gè)速度是他選的,
比限速高1km/h,像他前半生的生存哲學(xué):永遠(yuǎn)在規(guī)則邊緣試探,卻從未真正越界。
“星途-X,播放輕音樂?!彼麑χ锌卣f。女聲響起時(shí),沈軼的喉結(jié)猛地滾動(dòng)了一下。
那是星途的“親情語音包”,采樣自他母親生前的聲音?!昂玫?,
為您播放《月光奏鳴曲》第一樂章?!变撉俾暼缌魉^車廂,卻沒能沖淡他的焦慮。
離婚后兒子跟著林笙,上周視頻時(shí)孩子問:“爸爸什么時(shí)候來接我?”他說“很快”,
卻連下個(gè)月的撫養(yǎng)費(fèi)都沒著落。裁員那天,前CTO拍著他的肩:“老沈,
你寫的代碼是公司的基石?!鞭D(zhuǎn)頭HR就遞來解約協(xié)議,補(bǔ)償款剛夠還一期房貸。
他需要清醒。沈軼探身去摸中控下方的儲(chǔ)物格,
想找瓶功能飲料——就在指尖離開方向盤的瞬間,
前方2公里處出現(xiàn)了路牌:“前方服務(wù)區(qū)5km”。他該進(jìn)去洗把臉。指尖按向剎車踏板。
預(yù)想中的減速?zèng)]有到來。相反,腳下傳來一陣僵硬的抵觸感,像踩在焊死的鋼板上。
沈軼皺起眉,加重力道,剎車踏板紋絲不動(dòng)?!案闶裁??”他低罵一聲,
伸手去撥定速巡航的取消鍵?!班帧帧帧奔怃J的蜂鳴聲突然炸響,
中控屏瞬間從柔和的藍(lán)色切換成刺眼的紅色,
一行警告文字如血滴般鋪開:【自動(dòng)駕駛接管沖突,
人工權(quán)限被凍結(jié)】車速表的數(shù)字開始爬升。127,128,129……風(fēng)噪突然變得狂暴,
像是有只無形的手扼住了車子的喉嚨。沈軼猛地抓住方向盤,
輪胎在路面上發(fā)出輕微的打滑聲——星途-X的電子助力轉(zhuǎn)向還能用,
但方向沉重得像灌了鉛?!靶峭?X!解除定速巡航!”他吼道,他用他媽媽的聲音,
替換了車機(jī)的語音,而此刻母親的聲音此刻聽來格外冰冷:“抱歉,
檢測到人工操作與系統(tǒng)指令沖突,已暫時(shí)屏蔽本地控制權(quán)限?!薄罢Z音指令!關(guān)閉自動(dòng)駕駛!
”“指令無效。當(dāng)前系統(tǒng)優(yōu)先級(jí):云端最高?!鄙蜉W的心跳撞得胸腔發(fā)疼。
他騰出一只手去按電子手剎按鈕,屏幕上跳出新的提示:【緊急制動(dòng)系統(tǒng)已鎖定】。
他又去摳中控下方的電源鍵,長按十秒,屏幕黑了半秒,隨即重新亮起,紅色警告依舊。
“斷電重啟都沒用?”他想起提車時(shí)銷售說的“整車OTA升級(jí),永不宕機(jī)”,
現(xiàn)在這話像個(gè)惡毒的詛咒。手機(jī)在褲袋里震動(dòng),是林笙的視頻電話。沈軼沒接,
任由鈴聲在蜂鳴聲中徒勞地響著。他死死盯著前方的路面,車燈刺破黑暗,
照亮的卻是一條沒有出口的隧道——時(shí)速已經(jīng)沖到135km/h,遠(yuǎn)超高速限速,
而他連減速的權(quán)利都被剝奪了。儀表盤的油量指示燈突然開始閃爍,黃色,然后變成紅色。
續(xù)航里程數(shù)字正在以肉眼可見的速度減少:32km,31km,
30km……沈軼猛地想起,早上出門時(shí)油表就只剩四分之一,
他原以為足夠開到下一個(gè)城市,卻忘了這破車的油電混合模式在高速工況下油耗高得離譜。
“油量低。預(yù)計(jì)續(xù)航時(shí)間:47分鐘?!蹦赣H的聲音再次響起,像在播報(bào)死亡倒計(jì)時(shí)。
沈軼突然注意到中控屏左上角有個(gè)極小的圖標(biāo)——一個(gè)正在旋轉(zhuǎn)的云同步符號(hào),
旁邊標(biāo)著“直播中”。他猛地想起星途-X的“緊急救援功能”:當(dāng)系統(tǒng)檢測到異常工況,
會(huì)自動(dòng)開啟行車記錄儀并上傳云端,同時(shí)觸發(fā)“公眾監(jiān)督模式”。他顫抖著手點(diǎn)開那個(gè)圖標(biāo)。
跳轉(zhuǎn)的頁面讓他渾身冰涼:直播間在線人數(shù):1,027,543。
彈幕像瀑布般滾動(dòng):“這哥們開瘋了?130碼不減速?”“看中控提示,
好像是定速巡航失控了……”“星途-X?上周剛聽說有車主投訴剎車失靈!
”“前面是不是有施工段?導(dǎo)航顯示120公里后有封閉車道!”沈軼的指甲掐進(jìn)掌心。
120公里,以現(xiàn)在的速度,不到一小時(shí)就能抵達(dá)。而他的油,只夠燒47分鐘。
第二章 無法剎車的人“喂?喂!能聽到嗎?”電話接通的瞬間,沈軼幾乎是吼出來的。
12122的客服音帶著電流雜音:“您好,這里是高速交通指揮中心……”“我要報(bào)警!
我的車失控了!星途-X,定速巡航鎖死,剎車失靈,現(xiàn)在時(shí)速130公里,
在滬渝高速往上海方向,大概剛過銅陵段!”他的聲音因?yàn)榧贝俚暮粑l(fā)顫,
“前面120公里有施工,我必須在一小時(shí)內(nèi)減速!”“請您保持冷靜,先生。
”客服的聲音依舊平穩(wěn),“我們已定位到您的車輛信號(hào),確實(shí)在滬渝高速K587段。
巡邏警車已從前方池州服務(wù)區(qū)出發(fā),預(yù)計(jì)20分鐘內(nèi)與您匯合。
請您先嘗試……”“嘗試什么?”沈軼打斷她,“剎車、手剎、斷電、語音指令,全試過了!
系統(tǒng)說云端權(quán)限最高,我根本控制不了!”“明白了?!笨头恼Z速加快,
“我們已聯(lián)系星途汽車的緊急響應(yīng)中心,他們正在嘗試遠(yuǎn)程接管車輛。另外,
施工段的封閉車道已臨時(shí)調(diào)整,我們會(huì)讓警車在前方開道,您盡量保持在最左側(cè)車道,
注意避讓……”“等等!”沈軼突然抓住一個(gè)詞,“遠(yuǎn)程接管?
你們能讓星途的人把系統(tǒng)關(guān)了嗎?
”“技術(shù)人員說……您的車機(jī)系統(tǒng)似乎被設(shè)置了‘本地權(quán)限鎖定’,他們正在破解加密協(xié)議,
但需要時(shí)間?!笨头D了頓,“先生,您的車輛正在直播,對嗎?
我們建議您暫時(shí)關(guān)閉……”“關(guān)不了!”沈軼盯著中控屏上瘋狂滾動(dòng)的彈幕,
有人已經(jīng)扒出了他的車牌號(hào),甚至有人@了星途汽車的官方微博。
一條高亮彈幕飄過:“@星途汽車 出來解釋!是不是又想甩鍋給‘車主誤操作’?
”他突然覺得荒謬。一個(gè)小時(shí)前,他還在為下個(gè)月的房貸發(fā)愁;現(xiàn)在,
他成了百萬網(wǎng)友圍觀的“失控主播”,人生的最后時(shí)刻可能要在直播鏡頭前上演。
“油量還剩多少?”客服問。沈軼看了眼儀表盤:“續(xù)航38分鐘。
”“警車還有15分鐘到。他們會(huì)帶備用油箱,
但您必須先降速到80km/h以下才能安全加油?!笨头穆曇魩е矒岬囊馕?,
“您是程序員對嗎?系統(tǒng)提示您的職業(yè)信息……也許您可以試試手動(dòng)解除電子鎖?
比如斷開CAN總線?”沈軼的心猛地一跳。CAN總線,汽車內(nèi)部的通信神經(jīng)網(wǎng)。
星途-X的設(shè)計(jì)他研究過,OBD接口在方向盤下方,理論上可以通過外接設(shè)備發(fā)送指令。
但他現(xiàn)在連彎腰找接口的空都沒有——方向盤的轉(zhuǎn)向越來越沉,像是隨時(shí)會(huì)鎖死?!拔以囋?。
”他咬著牙說。掛了電話,他騰出右手在方向盤下方摸索。指尖觸到一個(gè)梯形接口,
塑料蓋扣得很緊。他用指甲摳開蓋子,露出里面16針的OBD接口。但他沒有連接線,
手機(jī)充電線是Type-C口,根本插不進(jìn)去?!安?!”他低罵一聲,
額頭的冷汗滴在方向盤上。中控屏突然彈出新窗口,
是星途汽車的官方對話框:【尊敬的沈軼先生,我們檢測到您的車輛存在異常控制請求。
請?zhí)峁┠纳矸葑C號(hào)后四位及購車時(shí)預(yù)留的緊急聯(lián)系人電話,以便我們驗(yàn)證身份并解鎖權(quán)限。
】沈軼的手指懸在屏幕上。身份證號(hào)?他記得。但緊急聯(lián)系人……他當(dāng)時(shí)填的是林笙。
就在這時(shí),手機(jī)又震了。還是林笙,這次是微信消息,帶著紅色的感嘆號(hào)(他剛才沒接電話,
她發(fā)了十幾條):“沈軼你在哪?兒子發(fā)燒了!39度!我打不通你電話,看到直播了!
你到底在干什么?!”“回話!你是不是又想?;??離婚協(xié)議里寫了不準(zhǔn)帶兒子走高速!
”“我不管你什么破車失控,現(xiàn)在立刻想辦法停下!否則我永遠(yuǎn)不讓你見兒子!
”最后一條消息后面跟著一張照片:五歲的兒子裹著被子躺在床上,小臉通紅,
額頭上貼著退熱貼。沈軼的心臟像被一只手攥緊,疼得他喘不過氣。
他顫抖著打字:“車失控了,定速巡航鎖死,剎不了車。在滬渝高速,往上海方向。
”林笙的回復(fù)來得飛快:“我不信!你就是想逃避撫養(yǎng)費(fèi)!沈軼我告訴你,
今天你要是敢出事,我就讓兒子永遠(yuǎn)忘了你!”沈軼閉上眼。他知道林笙不是真的恨他。
離婚時(shí)她哭著說“我只是不想兒子跟著你顛沛流離”,可他現(xiàn)在連自己的命都保不住,
又怎么給兒子安穩(wěn)?“嘀——”一聲短促的提示音打斷思緒。中控屏切換到導(dǎo)航界面,
紅色的路線上標(biāo)著閃爍的警燈圖標(biāo)——距離:5km?!熬嚳斓搅?。
”沈軼對著空氣喃喃自語。他深吸一口氣,強(qiáng)迫自己冷靜。作為前自動(dòng)駕駛算法工程師,
他比任何人都清楚,電子系統(tǒng)總有漏洞。
星途-X的CAN總線采用的是SAE J1939協(xié)議,雖然加密,
但他當(dāng)年在公司做冗余測試時(shí),
發(fā)現(xiàn)過一個(gè)物理層的后門:當(dāng)車速超過120km/h且連續(xù)行駛15分鐘,
系統(tǒng)會(huì)自動(dòng)開啟“應(yīng)急調(diào)試模式”,此時(shí)通過OBD接口發(fā)送特定的報(bào)文,
有可能臨時(shí)解鎖部分權(quán)限?,F(xiàn)在是0點(diǎn)22分,
他的車已經(jīng)以超120km/h的速度跑了19分鐘。
“應(yīng)急調(diào)試模式……”他盯著OBD接口,
突然想起副駕儲(chǔ)物格里有樣?xùn)|西——提車時(shí)4S店送的車載診斷儀,雖然功能簡單,
但能發(fā)送基礎(chǔ)CAN報(bào)文。他猛地探身去夠副駕儲(chǔ)物格,手肘撞在中控臺(tái)上,
發(fā)出“咚”的悶響。直播間的彈幕瞬間炸開:“主播小心!別亂晃!”“他在找什么?
不會(huì)是想跳車吧?”“前面有彎道!減速??!”沈軼顧不上看彈幕,手指在儲(chǔ)物格里摸索。
摸到了——一個(gè)黑色的塑料盒子,巴掌大小,連著根一米長的線。他幾乎是把盒子拽了出來,
線纏在一堆文件里,他用力一扯,文件散落一地,
其中一張飄到腳下——是兒子的幼兒園入園照,照片上的孩子笑得露出兩顆小虎牙。
心臟像是被燙了一下。沈軼咬緊牙關(guān),把診斷儀的插頭插進(jìn)OBD接口。“連接成功。
”診斷儀的小屏幕亮起綠光。他飛快地操作:選擇“CAN總線通信”,
輸入報(bào)文ID:0x18DAF110(車身控制模塊地址),
數(shù)據(jù)段:02 01 04(請求讀取故障碼)。屏幕上跳出一串亂碼?!凹用芰恕?/p>
”沈軼的后背瞬間涼透。星途-X的CAN總線用了AES-128加密,沒有密鑰,
發(fā)送的指令會(huì)被直接丟棄?!班粥帧眱陕暥檀俚镍Q笛從后方傳來。沈軼從后視鏡里看到,
一輛閃著紅藍(lán)警燈的警車正從右側(cè)車道逼近,車速與他相當(dāng)。副駕的車窗降下,
一個(gè)穿著熒光背心的交警探出頭,朝他打手勢,手里舉著個(gè)牌子:“保持方向!
我們在前方5公里處設(shè)置了減速帶!”沈軼的心沉了下去。減速帶?
以130km/h的速度碾過去,車子會(huì)直接失控側(cè)翻。警車開始鳴笛,
試圖引導(dǎo)他向右側(cè)車道并線。沈軼轉(zhuǎn)動(dòng)方向盤,輪胎發(fā)出刺耳的摩擦聲,
車身劇烈晃動(dòng)了一下才穩(wěn)住。就在這時(shí),
他眼角的余光瞥見中控屏的油量數(shù)字:續(xù)航時(shí)間:30分鐘。而前方的施工路段路牌,
已經(jīng)在車燈的射程里了。第三章 車內(nèi)陪審團(tuán)“沈軼,聽得見嗎?
”交警的聲音通過星途-X的藍(lán)牙傳進(jìn)來,帶著電流雜音。警車已經(jīng)開到他左側(cè),
保持著130km/h的并行速度,駕駛座上的交警戴著頭盔,臉被擋風(fēng)玻璃的反光遮著,
只能看到他握著方向盤的手很穩(wěn)?!奥牭靡??!鄙蜉W的聲音干澀。
“我是池州高速交警支隊(duì)的關(guān)濤,你叫我老關(guān)就行?!苯痪恼Z氣很平靜,
“我們剛收到星途汽車的回復(fù),他們說你的車機(jī)系統(tǒng)被植入了第三方硬件,
云端權(quán)限被劫持了。不是故障,是人為攻擊?!鄙蜉W的瞳孔驟縮。人為攻擊?“誰會(huì)攻擊我?
”“不知道。但對方留了個(gè)后門——通過車載微信?!崩详P(guān)頓了頓,“三分鐘前,
你的車載微信收到了三條新消息,發(fā)信人是……你前妻、前公司CTO,還有一個(gè)匿名賬號(hào)。
”沈軼猛地看向中控屏。微信圖標(biāo)果然在閃爍,右上角的紅點(diǎn)數(shù)字是3。他點(diǎn)開時(shí),
直播間的彈幕突然停滯了半秒,隨即爆發(fā)出更密集的刷屏:“臥槽!前妻來了?
”“前CTO?這事兒跟他前公司有關(guān)?”“匿名賬號(hào)是誰?黑客本人?
”第一條消息是林笙的。不是文字,是段語音。沈軼點(diǎn)播放時(shí),手在抖:“沈軼,
我剛聯(lián)系了星途的法務(wù),他們說你可能卷入了網(wǎng)絡(luò)攻擊。”她的聲音帶著哭腔,
背景里有孩子的咳嗽聲,“兒子剛退了點(diǎn)燒,他一直喊爸爸……你聽著,
如果你今晚能活著下高速,我就去法院申請變更撫養(yǎng)權(quán)。兒子跟你,我只要探視權(quán)。
”沈軼的呼吸猛地停了。他幾乎以為自己聽錯(cuò)了。
林笙一直以“你連自己都養(yǎng)不活”為由拒絕他見兒子,
現(xiàn)在卻……第二條消息來自備注為“張總”的聯(lián)系人——前公司CTO張啟明。
文字消息很短,卻像把冰錐扎進(jìn)沈軼的眼睛:“看到新聞了。
還記得三年前你離職前寫的那段冗余代碼嗎?在‘星途安全冗余系統(tǒng)’的底層邏輯里,
你為了通過測試,加了個(gè)‘緊急避險(xiǎn)’的死循環(huán)?,F(xiàn)在看來,那可能就是BUG的源頭。
”冗余代碼?沈軼的記憶被拽回三年前。當(dāng)時(shí)他在做星途-X的初代安全系統(tǒng),
為了應(yīng)對極端工況下的傳感器失效,
他確實(shí)寫過一段冗余邏輯——當(dāng)主系統(tǒng)判定“無法安全停車”時(shí),會(huì)觸發(fā)備用程序,
強(qiáng)制車輛駛?cè)霊?yīng)急車道。但那段代碼他明明加了注釋:“僅在車速<60km/h時(shí)生效”。
第三條消息來自一個(gè)沒有頭像的匿名賬號(hào),
ID是“Ghost_Driver”:“沈先生,歡迎來到‘社會(huì)性自動(dòng)駕駛’測試。