方磊皱了一下眉头,“就是那个2000年电脑集体发疯的事?”
“对,”程峰从口袋里掏出一张皱巴巴的传真纸,摊在桌上,“信息产业部刚发的内部通报。说全国有多少台老式计算机和嵌入式系统只用了两位数年,到了2000年1月1日零点,年份从99变成00,机器会以为回到了1900年,所有跟日期有关的计算,银行利息、电力调度、通信计费、航班排期全可能出错。”
方磊把传真纸拿起来从头到尾看了一遍,眉头越皱越深。
“咱们实验室用的长城0520是哪一年的?”
“八几年的,肯定是两位数年。”
“那我们的仿真数据呢?电磁弹射器的放电记录、着舰引导算法的测试日志,全部带日期戳,如果日期乱了呢?”
何巍放下粉笔走过来,脸色发白,“我带的那几个研究生,他们的毕业论文数据全在软盘里,文件名也是按日期排的!”
“陆教授,您一定有办法,”副行长继续道:“2000年1月1日零点,如果核心系统还没修完,全国三分之二的储蓄业务可能停摆,老百姓存的钱取不出来,取的账对不上,这不是技术事故,这是会出大事的。”
陆沉平静地端起茶杯,吹了吹漂浮的茶叶。
“刘行长,”陆沉放下茶杯,“您对一下时间,这个漏洞是不是主要分布在三个区域?第一个是利息计算模块的跨年滚息逻辑,第二个是跨行清算的时间戳校验,第三个是定期存款到期日的年份判读。”
刘济舟愣住了。
他身后那位技术处长猛地翻开文件,手指在模块清单上快速划过,下一秒,他抬起头,脸上全是不可思议。
“全中,你怎么知道?”
“还有一个底层漏洞,”陆沉不紧不慢地翻开自己的笔记本,翻到一页,“正常触发概率极低,但是如果恶意构造跨行大额结算的触发序列,理论上可以凭空造出几个亿的账面资金。”
“这个漏洞不在你们147个模块清单里,因为它不是千年虫问题本身,它是千年虫修复过程中可能被意外激活的连锁漏洞。”
技术处长的文件从手里滑了下去。
纸张散了一地。
陆沉说的这个漏洞,他们全行一百多号技术骨干在大半年里没有一个人发现。
因为要找到这个漏洞,必须把整套代码从头到尾反复检查!连注释里的德语缩写和拼音简写都不放过!
这不是百人千人的工作量,这是几万个人的工作量!而陆沉说这些话的时候,语气就像在说今天食堂早饭有豆浆油条!
“陆工,”刘济舟的声音有点发颤,“您之前研究过我们的系统?”
“研究过。”
陆沉端起茶杯又喝了一口,神情平淡。
“98年年底,我手头电磁弹射项目告一段落,有几天空档,正好读到一篇内部报告,提到国内金融系统面临千年虫威胁,我想着反正闲着也是闲着,就托科工委那边调了一份你们系统的技术文档过来看看。”
他顿了顿。
“后来看着看着就觉得,你们这个系统的底层架构挺有意思的,像在苏联的底盘上装美国发动机又配了中国的变速箱。”
“拆起来费劲,但拆通了就豁然开朗,顺便就做了点功课。”
“顺便……?”
技术处长重复了这两个字,声音像被人踩住了脖子。
“差不多花了两个星期的业余时间,”陆沉在笔记本上翻了翻,“逆向工程的基本框架已经搭好了,剩下的就是激活……”
他抬头看向刘副行长,笑了一下。
“今天你们来了,正好激活。”
会议室里的安静持续了整整五秒。
刘济舟霍地站起来,动作太快把椅子都带倒了。
他顾不上去扶,双手撑着桌面,老花镜滑到鼻尖上也没推。
“您是说……您已经做完了?”
“逆向分析部分做完了,修复方案的框架也搭好了。”
陆沉从笔记本里抽出几张夹在一起的纸,平平整整地放在桌上推过去。
“这是147个模块的逆向分析报告、数据流图、修改方案和验证用例,那个底层利率漏洞的修复方案附在最后。”
“本来打算下个月走完内部审核就给你们送过去的,既然你们今天来了,正好当面交接。”
他顿了顿,补了一句。
“哦对了,验证用例我已经在仿真环境里全部跑通了,零报错,你们拿回去直接上测试环境跑一遍就能用。”
刘济舟接过那几张纸,手抖得厉害。
他翻到第一页。
不是目录,不是概述。
是一行手写的备注:
“注:第73号模块(利率计算)的代码注释中,德语Jahreszins被当年程序员误写为Jahreszine。
建议在修复方案中统一替换为中文,并在国产化版本的变量命名规范中禁止使用外国缩写。”
刘济舟读完这条备注,抬头看了陆沉一眼。
这个二十岁的年轻人,在“顺便做点功课”的时候,把147个模块的德语注释、拼音缩写、错误拼写,一个一个翻了出来。
不是天才。
是变态!
超级大变态!
他想不出别的词。
消息传回银行系统的时候,最初没人敢信。
“两周?98年年底?他在做电磁弹射项目的同时顺便就把我们的系统逆向完了?”
“吹的吧!那可是IBM主机!我们一百多人干了八个月……”
总行科技司的老司长把陆沉交过来的验证用例往桌上一拍。
啪的一声,所有人都安静了。