凌晨两点,我在白板上写了个“15”。
笔尖顿了顿,往下拉了十二道短横,挨着写厂名。徐卫东那行排最上头,已经划了一道杠。
我把笔扔进笔槽,退后两步。这个数不用算,它自己会说话——十五号零点,主契钥换新,换完之后所有分契重新授权。断掉的链子不会接回去,这一点周伯已经拿徐卫东验过了。没断掉的那几家,全部重新锁死,比现在锁得还死。
音箱里滋啦一声,程则的声音钻出来:“常规走法,你来不及。”
“知道。”我拉开椅子坐下,“一家两天,沟通、取证、断契,路上还得搭人情。十一家,二十二天。剩六天。”
“断两家。”
“断两家不够。”我指着白板,“剩下九家照样被锁。我拆不完,就等于一家没拆。”
音箱那头静了几秒。
“那就别逐家来。”程则的语速慢下来,“借方远的权限,趁旧钥还在位上,对主契做一次并行读取。十二份分契的解除条件,一次性复制出来。”
“并行读取。”
“一次读掉所有子节点。拿到解除条件,你就把十二份交给周伯,让他一个晚上念完。不用一家一家跑。”
我盯着白板上那排厂名看了一会儿。这思路的道理通。但程则每回给方案,真正的坑都埋在细节里。
“步骤,说细点。”
“拿本子。”
我翻开抽屉里的记录本,翻到新的一页。
程则一条一条报。从方远的账号怎么进后台、从哪个接口绕开浏览器直连、选中主契节点要点右键下拉第三项,到导出窗口里哪个高级选项必须勾、哪块进度条走完才能点确认。细到按键,细到窗口停留几秒,细到哪句提示出来时不能动鼠标。
我一条一条往下记。记到第十一条,他停了一拍。
就一拍。比前面所有停顿都短。
“读取跑完之后,把导出文件发我一份。”他说,“青池的隐藏字段编码方式跟外面不一样,你们自己看容易漏。”
“多大?”
“十二份分契的完整字段。压缩包两百兆上下。”
“两百兆。”我重复了一遍。
“数据量不小,对我是好东西。”程则说得不躲不闪,“我不瞒你。这份数据我要吃一口,但你拿到解除条件就能动手,两清。”
我没接话,把那一条圈起来。
“还有没有?”
“没了。注意时点——子时过后青池后台的审计日志滚动覆盖,前一天的两点清空。你们两点到三点之间动手,第二天早上翻不到痕。”
“留个问题我自己想。”
音箱没再响。
我拿起手机给赵恒发消息。凌晨两点十几分,他居然没睡,五分钟后推门进来,拖鞋,头发翘着一边。
“出事了?”
“没有。有个方案,你帮我看一遍。”
我把本子摊到他面前。赵恒弯腰,一行一行往下扫。看到第三行,眉皱起来,看到第七行,他的手已经摸到裤兜里摸烟了。
“谁给的?”
“程则。”
“他跳了一步。”
“说清楚。”
赵恒没答话。他拉开我身后的铁皮柜,翻了两下,抽出青池去年发给供应商的那份《门户操作规范》,厚得像一块砖。翻到附录的告警规则表,手指顺着表格往下走,停在第三行。
“并行读取。”他念出声,“触发跨节点批量读取告警。系统自动生成复核工单,同步推送契务监控台。”
他把纸转过来,冲我。
“他跳了这一条。”
我凑过去看。表格印得密,但那一行清清楚楚——触发条件、告警级别、推送对象,一样不缺。
“程则。”赵恒直起身,声音往音箱那边抬,“你出来看看,这条你怎么没提?”
音箱安静了两秒。程则的声音出来,调子没变:“提了你也得做。”
“少绕。你到底是没说,还是不知道?”
“知道。”
赵恒把手里的本子往桌上摔了一下:“知道你还跳过?”
“告警不致命。”程则说,“顶多被看见。”
“被看见还不致命?”赵恒声音一下高了,“契务监控台是沈岚的人在看。告警一推过去,她当天就能定位到方远的账号——”
“定位到账号,定位不到人。”程则打断他,“方远的账号挂在供应商名录里,后台看就是一个合作方在做数据备份。等他们核实到周记,你们早断完了。”
“你这是赌。”
“你们六天之内拆十二家,本来就是赌。”程则的语气平平的,没起伏,“不赌,一家都拆不了。”
“赌可以。”赵恒往前一步,手指头点在桌面上,一下一下的,“你提前把这条告警摊在桌上,我们一块儿赌。你把它藏起来让我们照跑,这叫赌?”
“我没藏。你问的是步骤有没有遗漏,步骤没遗漏。告警是风险,风险我认。”
“你——”
“赵恒。”我开口。
“你别拦我。”他转头看过来,眼睛都红了,“他把最要命的一条压在舌头底下,等我们跑完了才从别处知道——这叫什么?这叫设计。”
音箱里没有声音。
我看着赵恒,又看了一眼音箱,脑子里飞快地算。这条告警推过去,青池后台会不会顺藤摸到方远账号的物理位置,要看他们多快翻到工单、多快查授权树。要堵这个口子,只有一个办法。
“吵完了?”我问。
两个人都不出声。
“流程照走。”我说,“但加一道保险。方远那边提前把权限切断,做假离线。”
赵恒愣了一下:“假离线?”
“读取一完,方远立刻登出账号,把状态切成用户主动离线。后台同时收到一条告警和一条离线信号,第一反应是网络中断,不是入侵。多拖他们几个钟头。”
“几个钟头够干什么?”赵恒问。
“够周伯念完。”
赵恒盯了我一会儿,最后把本子捡起来,翻到他那页,开始重新写。
“方远呢?”我问。
“我去叫。”他往外走,走到门口停住,“周砚,我把话放这儿。这次是他藏了一条,下次呢?”
门带上之前,他又补了一句:“你记着他每一次给东西的时辰没有?”
我没应声。赵恒推门走了。
三点出头,方远来了。
人还没进门我就能闻到烟味。他嘴里叼着根没点的烟,头发压得乱七八糟,T恤外面套了件工作服,扣子系错了一颗。
“大半夜的,最好是真有事。”
我把白板上的方案跟他讲了一遍。方远听完,把嘴里的烟拿下来,在桌沿上磕了两下。
“并行读取。”他嚼着这个词,“我拿那个账号做过单节点拉取,没试过全树。”
“能做吗?”
“能做。”他把烟塞回嘴里,“但得改脚本。现有的走法是一次拉一个子节点,后台有超时限制,十二个挨着拉,慢一点就会被掐断。”
“差多少?”
“一次拉一个,十二个拉完得七分钟。中间被掐一次就前功尽弃。”他走到自己工位,一屁股坐下,掀开笔记本,“我改成并发,三秒之内把十二个节点的请求全发出去,让它们在后台同时跑。后台看着就是一次批量导出。”
“改多久?”
“二十分钟。”方远把烟点上了,叼着,两只手已经落在键盘上,“你们别催。”
“方远。”我说,“读取一完成,你立刻把权限切断,做假离线。”
他的手指在键盘上停了。
“假离线?”他回头看我,“后台会记一条用户主动断线。他们复核的时候——”
“知道。多拖几个钟头就行。”
方远看了我两秒,把烟从嘴里拿下来,往烟灰缸里一磕:“二十四小时。”
“什么?”
“假离线只有二十四个小时的窗。过了后台会标成异常久未上线,反而更扎眼。”他转回去,开始敲,“二十四小时之内,你们必须把事办完。多一秒都不行。”
“够。”
“那就成。”方远吐出一口烟。
凌晨三点五十分,赵恒把打印好的时间表夹进白板边上。方远还在改脚本,键盘敲得噼里啪啦。我坐在角落,把程则刚才报的第十一条又从头看了一遍。
他停的那一拍,卡在要数据的地方。
我把本子翻回前一页。上一回跟青池打交道,他报步骤,也是停了一拍。那一回我没多想。这一回我多看了两眼。
晚上十一点,方远把脚本跑了一遍回放。
“过了。”他说,“并发十二节点,三秒。后台那边我拿测试账号模拟过,不会立刻断。”
“真账号呢?”
“真账号上跑就是真读取。跑之前会推一条告警,跑完之后我再切权限。”他看着我,“你说的啊,切。”
“切。”
“出事了别找我。”
“出事了我找你也没用。”
方远笑了一声,把烟按灭,开始做最后的检查。赵恒搬了把椅子坐到他旁边,翻开告警规则表,一样一样核对时点。
“程则说的是两点到三点。”赵恒拿笔尖在纸上点了点,“可十五号零点换钥,旧钥一过零点就不在位上了——等不到两点。”
“那就提前,赶在换钥之前。”
赵恒没再说什么,在纸上把时点划掉,重写了一行。
二十三点四十一分。
方远敲下最后一下回车。
屏幕上是一棵树。主契节点在最上面,下面挂着十二个子节点。进度条从左往右走。第一个节点亮成绿色,接着第二个、第三个,一串绿下去,速度比我想的还快。
“全齐。”方远说。
十二份分契的解除条件,齐刷刷刷在屏幕上,一份一份往下排,每一份后面一长串条件项。
“切了。”方远说完就动手,两下把账号登出,状态切成离线。屏幕上弹出一行小字:当前用户已主动登出。
赵恒盯着屏幕右上角那格告警栏。
红的。二十三点四十一分,一条记录。
“推过去了。”他说。
“切完了。”方远把手从键盘上抬起来,“接下来看运气。”
赵恒没说话,合上本子,起身回了自己工位。
天亮的时候电话打进来。
我趴在桌上睡了一会儿,手机在桌面上震,震到我抓起来看。是老魏他儿子的号码。
“周砚哥,我爸昨晚……”那头声音发飘,“脑溢血,半夜送医院了,现在人还在重症室,医生说出血量不小——”
我握着手机站起来。
“几点的事?”
“我妈说签完字他就说头疼,后半夜吐了,叫的急救。今天早上医生让签字,我才看到手机上有你号码。”
“签什么字?”
“昨天傍晚青池那边送来一份续约意向,让我爸补签个名,说走流程。我妈说签完字他就说头疼。”
“几点签的?”
“我妈说合同上有落款时间——十一点四十四。”
我手指夹着手机,在原地站了好几秒。老魏昨天傍晚送来的续约意向,用的是同一张被标记的模板。他落笔的时候,我们这边刚读完主契。青池的自动反噬顺着模板回灌,灌到他身上去了。
“哥你还在听吗?”
“在。”我说,“医院哪家,我马上过去。”
赵恒不知道什么时候站在门口,手里端着一杯水,没喝。
“老魏?”
“脑溢血。昨晚十一点四十四分签的续约意向。”
赵恒把水杯放下,转身回了茶桌。等我打完电话出来,桌上已经铺开了东西——他自己打印的日志页、白板上的时间抄本,还有一张纸,是他刚才手写的。
“读取二十三时四十一分。”他用笔尖点着纸面,“告警二十三时四十一分。”笔尖往右一块挪,点在另一行上,“老魏签字,二十三时四十四分。”
三行字,排成一条斜线。
他把笔放下来,抬头看我。
“程则是不知道,还是不说?”
我站在桌边,看着那条斜线。三分钟。我们这边读主契,他那边落笔,中间隔三分钟。
“他报步骤的时候,停了一拍。”我说。
“哪一拍?”
“要数据那一拍。”
赵恒没接话,只是拿起笔来,在纸上“告警”那两个字底下划了一道双线。
我回屋翻出支取记录本,翻到新的一页。日期写下,程则这次索要的数据条目逐项抄上去——十二份分契的完整字段,两百兆上下,含隐藏字段编码。抄完之后,我在页边空出来的地方写了两个字。
漏报。
标点都没加。
音箱一直没响。
赵恒在外面说了句什么,我没听清。方远在工位上打了个哈欠,键盘响了两下,又停了。
我合上本子的时候,音箱里忽然出了声,电流先动了一下,然后程则的声音跟出来。
很轻。
“他没死。”
我停在原地。
“你说什么?”
“老魏。他没死。”程则的声音比平时低了一截,“反噬顺着模板回灌,只灌了七成。他命硬,留住了。”
我回头看赵恒,赵恒已经走到门口了,脸上没什么表情。
“七成。”我重复了一遍,“剩下三成呢?”
“还在他签的那份意向书里。”程则说。
我握着支取记录本,指头压着“漏报”那两个字。
“你把话说完。”
“他签的意向书还在生效。签的是下一期的续约模板,青池那边认纸不认人。”程则停了一拍,这回不是要数据,“纸没消,契就还在。他醒了以后,还得再签一回。”
赵恒在门口骂了一句什么,我没听清。
我把本子翻开,在那两个字底下,又添了一行:意向书仍在生效。
刚写完,方远从工位上“啧”了一声。
“怎么了?”
“后台。”方远把屏幕转过来,“告警栏里多了一条。”
我走过去看。青池的告警栏本来只有一条红记录,现在底下多了一条编号。编号后面跟着一行字,很小,但看得清——
“关联主体:周记工作室。”
赵恒凑过来看了一眼,端起桌上那杯凉了的水,看着我说:“他们看见我们了。”