夕阳从百叶窗的缝隙里切进来。
在桌面上割出几道平行的暖色光带。
林小禾坐在那台旧服务器前面。
白发被屏幕光照成银蓝色。
键盘声以稳定的频率响着。
像一段正在被编译的代码逐行写入。
陆江流靠在吧台边上。
手里那杯咖啡已经凉透了。
没喝,也没倒。
他在等。
键盘声忽然停了。
林小禾的手指悬在回车键上方。
整个人像被按了暂停键。
她盯着屏幕上那几行代码看了大概五秒。
然后转过头来。
白发随着她的动作在屏幕光里晃了一下。
像一根被风吹散的银线。
“你过来看看这个。”
陆江流走过去,站在她身后。
屏幕上是一段他看不太懂的代码。
十六进制和汇编指令混在一起。
中间夹杂着几段他勉强能认出来的注释。
林小禾用鼠标滚轮往上翻了几行。
停在一个被忽略掉的模块上。
模块的注释栏里写着“m_sync”。
旁边跟着一串参数。
“通讯模块。”
林小禾的声音比平时低了一度。
“它一直在向一个未知地址发送加密数据包。
发送频率跟你的消费频率完全同步。
你花一笔钱,它发一次数据。”
她拉出另一张图。
一条波形,横轴是时间,纵轴是数据包大小。
她把陆江流的消费记录叠加在上面。
两条曲线几乎完全重合。
每一次扫码支付、每一次下单、每一次刷卡。
都对应着一个数据包被发送出去。
陆江流看着那两条曲线,没说话。
他把手里那杯凉透的咖啡放在桌上。
杯底碰到台面发出一声短促的轻响。
“发送了多久?”
“从系统激活的第一天就开始了。”
林小禾把日志拉到最底部。
“第一笔消费——你在早餐店花的那五十块。
买十笼小笼包。
那条数据包在系统记录里的编号是0001。”
陆江流脑子里浮现出那个画面。
穿越第一天,兜里十四块六。
系统弹出“24小时内消费满5000元”的任务。
他走进早餐店拍出一张五十块。
说“十笼小笼包,五碗豆浆,剩下的钱不用找了”。
那时候他以为系统只是一个催命的账单。
现在他知道,那笔消费不止救了他的命。
还顺便给平衡会发了一条“系统已激活”的消息。
“这个通讯模块如果被关闭。”
林小禾的声音打断了他的回忆。
“系统可能也会停摆。”
“它们是同一根线。”
“你在用系统的时候,平衡会在用你。”
她把椅子转过来面对他。
白发垂下来遮住了半张脸。
“你花的每一笔钱,都在告诉他们你还活着。
系统还在工作。
每一笔消费都是一次心跳信号。”
陆江流靠在桌沿上,双手环抱。
他想起那张信纸上最后那行字。
“每当你花一笔钱,都是在为清零计划充能。”
他当时以为那是一种修辞。
现在他知道那是字面意思。
“那如果我们切断这个通讯模块呢?”
“我刚才说了,切断它,系统可能会停摆。”
林小禾的手指在键盘边缘敲了两下。
“它们不是两个独立的模块。
通讯模块嵌在系统的底层协议里。
跟败家值计算引擎用的是同一套底层函数。
强行剥离的话,系统可能会进入保护性锁死状态。”
“就像上次重新绑定那样?”
“比那个更严重。
上次是重启,这次是拆零件。”
厂房里安静了几秒。
橘猫从窗台上跳下来。
走到陆江流脚边蹲下。
仰头看着他,尾巴在地面上轻轻扫了一下。
它听不懂他们在说什么,但它知道气氛不对。
这猫在判断人情绪方面比任何能力都准。
可能是被陆江流养久了,进化出了某种特异功能。
陆江流弯腰把猫捞起来放在臂弯里。
猫翻了个身,肚皮朝天。
爪子搭在他的手肘上,呼噜声随即响起来。
那声音在安静的厂房里格外清晰。
像一段正在后台运行的心跳监测程序。
“那就换一种方式花钱。”
他说。
林小禾看着他。
“换一种方式?”
“花在你们看不到的地方。”
他把猫放回窗台上。
猫蹲下来开始洗脸。
尾巴搭在窗沿外侧。
陆江流走回白板前拿起马克笔。
在正中央写了一行新字。
“数据伪装——让平衡会看到假消费。”
林小禾已经站起来了,走到白板旁边。
她看着那行字,眉头动了一下。
“你是说——继续花钱。
但让系统发出的数据包内容是假的?”
“对。”
陆江流在“假消费”下面画了一条横线。
“系统记录的是消费金额、时间、地点、商户类型。
如果我们能在系统生成数据包之前截获它。
把真实数据替换成伪造的数据。
平衡会收到的就是一套假账。”
“截获数据包需要在系统内核层面插入一个钩子程序。”
林小禾的手指已经搭上了白板边缘。
“这个钩子程序必须跑在通讯模块之前。
拦截数据包、修改内容、再放行。
如果顺序错了,原始数据就会被直接发送出去。”
“能做到吗?”
“能,但需要算力。”
林小禾走回电脑前面坐下。
把屏幕切回到代码界面。
“数据包加密用的是平衡会自己的协议。
不是标准加密算法。
我需要实时解密、修改、再重新加密。