最后的数据雨
最后的数据雨
雨是从凌晨三点开始的。
不是水。是光。淡蓝色的、断断续续的、像极细的光纤丝一样从夜空垂落下来的东西。它们落在城市的钢铁表面,落在玻璃幕墙光滑的倒影里,落在每一个亮着屏幕的窗台上。在那些失眠者的手机屏幕上,数据流汇成细小的溪流,沿着屏幕边缘淌下来——如果他们足够清醒,并且足够绝望,他们会在凌晨三点看到自己账户里的数字正在以肉眼可见的速度流失,像沙漏里最后一把沙。
方澜就是那些失眠者中的一个。
她住在城西的一栋老旧公寓楼里,第十一层,二十三平方米,月租六千八。房东涨了三次价,最后一次是去年的雨季。现在她的银行账户里有四万二千七百零三元,这些钱要撑过接下来的九个月——如果她不在此之前被公司辞退的话。
她是一家名为”星海科技”的小型互联网公司的数据分析师。公司做的是消费贷APP,挂在应用商店里,下载量六百多万,实际上真正在用的不到八万。用户平均借款额度八千,平均还款周期四十二天,平均逾期率百分之三十七。每一个数字,方澜都记得清清楚楚。数字不会骗人,骗人的从来都是数字背后的人。
三点四十七分,光雨下得最密的时候,她的手机震了一下。
不是推送通知。是一条转账记录。
*[富滇银行] 您的账户于 03:47:22 转出 ¥3,200.00,当前余额 ¥42,103.03。对方账户:7672(已实名认证)
三秒后,又一条。
*[富滇银行] 您的账户于 03:47:25 转出 ¥1,800.00,当前余额 ¥40,303.03。对方账户:9416(已实名认证)
方澜的手开始抖了。
她坐起来,背抵着床头那堵掉漆的墙,拇指悬在手机屏幕上方,像一只悬停在悬崖边缘的鸟。她没有去碰屏幕。她知道一旦解锁,一切就会开始——催收电话会在二十四小时内打来,通讯录里的每一个人都会知道她欠了钱,即使她根本没有借过这笔钱。而如果她去报警,警察会让她证明”不是自己转的”,这个证明的过程本身就是一场漫长的消耗战。
她最终选择关掉手机。
光雨继续下。淡蓝色的光线穿过她窗帘的缝隙,在天花板上投下细密的条纹,像某种古老的、没有人能读懂的乐谱。
第二天早上八点,方澜照常去公司。
星海科技在一栋联合办公楼的六层,占据了半个楼层。墙是灰色的,工位是开放式的,空气里永远有一股咖啡和方便面混合的气味。她的工位在角落里,靠着一扇永远关不严的窗户,窗外是一排空调外机,嗡嗡作响,像一群永不停歇的昆虫。
主管赵宁坐在最靠近电梯口的位置,四十岁出头,头发已经秃了一半,但腹肌还有六块——他每天中午在茶水间用哑铃锻炼,哑铃的哐当声和空调的嗡嗡声构成某种奇怪的和声。方澜走进公司的时候,赵宁正站在她的工位旁边,手里拿着一杯美式咖啡,脸上挂着一个标准的、用于表示”我要告诉你一个坏消息”的表情。
“小方,来一下我办公室。”
他用了“办公室”这个词。实际上那只是一个用亚克力板隔出来的三平方米空间,里面勉强塞得下一张桌子、两把椅子和一盆快要死掉的绿萝。方澜走进去的时候,闻到了一股廉价空气清新剂的味道,柠檬型的。
“坐。”他说。
方澜坐下。
“你在这个项目上做了多久了?”
“两年零四个月。”她回答。
赵宁点点头,搅动了一下杯子里的咖啡。冰块撞击杯壁的声音在狭小的空间里显得格外清晰。
“公司战略调整,”他说,每一个字都像是在朗读书本,“我们要优化人力结构。你的岗位被列入了优化范围。HR会跟你谈补偿金的事。”
方澜没有说话。她早就知道这一天会来。
星海科技的核心业务是消费贷,但监管环境在过去一年里发生了剧烈变化。数据安全法、个人信息保护法、互联网金融协会的最新指引——每一项政策出台,公司的法务部门就要连夜修改用户协议,而方澜的数据分析报告就要连夜重写,以证明公司的数据采集行为”符合最新监管要求”。这种证明越来越难,因为监管要求本身就在不断叠加,像一层又一层的保鲜膜,最终把整个业务裹得密不透风。
但这不是方澜被裁的原因。
真正的原因是:三个月前,她发现了一件不该发现的事。
那天她做例行数据分析,发现有一批借款用户的还款数据存在异常——不是逾期率异常,而是还款时间异常。这批用户总是在每天凌晨三点四十七分准时还款,还款金额精确到小数点后两位,还款账户分散在四十七个不同的银行卡里,但每一笔还款的金额分布规律完全一致,像是出自同一个算法。
她做了进一步分析。这批”用户”的总借款额是三千二百万,还款额也是三千二百万,零利息,零逾期。他们的身份证信息全是伪造的,但都通过了平台的实名认证系统——因为认证系统本身存在一个后门,允许特定的白名单用户绕过活体识别。而这批白名单用户的所有者,是赵宁的小舅子,一个在城东经营三家KTV和一个小额贷款公司的胖子。
这笔钱没有利息,没有逾期,对公司来说是一笔完美的”健康贷款”。但方澜知道,这意味着至少有三千二百万的信贷额度被虚假用户占用,真正的借款人可能因此被拒绝,或者被收取更高的利息。公司在账面上很漂亮,但漂亮的数据下面埋着的,是真实用户的血。
她没有向上级汇报。她把报告锁在了自己的电脑里,设了三重密码。
现在她被裁了。
HR给她两个选项:签字拿N+1补偿金走人,或者不签然后被以”严重违反公司制度”为由开除,没有任何补偿。
方澜在协议上签了字。N+1是六万两千块,税后五万。这笔钱够她再撑八个月。
走出公司的时候,她在电梯里遇到了赵宁。他按的是负一层,地下车库。
“电梯里遇到你真巧啊,小方。”他说,语气里有一种奇怪的热情,“以后有空一起吃饭。”
方澜没有回答。电梯从六层到负一层用了二十三秒。二十三秒里,赵宁的目光始终停留在她手里的那个纸箱上——纸箱里只有一双拖鞋、一本《统计学原理》和一盆绿萝。她把绿萝送给了他。
“谢谢啊。”他说,“你真是一个好人。”
电梯门打开。方澜抱着纸箱走进地下车库。地下车库的灯光是惨白色的,像停尸房。每一辆车都停在白线以内,整整齐齐,像一排沉默的棺材。
她回到公寓的时候,已经是下午三点。
她把纸箱放在地上,打开窗户,让外面的空气流通进来。外面的天空是灰白色的,看不见太阳,也看不见云。但她知道那些光雨还在——它们只在夜间落下,在所有人睡着之后,悄无声息地完成它们的使命。
她打开手机。六十七条未读消息。大部分是垃圾推送,但其中有一条来自一个没有存储过的号码,消息内容只有四个字:
“数据雨停了。”
方澜把手机放下。她去洗手,用凉水冲了整整一分钟,然后看着镜子里的自己。二十九岁,眼角开始有细纹了,体重比毕业时轻了四公斤,颧骨变得更突出,看起来像一个更有棱角的人,或者说更像一个更贫穷的人。
她把镜子擦干,回到客厅,打开电脑。
她打开了那份三个月前锁起来的报告。
林越是在凌晨三点二十七分发现异常的。
他是富滇银行总行的风控部门负责人,四十三岁,在这个岗位上坐了十一年。十一年里他见过无数次信用卡欺诈、贷款诈骗、洗钱、地下钱庄,但从来没有见过这种情况。
今天凌晨三点二十分,富滇银行的后台系统检测到一批异常交易。这批交易发生在三分钟内,涉及全行超过一万七千个账户,每个账户的转出金额从八百元到六千元不等,转入账户分散在四十七家不同的银行,超过一百二十个不同的支行。
但最奇怪的是:这批交易全部发生在凌晨三点二十分到三点二十三分之间,而这三分钟里,银行的核心转账系统恰好处于每日常规维护的窗口期——理论上,任何跨行转账都应该被拒绝。但这些转账全部成功了。
林越盯着屏幕。他的部门有六个人,此刻只有他一个人在值班。他拿起电话,犹豫了一下,放下了。如果他现在打电话给科技部门,科技部门会告诉他”系统正常运行,没有异常”;如果他打电话给安全部门,安全部门会告诉他”等天亮再说”;如果他打电话给行长,行长会问他”损失有多大”。每一个部门都有自己的逻辑,而每一个逻辑都指向同一个结论:不要在非工作时间报告问题。
但他的直觉告诉他,这不是普通的系统漏洞。这批交易的时间窗口太精准了——恰好在维护窗口期内,恰好跨了一百二十多个支行,恰好金额分布符合某种算法。如果这不是漏洞,那就只能是后门。有人在银行的维护窗口期里埋了一条隧道,让数据可以秘密穿过。
他开始追溯这些账户。
一万七千个转出账户,其中一万两千个是”睡眠账户”——三年以上没有任何交易活动,账户余额从零到几百元不等,平时完全无人认领。但今天凌晨,这些账户像被什么东西唤醒了,几乎同时醒来,做了一笔转账,然后重新陷入沉睡。
更准确地说:不是账户醒了。是账户里的数据被”抽走”了。
林越突然想到了一个词:数据雨。
这个词最早出现在一年前的某些技术论坛上,指的是一种理论上只存在于实验室里的数据迁移技术——通过操控分布式数据库的同步延迟,在维护窗口期内制造一个”数据真空”,让数据可以在不被记录的情况下流动。当时论坛上的人们觉得这只是一个概念,因为实现它需要同时控制数十个节点的系统时钟,并且需要精确到毫秒级的时间同步。
但如果有人实现了呢?
林越的屏幕上突然弹出一条警报:
*[紧急] 检测到新一批异常交易,涉及账户:4,732个,涉及金额:¥8,847,000.00。交易时间:03:27:41。目标账户:3829(城商联盟清算平台)
他的手指悬在键盘上方。他发现自己的手在抖。
他按下了解除警报的按钮。不是因为他想隐瞒什么,而是因为他想先搞清楚这件事的全貌。他有一种感觉:如果他现在打电话,警察会在天亮之前把这件事定性为”系统故障”,然后派一队技术员来修复漏洞,然后就没有然后了。而那些真正的问题——谁埋的这个后门,这些钱去了哪里,那些睡眠账户的数据为什么会集体苏醒——所有这些问题都会随着”系统已修复”这句话一起被埋葬。
他选择了沉默。
他关掉了警报界面,打开了一个加密的日志文件。他的部门有一个只存在于纸质文件里的传统:每一个风控人员都会保留一份自己的”影子日志”,记录那些系统日志里没有记载的东西。他从抽屉里拿出一个旧硬盘,插上电脑,开始翻阅过去一年里他私下记录的所有异常交易模式。
他看到了方澜看到过的那些模式。
凌晨三点四十七分,精准还款,金额分布一致,白名单用户,虚假认证。
但他还看到了更多。
在过去六个月里,富滇银行的睡眠账户里至少有九次类似的数据迁移活动,每次迁移的数据量从三百万到三千万不等,时间都精确地落在维护窗口期内。而这九次活动涉及的账户数量,合计超过了八万个。
八万个账户。
这意味着八万个人的数据曾经被以某种方式”唤醒”,被用来完成某种转账,然后重新沉睡。而这八万人中的绝大多数,可能永远都不会知道自己的账户曾经被使用过。
林越关掉了文件。他靠在椅背上。办公室的空调嗡嗡作响,像某种巨大生物的呼吸声。他突然意识到一件事:如果这种数据迁移技术是真实存在的,并且已经被使用了至少六个月,那么它就不是一个漏洞,而是一个系统。
一个已经被运营了六个月的系统。
这个系统需要什么?
需要银行内部人员的配合。需要技术团队的支持。需要一个足够大的”清洗”网络,把非法获取的资金洗白。而更重要的一点是:它需要一个”触发机制”——让那些沉睡的账户在特定时间集体苏醒的触发机制。
他想到了一个可能性:某些推送通知。
每一个手机用户每天都会收到几十条推送通知,其中很大一部分是营销类推送——电商打折、银行活动、社交媒体更新。这些推送在技术上都可以携带一小段代码,但这段代码的权限是受限制的,只能执行读取操作,不能执行写入操作。
但如果推送协议本身存在漏洞呢?
如果有人修改了某个主流推送服务提供商的协议层代码,让某些特定的推送可以携带”唤醒指令”,让接收到的手机在指定时间向银行服务器发送一条伪造的”查询余额”请求,而这条请求恰好会触发银行的某个接口,让该账户进入”活跃状态”,然后就可以被用于数据迁移了呢?
林越知道这个假设听起来像是科幻小说。但科幻小说的前提是”科”,而不是”幻”。这个世界上有多少不可能的技术,在它们被实现之前,都曾经看起来像是科幻小说?
他打开了另一个文件。这是一个他从来没有向任何人展示过的调查记录。
三个月前,他曾经收到过一封匿名举报邮件,邮件里只有一张截图和一句话。截图显示的是一段代码,他当时看不懂,但他把截图保存了下来。现在他重新打开那张截图,放大,仔细辨认那些字符——
他认出了其中一段。那是某个推送服务提供商的SDK里的一段标准代码,但被修改过。原始代码的作用是”获取设备基本信息”,而修改后的代码多了三行注释,这三行注释本身就是一段base64编码的字符串。
他用解码器解码了那段字符串。
解码结果是另一个URL。
他访问了那个URL。页面不存在。但域名是可访问的,而且域名的注册信息被隐藏了。
他把这个域名记录了下来。然后他做了一个决定。
他要去见一个人。
方澜在她租住的公寓里坐了三个小时。
三个小时里,她把那一份报告从头到尾看了三遍。她确认了一个事实:她手里的这份报告,就是赵宁要裁掉她的真正原因。
但这份报告里的数据还不够多。她能证明的是赵宁小舅子的虚假贷款行为,涉及金额三千二百万。但她无法证明这笔钱的流向,无法证明赵宁从中获得了多少好处,无法证明星海科技的高层是否知情。
她需要更多信息。
她想起了一个名字:林越。
这个名字出现在她报告里的一个注释里——她做数据分析的时候,发现有一批还款的银行通道是富滇银行,而富滇银行的某个风控人员曾经对这些交易打过一个问号,但后来不了了之。她当时没有在意这个名字,但此刻,她突然意识到:那个风控人员可能是唯一注意到这些异常的人。
她通过一个她已经很久没用过的职业社交账号,给林越发了一条消息:
“我知道那些凌晨三点四十七分的交易是什么。”
她没有指望他会回复。一个银行风控部门的负责人,每天会收到几十条类似的消息,大部分是垃圾广告或者是某些创业者的“合作邀请”。她只是一个失业的数据分析师,没有名片,没有头衔,没有任何可以证明自己价值的东西。
但林越回复了。
回复只有两个字:
“你是谁?”
方澜想了一分钟,然后打字:
“一个看到过数据雨的人。”
过了很久,久到她以为他已经下线了,屏幕上才出现新的字:
“今晚三点。”
凌晨三点,城市已经完全睡着了。
方澜站在她公寓的窗台前,看着窗外的夜色。没有月亮,也没有星星。天空中有一种奇怪的透明感,像一块巨大的、磨砂表面的玻璃,笼罩着整座城市。她知道那些光雨还在——它们只在有足够多的屏幕同时亮着的夜晚才会出现,而今晚,整座城市里有数百万块手机屏幕正在以某种方式接收那些看不见的推送。
林越的视频电话打进来的时候,刚好三点整。
屏幕上的林越看起来比她想象中年轻一些,但眼神里有一种疲惫感,那种在银行系统里工作了十一年的人特有的疲惫——他们见过太多钱了,太多太多的钱了,多到他们开始不相信钱。
“你说你看到过数据雨。”他说。
“数据雨是一个比喻。”方澜说,“我看到的是一种数据迁移技术。在银行的维护窗口期内,通过操控系统时钟和分布式数据库的同步机制,让数据可以在不被记录的情况下流动。”
林越沉默了几秒。
“你知道你在说什么吗?”他问。
“我知道这听起来像是科幻小说。”方澜说,“但我手里有一份报告,三个月前的,星海科技的消费贷平台上的虚假贷款记录,涉及金额三千二百万。这些虚假贷款的特点是:每一笔借款都发生在凌晨三点四十七分,每一个还款账户都不同,但还款模式完全一致,像是被同一个算法控制的。而更重要的是——这些虚假贷款的认证全都通过了平台的实名认证系统,因为那个系统有一个白名单后门。”
林越的眼睛亮了一下。那个亮光不是因为视频通话的画质问题,而是因为方澜说出了一个他花了三个月才确认的事实。
“你怎么知道白名单的事?”他问。
“因为我是做数据分析的。”方澜说,“我做的是消费贷平台的数据分析,我每天的工作就是看数据。我看到那些虚假贷款的时候,觉得奇怪,就深入查了一下,查到了白名单的存在。我没有向上面汇报,因为我知道如果汇报了,这份报告会在二十四小时内消失。”
“你为什么告诉我?”
方澜沉默了一会儿。
“因为你打过那个问号。”她说,“我查报告的时候,看到了你三个月前对那批交易的问号记录。你是唯一一个打出问号的人。”
林越的表情变了。
他意识到方澜不是普通的数据分析师。她不仅看到了那些异常交易,还追溯了每一个异常交易的调查记录,包括那些最终被标记为”无需处理”的记录。这种追溯能力不是普通员工能拥有的——它需要访问银行内部系统的权限,或者至少需要某种能穿透防火墙的数据获取渠道。
他没有问她是怎么拿到那些记录的。有些问题,不问比问更安全。
“三千二百万只是冰山一角。”他说,“过去六个月里,富滇银行的睡眠账户里至少发生过九次类似的数据迁移活动,涉及账户数量超过八万个,涉及金额——”
他停顿了一下,像是在做最后的确认。
“三亿七千万。”
方澜没有说话。
这个数字太大了。大到它已经不再是”挪用”或者”诈骗”,而是”系统性金融犯罪”。如果这笔钱真的是通过某种后门程序转移的,那么它涉及的人员不会只是赵宁和他的小舅子,而是一个完整的产业链——银行内部的技术人员,推送服务提供商,网络安全公司,以及某些更高层的力量。
“你有证据吗?”方澜问。
“我有八万个账户的数据。”林越说,“但这些数据只能证明有数据流动,不能证明是谁在操控这些流动。”
方澜想了一下。
“推送协议。”她说,“如果这些账户是在特定时间被唤醒的,那么它们一定接收过某种触发指令。而触发指令最可能的载体,就是推送通知。”
林越点头。
他打开了另一个文件。
“我三个月前收到过一封匿名举报邮件,里面有一张截图,是某个推送服务提供商的SDK代码,被人修改过。我当时看不懂,但我把截图保存了下来。”他说,“昨天晚上我解码了那段代码里的一段注释,得到一个URL。”
他把屏幕共享给方澜。
方澜看到了那个URL。
她认出了那个域名。不是陌生的——那是一个她曾经在星海科技的技术文档里见过的域名,是公司使用的一个第三方推送服务的提供商。
她的心跳加速了。
“我知道这家公司。”她说,“星海科技用的是他们的推送服务。”
林越看着她。
“你是说——”
“星海科技可能不只是受害者。”方澜说,“它可能从一开始就是共犯。”
接下来的三天,他们通过加密通讯保持联系。
方澜用了她所有剩余的技能和资源。她通过星海科技的一个前同事——一个已经离职去留学的年轻人——拿到了一份旧版本的技术文档,那份文档里记录了推送服务的接入规范。她在文档里发现了一个她之前没有注意到的细节:推送服务不仅可以发送文本和链接,还可以发送“自定义参数”,这些参数会被客户端的SDK解析并执行。
也就是说,推送通知可以携带可执行代码。
这不是漏洞。这是推送服务的设计功能。
但这个功能后来被关闭了——至少官方文档里是这么写的。
方澜深入挖掘了旧版本的SDK。她找到了那段被她怀疑的代码:一个名为executeCustomAction的函数,它接受一个JSON格式的参数,然后在后台执行相应的操作。这个函数在文档里被标记为“已废弃”,但代码本身并没有被删除。
没有删除的原因是:如果删除了,某些“legacy业务”就无法运行。
什么样的legacy业务需要保留一个废弃的推送执行功能?
方澜想到了一个可能性:那些凌晨的虚假贷款。
如果推送通知可以用来唤醒睡眠账户,那么那些虚假贷款的“借款人”在注册时接收的第一条推送,可能就是一条“初始化指令”,让他们的手机在特定时间自动向银行发送查询请求。这条请求本身不会转账,但它会让账户从“睡眠状态”切换到“活跃状态”,然后就可以被用于后续的数据迁移操作。
这是一个完美的设计。
它看起来像是一条普通的推送通知,用户根本不会注意到。而银行的后台系统会把这些请求识别为“正常的活跃度检测”,不会触发任何警报。
方澜把这些发现整理成了一份新的报告。这份报告比三个月前的那份更详细,也更危险——因为它不仅指控了星海科技的内部人员,还指向了一个完整的产业链:推送服务提供商负责提供后门,银行内部的技术人员负责提供渠道,某些“白手套”公司负责注册虚假账户,而真正的操盘者坐在某个看不见的地方,指挥这一切。
但她没有把这份报告发给任何人。
因为她知道这份报告一旦发出去,它的命运会和三个月前的那份一样——消失,沉入数据的海洋里,再也无人问津。
她需要另一种方式。
第四天晚上,方澜站在她公寓的窗台前,看着窗外的夜空。
今天是阴历十五,按照老一辈的说法,月亮应该很圆。但天空中没有月亮,只有一层均匀的、银灰色的光晕,像是一块巨大的磨砂玻璃。她知道那不是云,也不是雾。那是数据雨的前兆——当空气中悬浮的数据微粒达到一定浓度时,它们会在夜空中形成一种可见的光学现象,这种现象只有在光污染足够严重的城市里才会出现。
她打开手机,看了一眼时间。
十点五十三分。
还有一个小时二十分钟。
她拿起手机,打开了一个她很久没有使用过的社交媒体账号。这个账号的粉丝数量是零,之前只发布过两条内容,都是转发的猫猫图片。但今天她要发布第三条内容。
她写了一个标题:
《数据雨:我们时代的系统性金融犯罪》
然后她开始写正文。
她没有写那些技术术语,也没有写那些冰冷的数据。她写的是一个故事——一个失眠的数据分析师,一个凌晨三点四十七分的神秘交易,一个在银行后台潜伏了六个月的系统,一个被数百万手机屏幕同时推送的唤醒指令,一个总金额超过三亿七千万的资金流向,一个由推送服务商、银行内部人员和“白手套”公司组成的完整产业链。
她写的是真相。
但更重要的是,她写的是一个隐喻。
她把数据雨写成了一场真正的雨——不是数字的雨,而是情感的雨,欲望的雨,每一个普通人在深夜里独自面对屏幕时的焦虑、恐惧、绝望的雨。那些被唤醒的睡眠账户就像是那些在深夜里被噩梦惊醒的人,他们不知道自己为什么醒来,不知道是什么把他们在睡梦中拖起来,他们只知道自己的身体已经开始行动了,而他们的意志还停留在梦的深处。
十一点四十五分,她点击了发布。
然后她打开了直播平台。
她选择了语音直播,不需要露脸,只需要声音。她给自己取了一个ID:招魂者。
十一点五十八分,她的直播间里有三十七个人。
十一点五十九分,人数涨到了四百二十一人。
方澜开始说话。
凌晨零点整,数据雨如约而至。
淡蓝色的光线从夜空垂落,穿过城市密集的钢筋水泥结构,落在每一块亮着的屏幕上。这一次的光雨比之前任何一次都要浓密,因为方澜的直播被分享了超过两万次,两万次分享意味着至少十万块屏幕在同一时间亮着,而每一块屏幕都在向空气中释放微量的数据尘埃。
在富滇银行的总行大楼里,林越站在风控部门的监控室里,看着屏幕上不断跳动的数字。
凌晨零点零三分,后台系统检测到第一批异常交易。
凌晨零点零五分,第二批。
凌晨零点零八分,第三批。
凌晨零点十二分,警报全面触发。
但这一次,林越没有按下解除按钮。
他拿起电话,拨了三个号码。第一个是科技部门,第二个是安全部门,第三个是行长。
“我们在被攻击。”他说,“不是来自外部的攻击,而是来自内部的。有人在我们的维护窗口期里埋了一条隧道,让数据可以在不被记录的情况下流动。我有八万个账户的异常活动记录,有推送服务提供商的被篡改的代码,有一份完整的资金流向分析——”
他的声音在发抖。不是因为恐惧,而是因为愤怒。
十一年了。十一年里他在这个岗位上见过太多钱了,太多太多的钱了。但他从来没有见过这种把钱当作数据、当作雨、当作可以悄无声息地从一个人流向另一个人的东西的做法。它太精密了,太隐蔽了,太系统性了,以至于它看起来根本不像犯罪,而像是某种自然现象——就像数据雨一样,你可以说它是气候异常,但你无法说它是灾难。
“你能确定这不是系统故障?”行长的声音从电话那头传来。
林越看着屏幕。零点十五分,第四批异常交易已经被系统自动拦截了,因为他在零点十分的时候远程修改了拦截规则,把维护窗口期内的所有跨行转账都设为了高风险交易。
“我能确定这不是系统故障。”他说,“我能确定这是有人在利用系统故障。”
他停顿了一下。
“而且我能确定,我们之前收到过警告。”
他挂掉了电话。
凌晨一点十四分,数据雨停了。
淡蓝色的光线在天空中逐渐消散,像是一曲终了的乐谱最后几个音符,缓缓沉入寂静。但在它们消失之前,方澜看到了一件奇怪的事:
那些光线并没有完全消失。它们在天空中凝结成了一团淡蓝色的云,在城市的上空缓慢移动,像一只巨大的、沉默的眼睛。方澜盯着那团云看了很久,她突然意识到那团云的形状——它像一张地图,精确地标注着这座城市里每一个数据节点的分布,每一个账户的位置,每一条资金流向的轨迹。
那是一张数据雨留下的地图。
方澜拿出手机,拍了一张照片。
照片里,那团云正在城市的上空缓缓消散,但它的轮廓依然清晰可辨——像是一张被遗忘的藏宝图,在夜色褪去之前最后一次展示它的秘密。
天亮了。
方澜的手机里有三千多条未读消息。大部分是陌生人发来的,有的是询问直播里提到的一些技术细节,有的是表达支持和感谢,有的是提供额外的线索——某些人声称自己也曾经在类似的系统里工作过,某些人声称自己就是那些“睡眠账户”的受害者,他们从来没有借过款,但他们的信用评分莫名其妙地被影响了。
还有一条消息来自一个没有存储过的号码。
消息内容是:
“你的直播我们都看了。做得好。”
没有署名。但方澜知道是谁发的。
她靠在窗台上,看着窗外的城市慢慢醒来。街道上开始有行人了,早餐摊子开始冒烟了,公交车开始运行了。一切都和昨天一样,一切都和过去的无数个早晨一样。但有些东西已经不一样了。
她知道这件事不会在今天结束。她知道那些人不会放过她。她知道接下来的日子里,她可能会接到更多的陌生电话,遇到更多的“系统故障”,在更多的凌晨三点看到那些淡蓝色的光线从夜空垂落。
但她也知道一件事:
那些光雨终有一天会停下来。不是因为它们自己停下来,而是因为有人愿意站在它们下面,让所有人看到它们。
她转身走向厨房,给自己煮了一杯咖啡。
咖啡很苦。她加了两块糖。
尾声
三个月后,方澜在一份非正式的记录里看到了关于那场数据雨的描述:
“2026年4月的某个夜晚,城市上空出现了持续三小时的数据异常现象。该现象表现为大量跨行转账在银行常规维护窗口期内完成,涉及账户超过八万个,涉案金额初步估算为三亿七千万元。该现象在发生后被部分媒体以’系统故障’为由报道,但后续调查显示,该现象系由人为因素导致,涉及人员包括银行内部技术人员、第三方推送服务提供商及多个关联公司。目前,相关调查仍在进行中。”
方澜看完这段文字的时候,喝了一口已经凉掉的咖啡。
她没有在这份记录里看到自己的名字。但她知道,有些事情不需要名字。有些事情只需要一个声音,一个在凌晨的直播间里响起来的声音,就足以让那些沉睡的数据知道:
它们不是被遗忘的。
它们只是还没有被叫醒。
而招魂者的使命,就是把它们叫醒。
——全篇完——