我从2004年开始用Steam,摸过的游戏不说一千也有八百。但玩了这么多年,真正让我觉得“这代码不太正常”的,不是游戏画面多好,剧情多神,而是藏在那些.exe和.dll文件里的秘密。每次解包一个游戏,都像在开盲盒,你永远不知道里面装着惊喜还是惊吓。
1. DLL里的密语:“回头是岸”
记得那是个周五晚上,我闲来无事,准备把新买的独立游戏《幽暗森林》的数据扒一扒,看看能不能改个无敌模式。用dnSpy载入主程序,浏览到GameManager类时,我瞥见了一段奇怪的注释:“// If you're reading this, you're too deep. Turn back now.” 我当时就愣住了。这行注释夹在一堆正常代码中间,显得特别扎眼。我盯着屏幕看了好几秒,心里直发毛——这开发者是故意留给改游戏的人看的吗?还是埋了个什么诡异彩蛋?我赶紧查了查这款游戏的论坛,发现有人也在问这个,但没人知道确切的含义。那行注释就像一双从屏幕里盯着我的眼睛,让我那晚睡觉都没关灯。
2. 一个配置文件,差点送走我的电脑
另一回更刺激。我下了一款叫《FPS Strike》的射击游戏,画面一般,但优化不错。我想通过调整配置文件拉高帧率,打开一个叫“settings.ini”的文件,发现最后有一行被分号注释掉的代码:“// Uncomment below for extra optimization. Use at your own risk.” 下面写着一行“InjectDLL=payoff.dll”。我当时觉得,反正注释掉的应该没事,但作死的好奇心驱使我取消注释,保存,进游戏。结果游戏一加载,屏幕直接蓝屏,系统崩溃重启。我后来在Steam社区看到有人说,那是开发者故意留的陷阱,用来惩罚那些爱瞎改文件的玩家。这种恶作剧代码,虽然让我恼火,但不得不承认——太他妈不正常了。
3. 几行Python,全成就达成
大概2016年,有个朋友兴冲冲地找我秀他的Steam等级。我一看他最近玩《Farm Together》,成就时间全在几分钟之内。我问他怎么做到的,他神秘一笑,给我看了个Python脚本。原来那游戏用的还是老版的Steam成就API,成就解锁直接写在本地逻辑里,没有服务端验证。他只需要模拟成就API返回成功,就能瞬间解锁所有成就。他用脚本3秒解锁了70个成就。这种代码设计,从安全角度看简直是开玩笑。我当时既羡慕又觉得荒唐:一个游戏的代码怎么能这么信任客户端?这不是给玩家送作弊器吗?
4. “希特勒的洗脚婢”——那些不正经的代码
有些开发者在代码里藏私货,已经不是秘密。我在玩一款二战RTS(名我就不提了)时,看它的单位数据表,在某个精英单位的“Description”字段里,赫然写着“希特勒的洗脚婢”。这明显是开发者调试时写的,结果忘记删直接发布了。这种不正经的代码,只有在数据挖掘时才会被翻出来。我每次看到这种,都忍不住笑出声。但也觉得,这种带情感、带情绪的代码,比那些冷冰冰的注释有温度多了——虽然不太正常。
5. 一局游戏,一个隐蔽的HTTP请求
最后说一个让我细思极恐的。一个做安全研究的朋友有次分析一款Steam恐怖游戏《深渊回响》。他用Wireshark抓包,发现游戏在每一帧都会往一个陌生IP发一个UDP包,包体只有几个字节。他反编译代码,找到了一个被混淆过的字符串,还原后是一个URL,带着玩家ID和一个时间戳。这个IP查出来属于一个已经荒废的国外论坛,论坛里全是对同一款游戏的诡异讨论帖子,发帖时间都在凌晨三点。谁也不清楚这些数据用来干什么,是统计玩家行为?还是别的什么?这款游戏至今还挂在Steam上,我已经把它从库中隐藏了——不是怕,是觉得那代码不正常到让我不舒服。
这些代码,有的像玩笑,有的像陷阱,有的像艺术的另类表达。它们让游戏不再是单纯的娱乐产品,而成了一个开发者个性甚至阴暗面的容器。我不知道下一个游戏会给我带来什么,但我还会继续解包、翻文件、找那些不太正常的代码。毕竟,这种猎奇的快乐,是游戏本身以外最大的乐趣了。
