第1章
離奇的紅綠燈
一
老韓在**支隊事故科干了十九年,這輩子見過的車禍不下兩千起。追尾的、闖紅燈的、疲勞駕駛的、酒駕的,每一類都有各自的規律。但中興路和解放路交叉口這八起事故,他覺得不應該有一個規律。
因為這八起事故的事發原因沒有交集——有的是行人搶道被撞,有的是電動車闖紅燈被公交車碾壓,有的是汽車失控沖上人行道,有一起甚至是一個在路邊擦玻璃的保潔工被一輛從地下**倒出來的越野車壓碎了腳。
沒有共同點。他翻來覆去查了一個月。所有事故鑒定書上都沒有出現同一個責任方——司機不同、車輛不同、時段覆蓋了清晨到午夜、甚至天氣都沒有重疊。
時間上的重疊出現在他的視野以外——不是事故發生的時刻,而是事前三十分鐘以內。
八起事故中的所有八個人——四個死者、兩個重傷、兩個輕傷——事故前三十分鐘內,都在同一個路口東南角的好運來便利店買過東西。
買的不是同一樣東西——這不可能。有人買礦泉水,有人買面包,有人買打火機,有人只付了個充電寶的租借費。數量不同,品類不同,價格也不同。
相同的是,八個人全部刷了同一個會員**。
那個**是每天被幾百個陌生人反復刷的那種通用積分碼——店門口貼的廣告牌上寫著"會員日全場九五折,積分碼668877"這樣的大字。八起事故中的八個人都不認識對方。老韓挨個核對了手機號碼、微信名稱、***號,確認沒有通訊關聯,沒有共同好友,沒有任何可以構成利益的交叉點。
他們唯一的交集就是在死前三十分鐘內走進了同一扇門,做了同一件事——給收銀臺掃了同一個折扣積分碼。
巧合?老韓不信。
二
好運來便利店不大,二十平米出頭,標準的街角小店。老板姓姜,三十多歲,********,說話帶一點江浙口音。老韓去問了兩次。第一次姜老板很配合,把事發當天的監控拿出來給他看。畫面里那八個人進店的時間、買了什么東西、從哪個方向來、往哪個方向走,一切都很清楚。
"**同志,這有什么問題嗎?"姜老板第一次的時候問。
"沒有沒有,例行走訪。"老韓當時只是覺得不對,還沒有形成完整的懷疑。一周以后他重新查的時候,發現了那個積分碼的共同點,又來找了姜老板第二次。
這次姜老板的態度變了。
"那個積分碼我每天都換的。那張碼是9月11號的。"
八起事故中的前五起,事發日期全部是9月11號。后三起事發日期分別是9月13號、9月17號和9月21號——已經過期了。姜老板說他的會員積分碼每天換一次,有效期只限當天。這就意味著那八個人中有三個人掃了一個早就過期的碼,而收銀系統居然接受了。
老韓把收銀系統的**數據調出來看了一下。確實每一天都有一個不同編號的碼。9月11號的碼確實是那以后五個人掃的那個。9月13號那個事故受害者掃的碼——系統顯示是9月13號的碼,不是9月11號的。9月17號掃的碼也是當天的碼。9月21號掃的碼不僅當天的有效碼,還疊加了另一個更早的過期碼。
這些數據的復雜性已經接近人為干擾了。
老韓把收銀機的底層數據拿出來,找了一個在網安支隊的老戰友幫忙做逆向分析。分析的結果讓兩個人同時傻了——
這個便利店收銀機的積分碼管理系統在9月11號當天被人從外部注入了一個自動更新的代碼。具體的機制是:凡是在9月11號當天和之后的連續十二天內走過中興路和解放路交叉口的人,如果在特定時間段——事前三十分鐘——進入好運來便利店,并掃了任何一個折扣碼,掃完之后的那張小票上都會自動打印出一行額外的信息。
老韓把八個人中的三個人的小票找到了。收銀系統沒有存小票內容的完整日志,只有部分被保存的截圖。那三張小票上在折扣金額的后面,都有同一句標識——"感謝您的惠顧,您的積分已自動轉入公益基金。"
看起來很正常。但老韓把這句話里面的七個字
老韓在**支隊事故科干了十九年,這輩子見過的車禍不下兩千起。追尾的、闖紅燈的、疲勞駕駛的、酒駕的,每一類都有各自的規律。但中興路和解放路交叉口這八起事故,他覺得不應該有一個規律。
因為這八起事故的事發原因沒有交集——有的是行人搶道被撞,有的是電動車闖紅燈被公交車碾壓,有的是汽車失控沖上人行道,有一起甚至是一個在路邊擦玻璃的保潔工被一輛從地下**倒出來的越野車壓碎了腳。
沒有共同點。他翻來覆去查了一個月。所有事故鑒定書上都沒有出現同一個責任方——司機不同、車輛不同、時段覆蓋了清晨到午夜、甚至天氣都沒有重疊。
時間上的重疊出現在他的視野以外——不是事故發生的時刻,而是事前三十分鐘以內。
八起事故中的所有八個人——四個死者、兩個重傷、兩個輕傷——事故前三十分鐘內,都在同一個路口東南角的好運來便利店買過東西。
買的不是同一樣東西——這不可能。有人買礦泉水,有人買面包,有人買打火機,有人只付了個充電寶的租借費。數量不同,品類不同,價格也不同。
相同的是,八個人全部刷了同一個會員**。
那個**是每天被幾百個陌生人反復刷的那種通用積分碼——店門口貼的廣告牌上寫著"會員日全場九五折,積分碼668877"這樣的大字。八起事故中的八個人都不認識對方。老韓挨個核對了手機號碼、微信名稱、***號,確認沒有通訊關聯,沒有共同好友,沒有任何可以構成利益的交叉點。
他們唯一的交集就是在死前三十分鐘內走進了同一扇門,做了同一件事——給收銀臺掃了同一個折扣積分碼。
巧合?老韓不信。
二
好運來便利店不大,二十平米出頭,標準的街角小店。老板姓姜,三十多歲,********,說話帶一點江浙口音。老韓去問了兩次。第一次姜老板很配合,把事發當天的監控拿出來給他看。畫面里那八個人進店的時間、買了什么東西、從哪個方向來、往哪個方向走,一切都很清楚。
"**同志,這有什么問題嗎?"姜老板第一次的時候問。
"沒有沒有,例行走訪。"老韓當時只是覺得不對,還沒有形成完整的懷疑。一周以后他重新查的時候,發現了那個積分碼的共同點,又來找了姜老板第二次。
這次姜老板的態度變了。
"那個積分碼我每天都換的。那張碼是9月11號的。"
八起事故中的前五起,事發日期全部是9月11號。后三起事發日期分別是9月13號、9月17號和9月21號——已經過期了。姜老板說他的會員積分碼每天換一次,有效期只限當天。這就意味著那八個人中有三個人掃了一個早就過期的碼,而收銀系統居然接受了。
老韓把收銀系統的**數據調出來看了一下。確實每一天都有一個不同編號的碼。9月11號的碼確實是那以后五個人掃的那個。9月13號那個事故受害者掃的碼——系統顯示是9月13號的碼,不是9月11號的。9月17號掃的碼也是當天的碼。9月21號掃的碼不僅當天的有效碼,還疊加了另一個更早的過期碼。
這些數據的復雜性已經接近人為干擾了。
老韓把收銀機的底層數據拿出來,找了一個在網安支隊的老戰友幫忙做逆向分析。分析的結果讓兩個人同時傻了——
這個便利店收銀機的積分碼管理系統在9月11號當天被人從外部注入了一個自動更新的代碼。具體的機制是:凡是在9月11號當天和之后的連續十二天內走過中興路和解放路交叉口的人,如果在特定時間段——事前三十分鐘——進入好運來便利店,并掃了任何一個折扣碼,掃完之后的那張小票上都會自動打印出一行額外的信息。
老韓把八個人中的三個人的小票找到了。收銀系統沒有存小票內容的完整日志,只有部分被保存的截圖。那三張小票上在折扣金額的后面,都有同一句標識——"感謝您的惠顧,您的積分已自動轉入公益基金。"
看起來很正常。但老韓把這句話里面的七個字