顾远瞻的钱到账之后,林振邦干的第一件事是买了张高铁票去长三角。
“我去趟无锡。”他把旅行袋往肩上一甩,“那边有家芯片代工厂叫华芯微电子,以前跟千峰合作过传感器芯片的流片。厂长姓吴,跟我熟。我去探探口风,看他们接不接脑电信号处理芯片的单子。”
“你一个人去?”周芸堵在门口。
“沈逸跟我一块。技术参数得他来讲,我光会画图纸不会算良率。”
周芸看了他两秒:“我也去。你俩凑一块儿没人管着,指不定又搞出什么幺蛾子。”
于是三个人第二天一早就上了高铁。林悦留在店里看家,赵敏负责盯着开源项目的测试进度。临走之前林振邦把完整版模板的存放位置告诉了林悦——东西在他东莞跑路时租的一个银行保险柜里,租期还有八个月,钥匙藏在林家铺子收银台底下第三块地砖下面。
“你没事别去动它。”林振邦上高铁之前又叮嘱了一遍,“等我从无锡回来咱们一块儿去取。”
林悦答应了。
结果当天下午就出了状况。
赵敏在实验室里跑回归测试的时候发现一个异常:开源协议仓库里有个外部贡献者提交的代码合并请求,表面上是修一个通讯协议的bug,但赵敏把改动的代码逐行审了一遍,发现其中三行注释里藏了段经过混淆的脚本。脚本的功能是偷偷在编译时向固件里注入一个第三方密钥——这个密钥能绕过协议里的追踪模块,让使用该固件的设备免于社区合规审查。
“有人想往咱们的代码里掺沙子。”赵敏把审出来的脚本截图发给林悦,“合并请求的提交人ID是新注册的,注册时间三天前,IP地址挂了代理,追不到真实位置。但提交的代码风格跟孙德利案子里周斌写的逆向工具代码有高度相似性——变量命名习惯、缩进方式、甚至注释里爱用分号的毛病都一样。”
林悦把截图转给沈逸。沈逸在高铁上回了消息:“这个注入手法很专业。不是周斌那种半吊子水平。背后肯定有懂行的人指点。先别合并,把提交记录和代码差异备份,等我回去做溯源分析。”
“你怀疑孙德利还有同伙在外面?”
“孙德利进去了,但他联系的境外买家还没露面。这批人可能换了个打法——偷模板偷不到,就往开源代码里掺后门。等咱们把代码合并进去,他们就能通过后门批量控制认证厂商的设备。”
林悦把这条消息转发给郑维和顾远瞻。顾远瞻十分钟后打来电话:“我刚让法务查了那个提交人ID关联的邮箱——注册信息是假的,但邮箱后缀域名是上个月刚注册的,注册人叫‘德利科技咨询(新加坡)私人有限公司’。跟孙德利国内那家公司名字就差个‘新加坡’。”
“孙德利在新加坡也注册了公司?”
“大概率是同一个团伙。孙德利负责国内落网,新加坡那边接着干。你让赵敏把审出来的代码差异整理成报告,我这边让法务走跨境维权的程序。另外你跟沈逸说一声——这个注入脚本的样本留一份给我,我找人做技术分析。”
林悦把消息转给沈逸。沈逸回得很快:“让赵敏把样本哈希值发我。我远程连服务器把提交记录锁了,这个合并请求先挂着别处理。等我从无锡回来做深度溯源。”
赵敏那边手脚麻利,半小时就把代码差异报告、提交记录截图、样本哈希值全打包发给了顾远瞻的法务团队。林悦在实验室里转了两圈,忽然想起一件事——如果境外那帮人已经开始往开源代码里掺沙子了,那完整版模板的存放位置会不会也被盯上了?
她给林振邦打了个电话。林振邦在电话那头沉默了几秒:“银行保险柜那边有双人认证,我和周芸各一把钥匙,缺一把打不开。问题不大。但我担心的不是保险柜——我担心的是我留在东莞出租屋里的那台旧笔记本电脑。那台电脑里存过完整版模板的早期草稿,虽然没存最终版,但草稿里有些参数结构跟完整版是重叠的。谁要是拿到那台电脑,等于拿到一半的密码。”
“电脑还在东莞?”
“应该还在。我跑路的时候没顾上拿,塞在出租屋衣柜顶上的纸箱里。出租屋后来退租了,房东有没有清理过我不知道。”
林悦深吸一口气:“你把地址发我。我明天去趟东莞。”
“你一个人去?”
“我带赵敏。她以前在千峰管过仓库盘点和物品追溯,找东西比我利索。”
第二天一早林悦和赵敏坐上了去东莞的高铁。林振邦给的地址是东莞长安镇一个叫“锦厦新村”的老小区,六楼没电梯,两室一厅,月租八百。林悦照着地址找到那栋楼的时候发现一楼已经改成了快递驿站,楼道墙上贴满了租房小广告。六楼那户的门锁锈得发红,赵敏拿林振邦给的备用钥匙捅了半天没捅开,最后是用脚踹开的——林振邦在电话里说“那锁早该换了,踹就行”。
屋里一股霉味。家具搬空了,地上全是灰尘和碎纸片。赵敏打着手电筒在衣柜顶上摸了半天,摸下来一个灰扑扑的纸箱。打开一看,里面真有一台旧笔记本电脑——ThinkPad T440,键盘上落了一层灰,电池早就没电了。
“找到了。”林悦把电脑装进背包,“走。回去让沈逸做数据恢复。”
回程高铁上赵敏忽然问了一句:“林悦,你爸说那台电脑里存的草稿参数跟完整版重叠。具体重叠多少?”
“他没细说。得问沈逸看了数据才知道。”
“如果重叠度很高的话——那个新加坡公司的人会不会已经来这间出租屋搜过了?”
林悦愣了一下。她回想起来,衣柜顶上的纸箱虽然落了灰,但纸箱封口的胶带是重新贴过的——上面一层灰是均匀的,但胶带边缘有一圈崭新的痕迹。她当时没在意,现在想想,那个胶带确实像是后来贴上去的。
“你说得对。可能有人比我们先到过。”林悦掏出手机给林振邦打电话,“爸,你那个出租屋有人进去过。纸箱被拆开重新封过。”
林振邦在电话那头骂了一句:“那电脑里的草稿参数我加密过。密码是我自己编的算法,别人拿到也解不开。但他们既然进去过了,说明已经有人在东莞盯着我以前的落脚点。你回来之后直接去东莞银行把保险柜里的完整版取出来,换个地方存。别等我了。”
“存哪儿?”
林振邦沉默了几秒:“存你宿舍。你宿舍不是换过锁吗?就搁你床底下。回头我让沈逸把完整版重新加密一遍,用二代芯片的硬件密钥做认证。没有二代芯片的授权,谁拿到都解不开。”
林悦把手机挂断,靠在高铁座椅上闭了会儿眼。赵敏在旁边翻着笔记本电脑查东莞长安镇的出租屋退租记录,忽然说了句:“林悦,你爸那个出租屋的退租记录显示退租时间是去年十一月。之后又有一任租客租了三个月,今年二月份退的。租客名字叫周斌。”
林悦睁开眼。
周斌。孙德利那个技术员,前天刚在创智大厦被经侦带走那个。
“周斌租过你爸的旧出租屋。”林悦把这个消息转给何警官。何警官十分钟后回了条语音:“周斌刚才在审讯里交代了——孙德利去年十一月让他去东莞找一个‘姓林的之前住过的地方’,把屋里所有带存储功能的设备全拆回来。周斌说他在衣柜顶上找到一台旧笔记本,硬盘拆下来带回给了孙德利。孙德利找人做了数据恢复,但硬盘里的草稿参数加密没解开。后来孙德利让周斌把空硬盘装回去、把电脑放回原处,想看看后面有没有人来取。”
林悦把这条语音听了两遍。
“所以孙德利知道那台电脑里有什么,而且他已经试过解密了。”她给沈逸发了条消息,“你回去之后先别碰那台电脑里的数据。孙德利可能在里面留了东西——万一周斌装硬盘的时候动了手脚呢。”
沈逸回:“明白。我先做全盘镜像,在隔离环境里跑一遍安全检查再解密。”
林悦收起手机,靠在座椅上看着窗外飞驰而过的电线杆。她忽然想起林振邦在视频里说过的那句话——“别相信任何人。包括沈逸。尤其包括沈逸。”
她扭头看了一眼赵敏。赵敏正在笔记本上写写画画,列着下一步要排查的潜在风险点。
至少赵敏没问题。林悦扫过她脑子里的画面——全是测试用例编号和安全检查清单,干干净净的。