【15、破局】
關燈
小
中
大
連續幾天,對方像是玩弄獵物的貓,只在女孩在卧室獨處時開放監控。
“還是不行。”夏磊頹然地向後一靠,那直播畫面是針孔攝像頭拍攝,角度并不固定,“他給聊天室加了最高級別的實時流媒體銷毀協議,直播視頻只能實時觀看,沒法下載。”這意味着他們無法通過後期處理去提取文件的元數據,甚至連最基本的注入追蹤鏈接都做不到,所有的技術手段在這一刻都像是重拳打在了棉花上。
“你歇會兒,我去給你倒杯水。”張毅安慰地拍了拍夏磊的肩。
“本來我想,就算分析不了文件,也可以分析畫面以外的東西!”夏磊對着張毅的背影提高了聲音,“只要有外出的實時畫面,就可以根據建築物、公交線路這類天然GPS來定位,哪兒知道,就只直播卧室內的畫面。”
“說明對方有一定的反偵察能力。”張毅遞過來一杯水,“欸,對了,既然是聯網的,你能不能黑進那個攝像頭裏去定位?”
“也不是不行。”夏磊伸手接過杯子,“但是我不敢動。這類針孔攝像頭,大多是用聯詠或者君正的公版方案。它們其實就是個挂在公網上的微型服務器,默認端口連密碼都不設,我要黑進去定位,也就幾分鐘的事。”
“那還等什麽?”張毅疑惑地問。
“風險太大。”夏磊搖了搖頭,指着屏幕上的連接數據,“這種插卡式的無線IP攝像頭,通信鏈路是非常脆弱的。如果我強行黑進去拉取它的實時流,攝像頭的連接數會從‘1’變成‘2’。萬一‘調度者’正盯着屏幕,他會立刻發現畫面卡頓,或者後臺顯示有異常連接。甚至有些廉價設備,一旦有人二次接入,那個微型LED燈會因為數據過載而突然閃爍。”
夏磊喝了口水,繼續道:“就像在雪地裏追蹤,只要我踩上去,就會留下除對方以外的另一串腳印。這種公版系統的登錄日志我沒權限遠程實時清理。一旦他發現有人在逆向追蹤,只要動動手指就能切斷所有信號,後續我們就沒辦法查了。”
“嗯,你考慮得對。”張毅恍然大悟,連連點頭,轉而突然又想到了什麽,“等會兒,你怎麽就能确定‘003’在我們這個城市?畢竟這個聊天室裏哪兒人都有。”
“我查過它接入網絡的運營商IP段。”夏磊推了下眼鏡,點開另一張複雜的基站分布圖,“這種設備必須通過附近的基站向外發信號,我找朋友查了它挂載的基站坐标。雖然不能精确到門牌號,但能鎖定它在哪片基站覆蓋範圍內。”
“還得是你們這種搞技術的。”
随即,兩人陷入長時間的沉默。張毅盯着杯子裏的水出神,眼神從焦灼逐漸變得空洞,那是他在極度思考時的狀态。
“既然視頻分析這條路被封死了,只能查別的線。”張毅放下杯子,看向夏磊,“我記得,梁傑說過,誰發的照片,誰就是操縱者。”
“所以誰發的003照片,我們可以通過‘照片的源頭’去定位那個操縱者!”夏磊的眼睛猛地亮了,拿起手機飛快地上翻聊天記錄。
“對。”張毅重重地敲了一下桌面,也把頭湊近手機。
“唉,不行。”夏磊突然放下手機,沮喪地用拳頭敲着下巴,“差點忘了,這種加密聊天室的消息不走普通協議,它是經過三層洋蔥路由轉發的。雖然能看到誰發了這張照片,但我查不到他的IP,也追不到他的真實位置。”
“那怎麽辦?”
“除非他犯低級錯誤……”夏磊頓了一下,重新拿起手機,“比如在聊天室裏發了原圖,沒抹掉EXI息。GPS坐标、拍攝時間、設備型號——這些不比IP差,能直接定位到拍照的人。”
他飛快地調出那張003照片的屬性面板。然後手指突然停住了。
“……沒了。”
張毅湊過來:“什麽沒了?”
“我這腦子,差點忘了,這是加密聊天室。”夏磊把手機扔回桌上,身體癱在椅子裏,“這種平臺在服務器端會把所有元數據剝乾淨再轉發。圖片、視頻、文件,全部‘消毒’。他們設計出來就是為了讓人追蹤不到的。”
“所以沒辦法了?”張毅不解地追問。
“常規手段沒辦法了。”夏磊閉上眼睛,“除非……比如聊天室配置錯了,或者他用的客戶端版本有問題,沒剝乾淨。但這是小概率。”
路又被堵死了。明知罪惡在發生卻無能為力的絕望,再一次籠罩了他們。
張毅緩緩踱步到窗邊,望着遠處的景色,習慣性地抽出一根煙在指尖摩挲。
從20樓望出去,正午的陽光毫無遮攔地鋪灑着。遠處,伶仃洋的海面在烈日下波光粼粼,折射出晃眼的細碎金光。近處,郁郁蔥蔥的綠化帶像是一塊塊深淺不一的翡翠,鑲嵌在灰白色的城市建築之間。樓群在強光下勾勒出清晰的輪廓,密集的窗戶反射着白光,整座城市顯得格外安靜。
“我們是不是可以從003本身查?”張毅把煙放在鼻尖聞了聞,若有所思。
“003本身?”夏磊轉過頭,眼裏寫滿了疑惑,“我沒明白你意思。我們現在連離線分析都做不了,怎麽查?”
“我的意思是……這次漫展不是去了很多人嗎?”張毅轉過身,陽光從他背後打過來,在茶幾上投下一道厚重的陰影,“在現場肯定拍了大量的照片,然後他們會發到各種社交平臺,或者他們自己二次元圈子的社區、廣場之類的地方。”
張毅把煙夾在指縫間,點了點屏幕:“003那天是洛麗塔造型,所以我們是不是只要搜‘2026海城漫展’‘洛麗塔’,保不齊就能在別人的鏡頭裏找到003。”
夏磊恍然大悟,用手掌拍了下額頭:“對啊!返圖!攝影師會發,路人也會發,只要她在別人的照片裏露過臉,我就能通過圖像聚類把她剝離出來!”
他立刻甩開鼠标,雙手在鍵盤上敲擊起來:“直接定向抓取社交平臺上帶‘海城漫展’标簽的所有公開數據。微博、小紅書、抖音、Lofter,只要帶這個标簽或者定位在會展中心附近,全部拉下來。”
“合法麽?”張毅問。
“公開數據。”夏磊頭也沒擡,“我沒有突破任何反爬措施,用的是平臺的公開接口。”
代碼在屏幕上飛速滾動。幾秒鐘後,第一批數據回來了。
不是黑底白字的日志,不是冷冰冰的數字——是照片。成千上萬張照片,像瀑布一樣從屏幕上傾瀉而下。
漫展的返圖:色彩飽和度拉到頂,閃光燈在每個人臉上砸出慘白的亮斑,假發、裙擺、道具劍在鏡頭前晃成一片模糊的光暈。夏磊的屏幕在短短幾秒內被這些畫面淹沒。
“真夠眼花缭亂了。”張毅下意識地眯了一下眼睛,“你在找什麽?”
“先找裙子。”夏磊調出一個圖像識別的腳本,“聊天室裏003那張照片是純白色洛麗塔造型,裙擺有分層荷葉邊,大面積白色。在這種花花綠綠的背景裏,白色反而最好抓。”
他在腳本裏拉了幾個參數:白色占比阈值、裙裝輪廓匹配、荷葉邊紋理識別。跟蹤目标時,人臉識別靠不住,但衣服特征往往比人臉更穩定。
腳本開始跑。屏幕上飛速刷過的照片突然被過濾了一大批,只剩下那些包含大面積淺色、有裙裝輪廓的圖片。
剩下的還是太多。
夏磊皺了下眉,又在過濾器裏加了一條:“按發布時間排序,只抓漫展當天和前後各一天的數據。”
數據量從幾萬張驟降到幾千。
“現在,找臉。”
他把聊天室裏003的幾張正面照拖進腳本,跑了一個人臉特征提取。然後讓程序在剛剛篩選出的幾千張抓取的圖片裏去匹配——不是直接識別人臉,而是先找符合“白色洛麗塔”特征的區域,再在這些區域裏掃描有沒有匹配的面部特征。
第一輪匹配跑完了。零個結果。
夏磊沒說話,調整了匹配阈值——從95%降到85%。
還是零個。
“阈值再低就沒意義了,”他自言自語,“85%以下,能把兩個人認成一個人。”
張毅站在他身後,沒出聲。
夏磊沉默了幾秒,忽然把鼠标往旁邊一推。
“得換個思路。”他說,“人臉匹配不行,特征點根本提不出來。”
“那怎麽辦?”
“不找臉了,找社交賬號。”夏磊重新調出那些原始圖片,“這種漫展返圖,發帖的人通常會@當事人。尤其是拍得好看的照片——攝影師會@Coser,朋友之間會互相@,甚至路人也會在評論裏問照片裏的Coser是誰。”
他切到另一個窗口,手指在鍵盤上敲了一串命令。
“不需要直接識別003的臉,只需要先找到那些穿着白色洛麗塔的圖片——不管是誰。然後在評論區裏找線索。”
腳本重新開始跑。這次不是匹配人臉,而是把所有包含“白色大面積+裙裝輪廓”的圖片按照發布賬號分組。然後——爬取每條帖子的評論區。
數據開始回流。
屏幕上湧出成百上千條評論:
“求擴列!”
“這個小姐姐好可愛”
“姐妹你的裙子在哪買的”
“@櫻花味草莓醬這不就是你那天穿的那條嗎”
夏磊的眼睛盯住了其中一條。
“你看這個。”他把屏幕轉向張毅。
一條評論寫着:“@MOMO這個小姐姐跟你穿的是同款诶!”
“這是攝影師發的返圖,有人在評論區裏@了另一個人——‘MOMO’。”夏磊說,“說明‘MOMO’本人也穿過這條裙子,而且她的朋友認出來了。”
夏磊點進“MOMO”的主頁。
頭像是一張自拍。女孩的臉被貼紙擋住了大半,看不清五官。他繼續往下翻。
這個賬號發的照片不多,大部分是日常——奶茶、貓咪、學校操場。但有一條,發布時間是漫展後第三天:
“漫展那天被好多人拍了,社恐人當場想鑽進地縫……但是很開心。”
配圖是一張自拍。沒有貼紙,沒有濾鏡。
夏磊把那張自拍和聊天室裏003的照片并排放在屏幕上。
同一張臉。
張毅猛地拍了下椅背:“是她!”
“是她!”夏磊把003的照片拖過去做了一次人臉比對——這次是清晰的正面照,匹配度98%。
他靠在椅背上,盯着那個綠色的對勾。
“找到了。”
“MOMO。”張毅念着這個ID。
“找到她的微博只是第一步。”夏磊已經開始翻這個賬號的關注列表和粉絲列表,“我們要找的是——她身邊有沒有一個人,在加密聊天室裏發她的照片。”
“操縱者?”
“操縱者不是憑空冒出來的。”夏磊說,“不然他為什麽選她?漫展裏那麽多人,為什麽偏偏是她?”
他把“MOMO”的粉絲列表拉下來,寫了一個腳本,開始交叉比對——誰的賬號關注了MOMO,同時也在漫展那幾天發了帶“海城漫展”标簽的照片。
這個人,可能是她的同學,可能是她的朋友,也可能只是一個默默關注她很久的人。
半夏小說,快樂很多
每日推薦
每當你翻開一本書,或是點開下一章,其實就是在給自己開一扇小窗──讓陽光、星光、遠方的風,還有那些溫柔的靈魂,悄悄溜進來陪你。