屏幕上的日志条目一行行展开,记录着那个深夜发生的每一个细节。路容的目光锁定在“MODIFY_FILE”操作后的几行——那里显示了文件大小、校验和的变化,以及一个短暂开启又关闭的临时脚本进程。她的手指在键盘上敲击,打开一个新的编程界面。夜色已深,窗外的城市灯火渐稀,只有她的房间还亮着灯。她需要写一个程序,模拟出那种特定的修改模式,让证据无可辩驳。时间在代码的字符间流逝,她的眼睛因专注而微微发亮,嘴角第一次扬起了一丝冰冷的弧度。
---
凌晨一点十七分
路容的出租屋里,只有笔记本电脑的风扇声和键盘敲击声。
她盯着“文件操作详情”日志里的那几行记录:
22:49:11,IP:10。10。10。12,用户:admin_wang,操作:MODIFY_FILE,对象:datablueplanedblueplan_data_1103_final。csv
-文件大小变化:从1,247,583字节变为1,247,612字节
-MD5校验和变化:从8f3c7a2e1b9d5f4a6c0e8b7d2a1c3f5e变为4a6c0e8b7d2a1c3f5e8f3c7a2e1b9d5f4
-检测到临时脚本进程:tmpchetegrity_script。sh运行时长:2。1秒
-脚本内容摘要:包含“sed-i''s,“d{4}-d{2}-d{2}“,“2023-11-03“g''”等正则替换操作
路容的手指在触摸板上滑动,将这几行日志截图保存。她的呼吸很轻,房间里能听到远处街道上偶尔驶过的夜班公交车引擎声。窗外的路灯透过没拉严实的窗帘缝隙,在地板上投下一道细长的光带。空气里有灰尘和旧书的气味,还有她刚才泡的速溶咖啡已经凉透的酸涩味道。
“完整性校验操作?”她低声自语,声音在寂静的房间里显得格外清晰。
王总监在会议上说,她只是“例行检查数据完整性”。但日志显示,那个临时脚本里包含的是正则替换命令——这根本不是校验,这是修改。
路容打开文本编辑器,开始编写代码。
她的手指在键盘上飞舞,敲击声密集而有节奏。屏幕上,Python代码一行行出现。她先定义了一个函数,模拟那个正则替换操作:将所有格式为“YYYY-MM-DD”的日期字段,统一替换成“2023-11-03”。然后她写另一个函数,计算替换前后文件的MD5校验和。
“但这样还不够。”她喃喃道。
王总监展示的“污染样本”里,不仅仅是日期被修改了。路容调出会议时拍下的那张污染数据截图——那是她偷偷用手机拍的,虽然模糊,但关键字段还能辨认。
截图显示,在“用户行为序列”字段里,原本应该是“login→browse→add_to_cart→checkout”这样的标准序列,变成了“login→browse→add_to_cart→checkout→login→browse”。重复了。
在“交易金额”字段,原本的数值被乘以了一个随机系数,范围在0。95到1。05之间。
在“地理位置”字段,部分坐标的小数点后位数被截断。
这不是简单的数据污染。这是精心设计的、模拟自然数据损坏模式的修改。目的是让污染看起来像是清洗过程中的技术错误,而不是人为破坏。
路容闭上眼睛,手指按在太阳穴上。
她能想象出那个场景:上周五晚上十点四十九分,王总监坐在自己的办公室里,电脑屏幕亮着。她打开终端,登录管理员账户,解锁路容已经清洗完成并锁定的文件。然后她运行一个脚本——那个tmpchetegrity_script。sh——脚本按照预设的规则,对文件进行“污染”。完成后,她重新锁定文件,退出登录。
然后,她删除了操作日志中关于这个脚本运行的具体内容记录,只留下“MODIFY_FILE”这个笼统的操作条目。在提供给路容的剪辑版日志里,她甚至把这个条目也删掉了。
“但你没删干净。”路容睁开眼睛,目光重新聚焦在屏幕上。
备份系统里的完整日志,还保留着脚本进程的PID、运行时长,甚至脚本内容摘要。虽然看不到完整脚本代码,但这些摘要已经足够。
路容开始编写第二个模拟程序。
这一次,她不仅要模拟日期替换,还要模拟用户行为序列的重复、交易金额的随机扰动、地理坐标的截断。她根据污染样本中观察到的模式,推断出可能的算法:
-用户行为序列重复:每隔100行数据,随机选择一行,将其行为序列复制并追加到末尾。
-交易金额扰动:对每个金额乘以0。1),保留两位小数。
-地理坐标截断:将经纬度坐标的小数部分截断到三位。
她写得很专注,时间在代码的字符间流逝。窗外的天空从深黑渐渐转为墨蓝,远处传来第一班地铁驶过轨道的声音,沉闷而有节奏。房间里越来越冷,她起身披了件外套,手指因为长时间敲击键盘而有些僵硬。
凌晨三点四十二分
模拟程序写完了。
路容从自己的备份里调出上周五清洗完成的数据文件——这是她习惯性保留的本地副本。她用自己编写的模拟程序对这个干净文件进行处理。
运行。
进度条在屏幕上缓慢移动。她的心跳有点快,喉咙发干。她拿起桌上那杯凉透的咖啡,喝了一口,苦涩的味道在舌尖蔓延。
程序运行完毕。