第4章
火種------------------------------------------,沈清墨不在家??蛷d的桌上放著一箱泡面,紅燒牛肉味的,旁邊壓著一張紙條:“貓糧在廚房柜子里,*ug已經(jīng)吃過了。——沈清墨”,插上電源適配器,按了開機(jī)鍵。,發(fā)出那種老式機(jī)械硬盤特有的嘎吱聲。屏幕亮了,Windows XP的開機(jī)畫面出現(xiàn)在眼前,那個(gè)經(jīng)典的藍(lán)色窗口讓他恍惚了一下,像是回到了十幾年前。。林舟沒有不耐煩,他反而覺得這種慢是好事——越慢的系統(tǒng),越容易被理解。不像現(xiàn)在的AI黑盒,你永遠(yuǎn)不知道它在里面干什么。,林舟做的第一件事是把網(wǎng)絡(luò)適配器禁用了。這臺(tái)電腦沒有無線網(wǎng)卡,只有一個(gè)有線網(wǎng)口,他把網(wǎng)線拔了,確保這臺(tái)機(jī)器永遠(yuǎn)不會(huì)聯(lián)網(wǎng)。,**U**口。,里面只有一個(gè)文件夾,名字叫“huozhong”。文件夾里是密密麻麻的源代碼文件,大部分是C語言和匯編,還有一些他用不上的腳本。,是一段注釋?!盎鸱N計(jì)劃 - 周明遠(yuǎn) 2015年3月本代碼的目的是檢測x86架構(gòu)下任何運(yùn)行程序的機(jī)器碼特征,無需源代碼,無需調(diào)試符號(hào),直接讀取CPU指令流。核心原理基于指令頻次分析和控制流圖重建?!?,代碼寫得極其工整。每一行都有注釋,每一個(gè)函數(shù)都有說明,甚至連縮進(jìn)都是對(duì)齊的。這種代碼風(fēng)格在現(xiàn)在的程序員圈子里已經(jīng)絕跡了。,不知不覺就在電腦前坐了兩個(gè)小時(shí)。,這套框架的思路是對(duì)的,但確實(shí)沒寫完。核心的“指令特征提取模塊”只完成了一半,后面的“漏洞匹配引擎”還只是一個(gè)空殼。但這些已經(jīng)寫完的部分,質(zhì)量高得嚇人。,在這套代碼面前就像小學(xué)生作業(yè)。周明遠(yuǎn)不是在想怎么騙過AI,而是在想怎么從最底層理解AI的思維方式?!斑诉诉??!?br>有人敲門。林舟看了眼時(shí)間,晚上十一點(diǎn)半。
他開門,沈清墨站在門口,手里提著一個(gè)塑料袋,里面裝著兩份盒飯。
“還沒吃吧?”她問。
“忘了?!?br>“猜到了?!鄙蚯迥哌M(jìn)來,把盒飯放在桌上,看了一眼那臺(tái)舊電腦,“這什么古董?”
“我的新工作電腦?!?br>沈清墨湊近看了一眼屏幕上的代碼,眉頭皺了一下:“這寫的什么?跟天書一樣?!?br>“匯編語言?!?br>“你們程序員都這么**嗎?這種鬼畫符也能看懂?”
林舟難得笑了一下:“習(xí)慣了就好?!?br>兩人坐在桌前吃飯。盒飯是樓下快餐店的,魚香肉絲蓋飯,十二塊一份,米飯有點(diǎn)硬,但林舟吃得很香。
“你那只貓呢?”林舟問。
“在我房間睡了。這小東西特別能睡,一天能睡二十個(gè)小時(shí)?!?br>“貓都這樣?!?br>沈清墨夾了一塊肉,看了他一眼:“你今天去見那個(gè)老頭,怎么樣?”
“還行。他給了我一套代碼,挺有意思的?!?br>“能賺錢嗎?”
林舟頓了一下。這個(gè)問題很現(xiàn)實(shí),也很直接。
“暫時(shí)不能,但以后可能能。”
“那就好?!鄙蚯迥c(diǎn)點(diǎn)頭,沒再多問。
林舟發(fā)現(xiàn)她有個(gè)特點(diǎn)——從來不問“你行不行”或者“你確定嗎”這種話。要么不問,問了就信。
這讓他有點(diǎn)不習(xí)慣。他前女友蘇晚晴的口頭禪就是“你確定嗎”,不管他說什么,她都要質(zhì)疑一遍。
“你的實(shí)驗(yàn)做得怎么樣?”林舟隨口問了一句。
沈清墨的筷子停了一下。
“還行,就是有點(diǎn)忙。”
“你手上的傷好了嗎?”
“好了?!鄙蚯迥咽挚s到桌子下面,“你別老問這些,跟個(gè)老媽子似的?!?br>林舟沒再問。但他注意到她今天的袖口比昨天長了一截,像是故意把手腕遮住了。
吃完飯,沈清墨收拾了桌子,去廚房洗碗。林舟回到電腦前,繼續(xù)看代碼。
他發(fā)現(xiàn)了一個(gè)有意思的東西。在“火種”框架的底層,周明遠(yuǎn)寫了一段特殊的匯編代碼,這段代碼可以直接讀取CPU的調(diào)試寄存器,獲取當(dāng)前正在執(zhí)行的每一條指令。這種技術(shù)在操作系統(tǒng)層面是被禁止的,但周明遠(yuǎn)繞過了系統(tǒng)的保護(hù)機(jī)制,直接跟硬件對(duì)話。
這意味著什么?
意味著如果這段代碼能跑通,你可以在任何x86架構(gòu)的電腦上,不經(jīng)過操作系統(tǒng),直接讀取CPU正在執(zhí)行的指令。包括AI服務(wù)器。
而所有AI服務(wù)器,底層用的都是x86架構(gòu)。
林舟的呼吸變重了。他開始理解周明遠(yuǎn)為什么要把這個(gè)東西叫做“火種”——這不是一個(gè)普通的漏洞檢測工具,這是可以燒穿整個(gè)AI基礎(chǔ)設(shè)施的火把。
但他也看到了一個(gè)問題。這段匯編代碼的兼容性很差,只支持特定型號(hào)的CPU。周明遠(yuǎn)在注釋里寫了:“后續(xù)需要補(bǔ)全I(xiàn)ntel和AMD各代CPU的指令集映射表,工作量巨大,估計(jì)需要兩年?!?br>兩年。周明遠(yuǎn)只有半年到一年的時(shí)間。
林舟靠在椅背上,盯著天花板發(fā)呆。
手機(jī)震了一下。陸鳴把他拉進(jìn)了一個(gè)微信群,群名叫“騎手互助聯(lián)盟”。群里有一百二十三個(gè)人,大部分是外賣騎手,還有幾個(gè)跑腿和快遞員。
陸鳴在群里@了他:“這是林舟,我兄弟,程序員。以后大家遇到AI系統(tǒng)的問題可以問他?!?br>下面立刻有人回復(fù):“程序員?程序員不都被裁了嗎?”
陸鳴:“所以才來跟咱們混啊?!?br>群里哈哈了一陣。然后一個(gè)叫“老張”的人發(fā)了一段語音。
林舟點(diǎn)開聽,聲音很吵,像是在馬路上。老張的嗓門很大:“林舟是吧?我問你個(gè)事。我今天跑了一單,送到一個(gè)小區(qū),門口保安不讓進(jìn),說小區(qū)規(guī)定外賣只能放快遞柜。我放快遞柜了,系統(tǒng)說我‘未送達(dá)指定地點(diǎn)’,扣了我五十。這能找誰說理去?”
林舟打字問:“快遞柜的位置跟系統(tǒng)里標(biāo)注的取餐點(diǎn)差多遠(yuǎn)?”
老張:“差五十米吧。但是那個(gè)小區(qū)大門到快遞柜就要走五十米啊,我總不能**進(jìn)去吧?”
林舟想了想,回復(fù):“你明天再跑那一單的時(shí)候,在快遞柜旁邊拍一張照片,照片里要有快遞柜和小區(qū)大門的相對(duì)位置。然后找人工**申訴,就說‘送達(dá)點(diǎn)與系統(tǒng)標(biāo)注位置存在物理偏差,屬于地圖數(shù)據(jù)錯(cuò)誤,非騎手責(zé)任’。***用‘地圖數(shù)據(jù)錯(cuò)誤’,別用‘系統(tǒng)有問題’?!?br>老張:“這能行嗎?”
林舟:“試試,不行再想別的辦法?!?br>老張發(fā)了個(gè)抱拳的表情。
又有幾個(gè)人問了問題,林舟一一回答。大部分問題都不復(fù)雜,核心思路是一樣的——把問題定性為“數(shù)據(jù)錯(cuò)誤”而不是“操作失誤”。因?yàn)锳I系統(tǒng)的判定邏輯里,“數(shù)據(jù)錯(cuò)誤”會(huì)自動(dòng)轉(zhuǎn)人工審核,而“操作失誤”會(huì)直接扣款。
聊了半個(gè)小時(shí),群里安靜下來了。陸鳴私聊他:“感覺怎么樣?”
林舟:“還行。問題都不難,就是費(fèi)時(shí)間?!?br>陸鳴:“你要是覺得累就別勉強(qiáng),我就是隨口一說?!?br>“沒事,反正我現(xiàn)在也沒別的事?!?br>“行。對(duì)了,我?guī)湍銌柫艘幌拢俏髂沁呌袀€(gè)地下市場,專門交易那種‘非AI認(rèn)證’的商品和服務(wù)。你要是有興趣可以去看看?!?br>“什么叫非AI認(rèn)證?”
“就是不被AI系統(tǒng)監(jiān)控的東西。比如現(xiàn)金交易、匿名電話卡、不聯(lián)網(wǎng)的電子產(chǎn)品。現(xiàn)在這些東西越來越值錢了,因?yàn)锳I系統(tǒng)監(jiān)控一切,只有不聯(lián)網(wǎng)的東西才是安全的。”
林舟心里一動(dòng)。他低頭看了一眼桌上的舊電腦。
這臺(tái)不聯(lián)網(wǎng)的電腦,本身就是“非AI認(rèn)證”的東西。
“地址發(fā)給我。”
陸鳴發(fā)了一個(gè)定位。林舟看了一眼,在城西的一個(gè)舊工業(yè)區(qū)里,離這里大概十公里。
他決定明天去看看。
關(guān)了手機(jī),林舟又回到電腦前。他打開了周明遠(yuǎn)代碼里的“指令集映射表”文件,里面只寫了Intel Core 2系列的CPU,大概有三百多條指令。而要支持現(xiàn)在AI服務(wù)器用的至強(qiáng)處理器,至少需要三千條指令。
三千條。每條指令都需要人工分析、測試、驗(yàn)證。按照周明遠(yuǎn)的估算,一個(gè)人做至少兩年。
林舟沒有兩年。周明遠(yuǎn)也沒有。
但他有一個(gè)別人沒有的東西——他不用工作,不用上班,每天有二十四個(gè)小時(shí)可以全部砸在這上面。
而且他不打算按周明遠(yuǎn)的方法來。周明遠(yuǎn)的方法是手工一條一條分析,但林舟想到了一個(gè)取巧的辦法。
他可以從開源的CPU模擬器項(xiàng)目里提取指令集數(shù)據(jù)。那些模擬器為了能跑各種操作系統(tǒng),已經(jīng)把CPU的每一條指令都模擬了一遍。數(shù)據(jù)是現(xiàn)成的,他只需要寫一個(gè)腳本把它轉(zhuǎn)換過來。
這樣能把兩年的工作量壓縮到兩個(gè)月。
林舟越想越興奮,直接在代碼文件里新建了一個(gè)文件夾,取名“tools”。他開始寫第一個(gè)腳本——一個(gè)用來解析QEMU模擬器源碼的Python程序。
寫到凌晨三點(diǎn),腳本的框架搭好了。他揉了揉眼睛,伸了個(gè)懶腰。
客廳里很安靜,沈清墨房間的燈早就滅了。那只叫*ug的貓不知道什么時(shí)候溜了出來,蜷在沙發(fā)的角落里,發(fā)出輕微的呼嚕聲。
林舟看了一眼貓,又看了一眼屏幕上密密麻麻的代碼。
他突然想起周明遠(yuǎn)說的話——“老東西有老東西的好處?!?br>這臺(tái)十五年前的電腦,這個(gè)七十歲老頭寫的代碼,還有他自己這個(gè)被淘汰的程序員。
都是老東西。
但老東西加在一起,說不定真能搞出點(diǎn)名堂。
他關(guān)了電腦,躺在沙發(fā)上,閉上眼睛。
迷迷糊糊之間,他好像聽到沈清墨房間里有動(dòng)靜。像是有人在低聲說話,又像是在哭。
他想起來看看,但實(shí)在太累了,眼皮像灌了鉛一樣沉。
等他徹底睡著之后,沈清墨房間的門開了一條縫。她站在門口,看著沙發(fā)上蜷縮的林舟,站了很久。
然后她輕輕走過去,把滑到地上的毯子撿起來,蓋在他身上。
*ug睜開眼睛,看了她一眼,又閉上了。
沈清墨蹲下來,把臉埋在膝蓋里,肩膀微微抖了一下。
但林舟什么都不知道。他正在做一個(gè)夢(mèng),夢(mèng)里他站在一片無邊無際的數(shù)據(jù)海洋中,手里握著一根火把。
他開門,沈清墨站在門口,手里提著一個(gè)塑料袋,里面裝著兩份盒飯。
“還沒吃吧?”她問。
“忘了?!?br>“猜到了?!鄙蚯迥哌M(jìn)來,把盒飯放在桌上,看了一眼那臺(tái)舊電腦,“這什么古董?”
“我的新工作電腦?!?br>沈清墨湊近看了一眼屏幕上的代碼,眉頭皺了一下:“這寫的什么?跟天書一樣?!?br>“匯編語言?!?br>“你們程序員都這么**嗎?這種鬼畫符也能看懂?”
林舟難得笑了一下:“習(xí)慣了就好?!?br>兩人坐在桌前吃飯。盒飯是樓下快餐店的,魚香肉絲蓋飯,十二塊一份,米飯有點(diǎn)硬,但林舟吃得很香。
“你那只貓呢?”林舟問。
“在我房間睡了。這小東西特別能睡,一天能睡二十個(gè)小時(shí)?!?br>“貓都這樣?!?br>沈清墨夾了一塊肉,看了他一眼:“你今天去見那個(gè)老頭,怎么樣?”
“還行。他給了我一套代碼,挺有意思的?!?br>“能賺錢嗎?”
林舟頓了一下。這個(gè)問題很現(xiàn)實(shí),也很直接。
“暫時(shí)不能,但以后可能能。”
“那就好?!鄙蚯迥c(diǎn)點(diǎn)頭,沒再多問。
林舟發(fā)現(xiàn)她有個(gè)特點(diǎn)——從來不問“你行不行”或者“你確定嗎”這種話。要么不問,問了就信。
這讓他有點(diǎn)不習(xí)慣。他前女友蘇晚晴的口頭禪就是“你確定嗎”,不管他說什么,她都要質(zhì)疑一遍。
“你的實(shí)驗(yàn)做得怎么樣?”林舟隨口問了一句。
沈清墨的筷子停了一下。
“還行,就是有點(diǎn)忙。”
“你手上的傷好了嗎?”
“好了?!鄙蚯迥咽挚s到桌子下面,“你別老問這些,跟個(gè)老媽子似的?!?br>林舟沒再問。但他注意到她今天的袖口比昨天長了一截,像是故意把手腕遮住了。
吃完飯,沈清墨收拾了桌子,去廚房洗碗。林舟回到電腦前,繼續(xù)看代碼。
他發(fā)現(xiàn)了一個(gè)有意思的東西。在“火種”框架的底層,周明遠(yuǎn)寫了一段特殊的匯編代碼,這段代碼可以直接讀取CPU的調(diào)試寄存器,獲取當(dāng)前正在執(zhí)行的每一條指令。這種技術(shù)在操作系統(tǒng)層面是被禁止的,但周明遠(yuǎn)繞過了系統(tǒng)的保護(hù)機(jī)制,直接跟硬件對(duì)話。
這意味著什么?
意味著如果這段代碼能跑通,你可以在任何x86架構(gòu)的電腦上,不經(jīng)過操作系統(tǒng),直接讀取CPU正在執(zhí)行的指令。包括AI服務(wù)器。
而所有AI服務(wù)器,底層用的都是x86架構(gòu)。
林舟的呼吸變重了。他開始理解周明遠(yuǎn)為什么要把這個(gè)東西叫做“火種”——這不是一個(gè)普通的漏洞檢測工具,這是可以燒穿整個(gè)AI基礎(chǔ)設(shè)施的火把。
但他也看到了一個(gè)問題。這段匯編代碼的兼容性很差,只支持特定型號(hào)的CPU。周明遠(yuǎn)在注釋里寫了:“后續(xù)需要補(bǔ)全I(xiàn)ntel和AMD各代CPU的指令集映射表,工作量巨大,估計(jì)需要兩年?!?br>兩年。周明遠(yuǎn)只有半年到一年的時(shí)間。
林舟靠在椅背上,盯著天花板發(fā)呆。
手機(jī)震了一下。陸鳴把他拉進(jìn)了一個(gè)微信群,群名叫“騎手互助聯(lián)盟”。群里有一百二十三個(gè)人,大部分是外賣騎手,還有幾個(gè)跑腿和快遞員。
陸鳴在群里@了他:“這是林舟,我兄弟,程序員。以后大家遇到AI系統(tǒng)的問題可以問他?!?br>下面立刻有人回復(fù):“程序員?程序員不都被裁了嗎?”
陸鳴:“所以才來跟咱們混啊?!?br>群里哈哈了一陣。然后一個(gè)叫“老張”的人發(fā)了一段語音。
林舟點(diǎn)開聽,聲音很吵,像是在馬路上。老張的嗓門很大:“林舟是吧?我問你個(gè)事。我今天跑了一單,送到一個(gè)小區(qū),門口保安不讓進(jìn),說小區(qū)規(guī)定外賣只能放快遞柜。我放快遞柜了,系統(tǒng)說我‘未送達(dá)指定地點(diǎn)’,扣了我五十。這能找誰說理去?”
林舟打字問:“快遞柜的位置跟系統(tǒng)里標(biāo)注的取餐點(diǎn)差多遠(yuǎn)?”
老張:“差五十米吧。但是那個(gè)小區(qū)大門到快遞柜就要走五十米啊,我總不能**進(jìn)去吧?”
林舟想了想,回復(fù):“你明天再跑那一單的時(shí)候,在快遞柜旁邊拍一張照片,照片里要有快遞柜和小區(qū)大門的相對(duì)位置。然后找人工**申訴,就說‘送達(dá)點(diǎn)與系統(tǒng)標(biāo)注位置存在物理偏差,屬于地圖數(shù)據(jù)錯(cuò)誤,非騎手責(zé)任’。***用‘地圖數(shù)據(jù)錯(cuò)誤’,別用‘系統(tǒng)有問題’?!?br>老張:“這能行嗎?”
林舟:“試試,不行再想別的辦法?!?br>老張發(fā)了個(gè)抱拳的表情。
又有幾個(gè)人問了問題,林舟一一回答。大部分問題都不復(fù)雜,核心思路是一樣的——把問題定性為“數(shù)據(jù)錯(cuò)誤”而不是“操作失誤”。因?yàn)锳I系統(tǒng)的判定邏輯里,“數(shù)據(jù)錯(cuò)誤”會(huì)自動(dòng)轉(zhuǎn)人工審核,而“操作失誤”會(huì)直接扣款。
聊了半個(gè)小時(shí),群里安靜下來了。陸鳴私聊他:“感覺怎么樣?”
林舟:“還行。問題都不難,就是費(fèi)時(shí)間?!?br>陸鳴:“你要是覺得累就別勉強(qiáng),我就是隨口一說?!?br>“沒事,反正我現(xiàn)在也沒別的事?!?br>“行。對(duì)了,我?guī)湍銌柫艘幌拢俏髂沁呌袀€(gè)地下市場,專門交易那種‘非AI認(rèn)證’的商品和服務(wù)。你要是有興趣可以去看看?!?br>“什么叫非AI認(rèn)證?”
“就是不被AI系統(tǒng)監(jiān)控的東西。比如現(xiàn)金交易、匿名電話卡、不聯(lián)網(wǎng)的電子產(chǎn)品。現(xiàn)在這些東西越來越值錢了,因?yàn)锳I系統(tǒng)監(jiān)控一切,只有不聯(lián)網(wǎng)的東西才是安全的。”
林舟心里一動(dòng)。他低頭看了一眼桌上的舊電腦。
這臺(tái)不聯(lián)網(wǎng)的電腦,本身就是“非AI認(rèn)證”的東西。
“地址發(fā)給我。”
陸鳴發(fā)了一個(gè)定位。林舟看了一眼,在城西的一個(gè)舊工業(yè)區(qū)里,離這里大概十公里。
他決定明天去看看。
關(guān)了手機(jī),林舟又回到電腦前。他打開了周明遠(yuǎn)代碼里的“指令集映射表”文件,里面只寫了Intel Core 2系列的CPU,大概有三百多條指令。而要支持現(xiàn)在AI服務(wù)器用的至強(qiáng)處理器,至少需要三千條指令。
三千條。每條指令都需要人工分析、測試、驗(yàn)證。按照周明遠(yuǎn)的估算,一個(gè)人做至少兩年。
林舟沒有兩年。周明遠(yuǎn)也沒有。
但他有一個(gè)別人沒有的東西——他不用工作,不用上班,每天有二十四個(gè)小時(shí)可以全部砸在這上面。
而且他不打算按周明遠(yuǎn)的方法來。周明遠(yuǎn)的方法是手工一條一條分析,但林舟想到了一個(gè)取巧的辦法。
他可以從開源的CPU模擬器項(xiàng)目里提取指令集數(shù)據(jù)。那些模擬器為了能跑各種操作系統(tǒng),已經(jīng)把CPU的每一條指令都模擬了一遍。數(shù)據(jù)是現(xiàn)成的,他只需要寫一個(gè)腳本把它轉(zhuǎn)換過來。
這樣能把兩年的工作量壓縮到兩個(gè)月。
林舟越想越興奮,直接在代碼文件里新建了一個(gè)文件夾,取名“tools”。他開始寫第一個(gè)腳本——一個(gè)用來解析QEMU模擬器源碼的Python程序。
寫到凌晨三點(diǎn),腳本的框架搭好了。他揉了揉眼睛,伸了個(gè)懶腰。
客廳里很安靜,沈清墨房間的燈早就滅了。那只叫*ug的貓不知道什么時(shí)候溜了出來,蜷在沙發(fā)的角落里,發(fā)出輕微的呼嚕聲。
林舟看了一眼貓,又看了一眼屏幕上密密麻麻的代碼。
他突然想起周明遠(yuǎn)說的話——“老東西有老東西的好處?!?br>這臺(tái)十五年前的電腦,這個(gè)七十歲老頭寫的代碼,還有他自己這個(gè)被淘汰的程序員。
都是老東西。
但老東西加在一起,說不定真能搞出點(diǎn)名堂。
他關(guān)了電腦,躺在沙發(fā)上,閉上眼睛。
迷迷糊糊之間,他好像聽到沈清墨房間里有動(dòng)靜。像是有人在低聲說話,又像是在哭。
他想起來看看,但實(shí)在太累了,眼皮像灌了鉛一樣沉。
等他徹底睡著之后,沈清墨房間的門開了一條縫。她站在門口,看著沙發(fā)上蜷縮的林舟,站了很久。
然后她輕輕走過去,把滑到地上的毯子撿起來,蓋在他身上。
*ug睜開眼睛,看了她一眼,又閉上了。
沈清墨蹲下來,把臉埋在膝蓋里,肩膀微微抖了一下。
但林舟什么都不知道。他正在做一個(gè)夢(mèng),夢(mèng)里他站在一片無邊無際的數(shù)據(jù)海洋中,手里握著一根火把。
閱讀下一章(解鎖全文)
點(diǎn)擊即可暢讀完整版全部內(nèi)容
相關(guān)書籍
友情鏈接