宏远科技的写字楼在晨光里泛着冷冽的金属光泽。林浩仰头看向18楼——赵立的办公室窗户半开着,窗帘被风掀起一角,露出里面摆满的机械键盘和显示器。
“监控显示,李雨桐上周三下午三点来过这里。”周正翻出手机里的监控截图,“保安说她没登记,直接进了电梯。”
林浩皱眉:“电梯需要工卡才能按楼层。她怎么上去的?”
“赵立亲自带她上的。”周正调出路障记录,“赵立的工卡在14:58分刷了18楼,李雨桐的指纹留在18楼的前台访客登记本上——但登记时间是15:05,比赵立的刷卡时间晚了七分钟。”
林浩摸出手机,打开Chrome开发者工具:“七分钟足够做很多事。”他输入赵立的工号,尝试登录公司内网——密码错误三次后,系统提示“账号已锁定”。
“赵立早有准备。”周正敲了敲电梯按钮,“走楼梯。”
消防通道的声控灯随着脚步声次第亮起。18楼的安全门虚掩着,林浩推开门时,闻到了股焦糊味——像是谁烧了半张纸。
赵立的办公室里一片狼藉。办公桌被掀翻,键盘散落在地,显示器的电源线被拔掉,屏幕上还残留着未关闭的代码编辑器界面。林浩蹲下身,发现键盘缝隙里卡着张便签纸,上面的字迹被焦痕熏得发黑,但仍能辨认出几个字符:function getTime() { ... }。
“这是……”周正凑近,“函数定义?”
“对。”林浩捡起便签,“function关键字声明函数,getTime是函数名,大括号里是执行逻辑。”他用手机拍了张照,转头对周正说,“凶手可能在烧毁证据,没来得及烧完这张便签。”
“找找其他线索。”周正翻开抽屉,里面有个带锁的U盘盒,标签上写着“项目备份”。林浩用回形针挑开锁扣,U盘里果然有份加密文件,文件名是timeRecord.js。
他插入电脑,运行文件。控制台立刻弹出错误提示:Uncaught ReferenceError: getTime is not defined。
“函数没定义?”周正凑近看代码,“文件里只有调用函数的代码,没有函数本身。”
林浩滚动代码界面,发现最后一行是:console.log(getTime());。他突然注意到,代码编辑器的左下角有个小图标——是VS Code的“调试”按钮,旁边显示着“断点:第10行”。
“凶手可能在调试这段代码时被打断了。”林浩打开调试面板,发现第10行的断点被触发了三次,每次的时间戳分别是:15:02:17、15:03:22、15:04:05。
“这三个时间点有什么意义?”周正问。
“李雨桐的死亡时间推断是8月28日15:00到15:30之间。”林浩调出法医报告,“第一次断点在15:02,正好是死亡时间的起点。”
他突然想起便签上的getTime()函数——这应该是个获取当前时间的函数。如果赵立用这个函数记录李雨桐的死亡时间,那三次断点可能对应他三次确认时间的行为。
“但函数没定义,怎么会有输出?”周正不解。
“可能函数被定义在其他文件里。”林浩搜索项目目录,发现有个隐藏文件夹.idea(IDEA开发工具的配置目录),里面有个utils.js文件。打开后,他看到了getTime函数的定义:
function getTime() {
const now = new Date();
return now.getHours() + ':' + now.getMinutes() + ':' + now.getSeconds();
}
“这个函数返回当前时间的时分秒。”林浩喃喃道,“但李雨桐的死亡时间是精确到分钟的,为什么需要秒?”
他突然注意到,utils.js的最后一行有行注释:// 测试用,实际调用时传入offset参数。而在timeRecord.js里,调用getTime()的位置被修改过——原本应该是getTime(),现在变成了getTime(5)。
“offset参数?”林浩尝试修改代码,将getTime(5)改为getTime(),重新运行。控制台输出:15:02:17(和李雨桐死亡时间的起点一致)。
“如果传入offset参数,函数会返回偏移后的时间。”林浩在utils.js里添加了offset参数的处理:
function getTime(offset = 0) {
const now = new Date();
now.setSeconds(now.getSeconds() + offset); // 增加秒数偏移
return now.getHours() + ':' + now.getMinutes() + ':' + now.getSeconds();
}
再次运行timeRecord.js,控制台输出变成了15:02:12——比原来的时间早了5秒。
“赵立在伪造时间!”周正反应过来,“他用offset参数让函数返回比实际时间早5秒的时间,这样李雨桐的死亡时间就会被误判为15:02:12,而不是真实的15:02:17!”
“但为什么要这么做?”林浩皱眉,“死亡时间的误差只有5秒,对案件影响不大。”
“不。”周正翻出李雨桐的手机通话记录,“她在15:02:10给陈明打过电话,通话时长37秒。如果死亡时间被伪造成15:02:12,那通电话就会变成‘死前通话’——但真实时间是15:02:17,通话结束后5秒她就被杀了。”
林浩的手机震动起来,是法医的消息:「李雨桐的手机通话记录里,15:02:10到15:02:47的通话对象是陈明,但通话内容被加密了。不过,运营商记录显示,这段通话的实际结束时间是15:02:47,比李雨桐手机显示的早了30秒。」
“赵立不仅伪造了死亡时间,还篡改了通话记录!”林浩猛地站起来,“他需要让警方认为李雨桐在通话中被袭击,从而嫁祸给陈明!”
“陈明是?”周正问。
“李雨桐的大学同学,也是暗码组织的成员。”林浩调出陈明的资料,“三年前,他因为编写恶意软件被警方调查,后来销声匿迹。李雨桐最近联系他,可能是想合作曝光暗码。”
办公室外突然传来脚步声。林浩和周正迅速躲到窗帘后,看见一个戴鸭舌帽的男人抱着笔记本走进来——正是咖啡馆擦柜台的阿杰!
“阿杰?”周正低声道,“他不是应该在三亚吗?”
阿杰走到办公桌前,打开赵立的电脑,输入密码(林浩注意到密码是“LiYunTong2025”——李雨桐的密钥)。他调出timeRecord.js,删除了offset参数的处理代码,然后重新打包成压缩文件,塞进自己的背包。
“他在销毁证据!”林浩冲出去,却被阿杰发现。阿杰抓起桌上的美工刀,抵在林浩脖子上:“别动!你们根本不知道自己在查什么!”
“李雨桐是你女朋友!”林浩盯着他,“她信任你,让你保管U盘,你却帮赵立伪造时间!”
阿杰的眼眶泛红:“我没帮赵立!我是被威胁的!暗码组织的人找到我,说如果我不配合,就杀了我妈!”他颤抖着指向电脑,“这段代码是赵立写的,他让我帮忙修改时间戳,说只要李雨桐死了,暗码就能拿到慈善款,再分我一半……”
“所以你烧了办公室的纸?”周正逼近,“还想销毁timeRecord.js?”
阿杰突然松开手,把刀扔在地上:“我对不起李雨桐……”他掏出手机,调出段聊天记录,“暗码的人说,今天下午三点会来拿修改后的代码。我本来想销毁证据后逃跑,可他们说……”
手机屏幕上,聊天框显示着条新消息:「阿杰,别耍花样。赵立的办公室监控已经恢复了,你刚才的举动,我们已经录下来了。」
林浩抬头看向天花板——果然,墙角的摄像头闪着红色的指示灯。
“他们早就知道你会来。”林浩冷笑,“赵立的电脑里装了远程监控软件,你的一举一动都被直播了。”他快速敲击键盘,调出监控后台,“我需要五分钟,就能定位到暗码组织的位置。”
“来不及了!”阿杰指向窗外,一辆黑色商务车正缓缓驶来,“他们已经到了!”
林浩拽着阿杰冲向安全通道。身后传来玻璃碎裂的声音——暗码的人破窗而入。周正掏出手枪,挡在他们前面:“跑!我掩护!”
安全通道的门被撞开,林浩和阿杰狂奔下楼。跑到一楼时,林浩突然停下脚步,转身看向18楼的窗户——那里有个身影正往下跳,怀里抱着个笔记本电脑。
“是赵立!”阿杰喊,“他想逃跑!”
林浩掏出手机,打开地图软件,定位到赵立跳楼的坐标。坠落轨迹的计算结果显示,他会落在楼下的喷泉池里。他立刻拨打120,同时对周正喊:“通知水下救援队!”
急救人员赶到时,赵立已经被捞起,浑身湿透,但还有呼吸。林浩冲过去,抓住他的衣领:“李雨桐的手机通话记录,你是怎么篡改的?”
赵立冷笑:“你以为你能查到真相?”他从怀里掏出个U盘,“真正的证据,在这里。”
林浩接过U盘,插入电脑。里面是段视频——画面里,李雨桐正和李雨桐的父亲争吵:“爸,我不能帮你做假账!慈善款是给孩子的!”李父的脸被马赛克遮住,但林浩认出了他的声音:“你要是敢说出去,暗码的人会杀了你!”
“李雨桐的父亲是……”周正震惊,“市慈善总会会长?”
“对。”赵立咳嗽着,“李父挪用慈善款给暗码组织洗钱,李雨桐发现了,所以被灭口。赵立只是帮凶,真正的主谋是……”
他的话被一阵刺耳的蜂鸣声打断。林浩的手机弹出警告:「检测到恶意软件入侵,正在格式化硬盘!」
“是暗码的病毒!”阿杰喊,“他们远程控制了电脑!”
林浩立刻拔掉U盘,但病毒已经侵入系统,timeRecord.js文件被彻底删除。他盯着屏幕上不断闪烁的错误提示,突然想起阿杰之前提到的“暗码组织的服务器IP指向宏远科技18楼”。
“他们在18楼有服务器!”他对周正喊,“走!现在去!”
警笛声由远及近。林浩坐进警车,看着后视镜里逐渐远去的写字楼。他摸出兜里的便签纸,上面的function getTime() { ... }已经被烧得只剩半行。
“函数的执行上下文……”他喃喃道,“如果赵立真的想伪造时间,为什么不用Date对象的getHours()方法直接获取时间?反而要写个函数?”
周正皱眉:“可能函数里有其他逻辑?”
“不。”林浩摇头,“函数的存在本身,就是为了隐藏调用时的参数。”他打开手机备忘录,写下段代码:
// 真实的时间记录函数
function getTime(realTime) {
return realTime - 5000; // 减去5000毫秒(5秒)
}
// 赵立调用时传入当前时间
const fakeTime = getTime(new Date().getTime());
console.log(fakeTime);
“如果李雨桐的真实死亡时间是15:02:17,赵立用这个函数把它伪造成15:02:12。”林浩抬头看向窗外,“但问题是,他为什么要多此一举写个函数?直接减5秒不就行了?”
“因为他需要让代码看起来‘正常’。”周正突然明白,“如果只是简单的减法,警方可能会怀疑是手动修改。但用函数的话,就像正常的业务逻辑——比如统计用户操作时间,需要减去网络延迟。”
“没错。”林浩握紧手机,“而这个函数的真正目的,是为了隐藏offset参数的来源。暗码组织的人告诉他,只要用函数封装时间修改,就不会被查到……”
他的手机震动起来,是法医的消息:「李雨桐的父亲今天上午突发心脏病去世,医院记录显示,他死前最后一通电话是打给赵立的。」
林浩的瞳孔骤然收缩。他想起赵立跳楼前的冷笑,想起视频里李父的威胁,突然意识到:这场谋杀,从来都不是赵立一个人的主意。
“周队。”他转头看向副驾的周正,“我们需要重新调查李父的财务状况。暗码组织想要的,可能不只是慈善款……”
“还有李雨桐父亲手里的‘秘密’。”周正接口道,“比如,暗码组织的核心代码?”
林浩的手机弹出条新消息,是陈明发来的:「李父的私人云盘里有段加密视频,解密密钥是‘LiYunTong’。我黑进去了,视频里是李雨桐和赵立的对话——赵立说,“只要你不曝光,我就帮你爸掩盖假账”。」
“原来如此。”林浩喃喃道,“李雨桐发现了父亲的秘密,赵立用帮她父亲掩盖假账的条件威胁她,让她停止调查。但她拒绝了,所以赵立联合暗码组织杀了她……”
“可李雨桐为什么不直接报警?”周正不解。
“因为她父亲的秘密牵连太广。”林浩调出李雨桐的新闻报道,「她的调查报道里提到,宏远科技的慈善款被挪用,最终流向了‘多个关联方’。而这些关联方,可能包括市政府官员、医院高层……甚至周队你提到的,慈善总会的人。」
警车驶入警局时,林浩的手机突然响起,是阿杰的语音:「林先生,我在赵立的电脑里发现了段代码,和你发的便签很像——function deleteEvidence() { ... }。后面还有行注释:‘如果我出事,这段代码会自动删除所有证据’。」
林浩的脚步顿住。他望着警局门口的警徽,突然想起李雨桐临死前攥着的便签纸,想起阿杰颤抖的道歉,想起赵立跳楼前最后的冷笑。
“周队。”他转身看向周正,“我们需要立刻找到阿杰。暗码组织的人可能已经盯上他了……”
他的话被一阵急促的电话铃声打断。周正接起电话,脸色瞬间变得煞白:“什么?李娜被绑架了?”
林浩猛地抬头:“李娜是谁?”
“李雨桐的妹妹。”周正的声音发颤,“她今天上午去学校,被人劫走了。绑匪留了张纸条,上面写着:‘想要妹妹活命,交出李雨桐的代码。’”
林浩的手机弹出张照片——李娜被蒙着眼睛,绑在椅子上,身后是块白板,上面用马克笔写着行代码:function ransom() { return '李雨桐的秘密'; }。
“这是……”林浩瞳孔收缩,“暗码组织的勒索信?”
“不。”周正指着照片角落,“看白板下面的影子——是个戴鸭舌帽的男人,和咖啡馆的那个一模一样。”
林浩的脑海里突然闪过个念头:暗码组织的人,从来都不是“他们”。而是一群“他”——每个代码背后,都藏着一张人脸。
而他,已经踏入了这场用代码编织的迷局。
本书首发来自17K小说网,第一时间看正版内容!
1 永夜
作者: 江火香猫
科幻末世 1042417 字
永夜:浩劫余生,终见光明
2 校花别沾边,重生的我只想搞钱
作者: 十万字
都市小说 789066 字
都重生了,还不好好搞钱?
3 我死后,姐姐们才开始爱我
作者: 木马非马
都市小说 80082 字
我死后,全家人才开始知道爱我,可我已经死了
4 上门狂婿
作者: 狼叔当道
都市小说 8171953 字
上门赘婿,受辱三年,期约一到,强者归来!
5 武圣之上
作者: 任我独行侠
玄幻奇幻 201339 字
这是个废材靠着金手指,逆天改命的故事!
6 60年代:开局荒年,我带着全村吃肉
作者: 妞妞骑牛
都市小说 415929 字
穿越60年代:开局荒年,我带着全村吃肉
7 这位诗仙要退婚
作者: 人世几春秋
历史军事 1194814 字
这位诗仙要退婚:文韬武略
8 玄幻:遇强则强,我的修为无上限
作者: 史上最帅作者
玄幻奇幻 1481875 字
获得遇强则强系统,我直接啪啪给了天道两个大嘴巴子
9 红豆缘:炮灰也要长命百岁
作者: 翘褚
古代言情 271116 字
开局炮灰剧本怎么办?不慌,苟着苟着就到大结局了
10 神龙诀之九龙剑诀
作者: 光环美男
仙侠武侠 1003350 字
江湖传闻要是得到《神龙诀》,就可以称霸武林!
《第三章 未执行的「函数调用」》最新评论
评论本章还没有人发表评论哦~
我来说两句