第25章:加速与隐患 (第2/2页)
她把文件递给王雨。
王雨接过,翻看着。合同是简单的两页纸,明确了优惠券的发布规则、结算周期和双方责任。商家的签名有些潦草,但公章盖得很清晰。五家店,三家小餐馆,两家奶茶店,都在大学城周边,客流量不错。
“很好。”王雨说,“明天继续。”
李悦点点头,没有多说什么,回到自己的座位,开始整理今天的拜访记录。她的手指在键盘上敲击,声音清脆而有节奏。
晚上十点,刘明和赵凯完成了第一个模块。
“王哥,用户注册登录模块做好了!”刘明兴奋地说,“前端页面和后端接口都联调通过了,你要不要看看?”
王雨走过去,俯身看向屏幕。一个简洁的注册页面,手机号、验证码、密码,三个输入框,一个提交按钮。他拿出自己的手机,扫描二维码,安装测试包。App打开,注册页面加载出来。他输入一个测试手机号,点击获取验证码,后台日志显示短信发送成功。他输入验证码,设置密码,点击注册。页面跳转,显示注册成功。
整个流程,不到三十秒。
“很好。”王雨说,“继续做商家端。”
两个男生受到鼓励,干劲更足了。他们泡了咖啡,继续奋战。
陈默依然坐在自己的座位上。
他没有参与任何讨论,也没有写代码。他只是盯着屏幕,偶尔动一下鼠标,打开一个文件,看几眼,又关上。他的存在,像工作室里的一个影子,安静,沉默,但无法忽视。
晚上十一点,张伟先撑不住了。
“雨哥,我明天还得去跑工商注册的事情,先撤了。”他打着哈欠说。
“好,路上小心。”
张伟走了。刘明和赵凯又坚持了一个小时,到十二点,也收拾东西准备离开。
“王哥,我们明天早上九点准时到。”赵凯说。
“好。”
两个男生走了。工作室里只剩下王雨、李悦和陈默。
李悦还在整理资料,键盘敲击的声音在寂静的夜里显得格外清晰。王雨在检查刘明和赵凯今天写的代码,一行一行地看,偶尔在文档上做标注。陈默依然坐在那里,一动不动。
凌晨一点,李悦终于关上了电脑。
她站起身,拿起外套和背包,看了一眼王雨,嘴唇动了动,似乎想说什么,但最终还是没有说出口。她拉开门,走了出去。
门关上。
工作室里只剩下王雨和陈默。
空气突然变得很安静。窗外的车流声变得遥远,霓虹灯的光在墙上缓慢移动。打印机已经冷却,不再散发热量,但空气里还残留着油墨和纸张的气味,混合着咖啡的苦涩和外卖盒饭的油腻。
王雨继续看代码。
但他的注意力无法集中。他能感觉到,陈默在看他。
不是直接的注视,而是用余光,用感觉,用一种沉默的、压抑的观察。那种观察,像针一样,刺在他的背上。
他放下鼠标,转过身。
陈默立刻移开了视线,假装在看屏幕。
王雨看着他。
陈默的侧脸在屏幕光的映照下,显得很年轻,也很脆弱。他的睫毛很长,在眼睑下投出淡淡的阴影。他的嘴唇抿得很紧,嘴角微微向下,像在承受某种痛苦。
王雨突然开口。
他的声音在寂静的夜里响起,很平静,但平静里有一种沉重的力量。
“陈默。”
陈默的身体震了一下。他没有转头,但肩膀微微绷紧。
“如果遇到难处,”王雨说,语速很慢,每个字都像石头一样砸进空气里,“说出来,我们一起扛。”
陈默的手指蜷缩起来,握成了拳头。
“有些路,”王雨继续说,眼睛盯着陈默的侧脸,“走错了,就回不了头。”
工作室里一片死寂。
窗外的霓虹灯还在闪烁,红的光,绿的光,蓝的光,交替映在陈默的脸上。他的呼吸变得急促,胸口起伏着。他的嘴唇在颤抖,张了张,似乎想说什么,但喉咙里只发出沙哑的气音。
很久之后,他终于开口。
声音很轻,很哑,像砂纸摩擦过木头。
“谢谢……雨哥。”
说完,他猛地站起身,椅子腿在地板上划出刺耳的响声。他没有看王雨,抓起椅背上的外套,几乎是逃也似的冲向门口。拉开门,冲出去,门在身后重重关上。
砰。
响声在空荡的工作室里回荡。
王雨坐在那里,一动不动。
他看着那扇还在微微颤动的门,看着门缝里透进来的楼道灯光,看着空气中漂浮的尘埃。他的心里,有什么东西,正在慢慢沉下去。
但他没有时间沉溺。
他转过身,继续工作。
凌晨三点,刘明和赵凯写的代码全部检查完毕。王雨打开后台管理端的代码仓库,开始部署测试环境。服务器是租的廉价云主机,配置不高,但跑一个简单的后台足够了。他打开终端,输入命令行,屏幕上的字符快速滚动。部署完成,他打开浏览器,输入测试地址。后台管理界面加载出来,简洁的登录框。他输入测试账号,点击登录。
页面跳转,进入商家管理列表。
空荡荡的,还没有数据。
但框架已经搭起来了。
王雨靠在椅背上,长长地吐出一口气。疲惫像潮水一样涌上来,淹没他的四肢百骸。他的眼睛很干,很涩,太阳穴在突突地跳。但他不能睡。还有事情要做。
他打开代码编辑器,开始写一个简单的数据导入脚本。要把李悦今天签的那五家商家的信息,导入到数据库里。他的手指在键盘上移动,屏幕上的代码一行一行生成。写完了,保存,运行。命令行窗口刷新,显示导入成功。
他刷新后台页面。
商家列表里,出现了五条记录。店名,地址,联系人,电话,状态“已审核”。
看着那五条记录,王雨的心里,终于有了一丝微弱的安慰。
至少,事情在向前推进。
至少,母亲的手术费,又近了一点点。
他关掉后台页面,准备关电脑。但就在鼠标移到关闭按钮的瞬间,他的动作停住了。
他的目光,落在了代码仓库的一个文件上。
那个文件,是后台管理端的一个工具类,名字叫“Utils.java”。文件不大,只有几百行代码。但王雨记得,刘明和赵凯今天没有动过这个文件。这个文件,是陈默之前写的,里面封装了一些通用的方法,比如日期格式化、字符串处理、加密解密之类的。
王雨点开了那个文件。
他的目光,一行一行地扫过代码。
大部分代码都很正常,注释清晰,逻辑简洁。但当他看到文件的最后几行时,他的瞳孔骤然收缩。
那里,有一段代码,看起来很奇怪。
那是一段大约二十行的代码,被包裹在一个看似无用的条件判断里。条件判断的表达式很复杂,涉及好几个变量的组合,但那些变量,在整个工具类里都没有被定义过。也就是说,这段代码,永远不会被执行。
但代码本身,是存在的。
王雨仔细看那段代码。
代码的功能,是每隔一段时间,就向一个外部的URL发送一个HTTP请求。请求里携带了一些数据,包括当前服务器的IP地址、系统时间、还有一段经过加密的字符串。那个URL,是一个看起来很随机的域名,由字母和数字组成,没有任何意义。
注释是乱码。
不是中文,不是英文,而是一串毫无意义的字符:`#@$%^&*()_+`
王雨的后背,瞬间冒出了一层冷汗。
他的手指停在鼠标上,一动不动。
他的大脑在飞速运转。
这段代码,是干什么的?
看起来,像是在收集服务器的信息,然后发送到某个外部地址。那个地址,是谁控制的?赵天豪?还是别的什么人?
这段代码,是什么时候写进去的?
陈默写的吗?
如果是陈默写的,他为什么要写这个?是为了监控服务器的运行状态?还是为了……别的什么?
王雨想起了前世。
前世,他曾经见过类似的代码。那是在一家创业公司,技术总监在后台系统里埋了一个后门,定期把公司的核心数据发送到竞争对手的服务器上。那个后门,也是伪装成一段永远不会执行的冗余代码,注释也是乱码。
后来,那家公司倒闭了。
技术总监消失了。
王雨盯着屏幕上的那段代码,心脏在胸腔里剧烈跳动。
他的手,有些发抖。
但他强迫自己冷静下来。
他没有立刻删除那段代码。
相反,他打开了另一个文件,开始写一段新的代码。那是一段监控代码,功能很简单:记录每一次向那个外部URL发送请求的时间、发送的数据、以及服务器的响应。他把这段监控代码,悄悄地插入到了那个工具类里,紧挨着那段可疑的代码。
然后,他保存了文件。
关掉编辑器,关掉电脑。
工作室里,陷入一片黑暗。
只有窗外的霓虹灯,还在不知疲倦地闪烁。红的光,绿的光,蓝的光,交替映在空荡荡的桌椅上,映在冰冷的电脑屏幕上,映在王雨苍白的脸上。
他坐在黑暗里,很久很久。
然后,他站起身,拿起外套,走出工作室。
铁门在身后关上,发出沉闷的响声。
楼道里很暗,声控灯依然没修。
他一步一步走下楼梯,脚步声在空荡的楼道里回响。
但他的心里,已经做出了决定。
那段代码,他不会删。
他要留着它。
他要看看,到底是谁,在背后盯着他。
他要将计就计。