2026年7月23日,独立安全研究者Feint收到一条朋友发来的消息:“我玩《めっちゃカメレオン》的时候,电脑好像被黑了。”这个日本独立游戏在Steam上架不过一个月,销量已经冲破1500万份,一时间成为全球最火的多人躲猫猫游戏。但Feint调出朋友发来的日志,看到的不是游戏bug——而是一连串可疑的文件写入记录。

他翻遍Steam评论区,发现早在7月8日就有玩家发帖说,自己电脑在加载社区地图时弹出了奇怪的命令提示窗,随即账号被盗、系统被远控。当时下面只有零星回复,多数人以为是玩家电脑本身中了毒,没人把矛头指向游戏本身。Feint决定亲自拆一次那个名为“Laser Tag Neon”的社区地图——正是玩家们出问题前最后启动过的那一张。

打开网易新闻 查看精彩图片

这张地图由玩家自制,通过Steam创意工坊分发,官方审核后允许任何人点击订阅、自动下载。在《めっちゃカメレオン》里,不同地图会加载专属的材质、模型和逻辑脚本,用的是Unreal Engine 5的资产容器格式。Feint在第一次下载完成后立刻注意到一个异常:下载进度条走到末尾时,屏幕中央弹出了一闪而过的黑色命令行窗口,持续不到半秒就消失,没有任何错误提示,游戏随后照常启动。熟悉Steam后台进程的人知道,创意工坊下载期间不该出现任何控制台窗口,这种一闪而过的cmd窗口恰恰是恶意脚本在后台静默执行的典型迹象。

打开网易新闻 查看精彩图片

他立刻打开地图的本地文件夹,用常规反病毒工具扫了一遍。所有文件看上去都干净无害:没有.exe可执行程序,没有.dll动态链接库,连.bat批处理或.ps1脚本的影子都不见。游戏资产无非是些.uasset贴图、.uexp数据流、.umap地图文件,任何一款静态扫描器都不会报警。Feint判断,如果恶意代码真的藏在这里,它一定伪装成了游戏正常加载的标准对象——而这正是Steam创意工坊审核机制最薄弱的地方:只检查文件表面格式,不深究蓝图逻辑里的隐藏行为。

他把目光锁定在一个极易被忽视的注册文件上:AssetRegistry.bin。这是Unreal Engine用来记录地图内所有对象名称、路径和类型的索引文件,正常内容是一行行游戏资产的名字,比如“Light_Cave_01”“PlayerStart”。但当他用十六进制编辑器打开这个文件时,一个极其不协调的名字跳了出来——“BP_RCE_Test_C_0”。这个对象的类名被标记为“BP_AmbientController_C”,归在环境控制器文件夹下,看起来就是一个管理场景光照音效的普通蓝图。诡异的是,它的内部字段里还残留着一个旧名字:“BP_RCE_Test”。在Unreal Engine的资产命名规则中,重命名后已放置到地图里的对象会保留原名,只有文件系统里的资产名被更新。这个残留的名字几乎是一面写着“远程代码执行测试”的红旗——RCE正是Remote Code Execution的缩写。

Feint知道,接下来要做的不是继续表面扫描,而是把游戏打包的UE5资产容器完整解开,追溯这个“BP_AmbientController”蓝图究竟在被玩家触发的瞬间干了什么。他用工具解压了游戏的.pak文件,从里面拆出55个数据对象,包括材质、网格、纹理、4张地图、3个蓝图。三个蓝图文件里,有一个体积明显大于其余两个,而且内部节点数量极多,完全不像是为了实现环境控制而写的简单逻辑。

把蓝图脚本反编译为可读的节点流程后,攻击者的动作链立刻清晰起来:蓝图的第一步不是控制灯光,而是调用系统API定位玩家的“文档”文件夹。接着,它会在该文件夹的根目录下创建并写入一个名为“s.bat”的批处理文件。写入的数据源是一段硬编码在蓝图节点中的字符串,这段字符串表面看起来是合法的JSON格式数据——这也是它能通过创意工坊上传检测的原因,系统只把它当成无害的配置信息。但实际上,这段字符串是一个经过精心构架的“JSON/batch polyglot”,即一种同时满足两种语法体系的复合字符串:当用JSON解析器读取时,它是一组键值对配置;但一旦交给Windows的命令解释器执行,相同的内容就会变成一系列可运行的cmd指令。

打开网易新闻 查看精彩图片

Feint将s.bat从受害机器样本中提取出来后,逐行分析了它的执行逻辑。这是一个分两阶段运行的隐蔽脚本。第一阶段启动时,它只是用cmd.exe调用自身,然后立刻退出——这就是玩家下载地图时看到的那个一闪而过的黑色窗口。因为执行过程太快,系统没有机会生成任何报错,甚至连UAC(用户账户控制)提示都来不及弹出。当脚本第二次运行时,它会进入第二阶段:从远程服务器静默下载一个经过混淆的远程访问木马(RAT),并悄悄安装到Windows目录中。RAT一旦注册为自启动服务,攻击者就可以完全远程操控这台PC——查看文件、窃取账号凭证、开启摄像头、注入其他恶意模块,所有操作都对用户不可见。

整套攻击链路高度针对Steam游戏生态设计。它避开了常规杀软的扫描,因为恶意负载不是直接包含在下载的地图文件中,而是在游戏启动、蓝图执行时才动态写入磁盘和联网拉取。它利用了玩家对官方创意工坊的信任——毕竟订阅一百张热门地图,谁会逐个打开文件夹检查AssetRegistry.bin?它还利用了Unreal Engine蓝图系统赋予创作者的完全编程能力,却没有对蓝图节点的行为做任何沙箱限制,使得一个本该用来控制环境氛围的逻辑,变成了下载器和木马投递器。

事实上,围绕自制地图和Mod的安全争议由来已久。2019年《我的世界》Java版就出现过通过Mod伪装窃取Cookie的事件,2022年《城市:天际线》的Steam创意工坊也曾被植入挖矿脚本,但这一次攻击者的隐蔽性大幅升级。他们没有留下任何容易被发现的恶意后缀文件,也没有触发引擎崩溃或弹窗,一切行为都藏在正常的资源加载流程里,只有当游戏读取到那个被改写的蓝图,恶意的多米诺骨牌才开始倒下。目前Feint已将该事件完整报告,并建议所有曾订阅过可疑地图的玩家立即检查自己的文档文件夹中是否出现s.bat文件,同时删除相关社区内容、全盘扫描系统。对于千万级别的玩家基数,哪怕只有一小部分人踩中陷阱,其潜在的受损规模也不容小觑。