抢断
很久以前,出于好奇,我尝试十六进制编辑游戏“ Dangerous Dave”的可执行文件。我在文件中四处寻找可以找到的任何字符串,并进行了一些随机编辑以查看它是否会真正改变游戏中显示的文本。
我很惊讶地看到结果,现在已经使用十六进制编辑器和DOSBox重新创建了结果:
可以看出,在字符串“ ROMERO”中编辑两个字符“ RO”导致更改了4个字符,结果变为“ ZUMEZU”。好像程序正在重用两个字符,并在该字符串的开头和结尾打印它们。
是什么原因造成的?我的第一个猜测是尝试使可执行文件更小,但是仅重用字符的代码可能需要比保存这2个字节更多的空间。这仅仅是作者的a俩,还是一些编译器的伏都教?
黄昏-无效-
可以肯定地说,没有逆向工程就很棘手,但是我的猜测是,程序中的许多恒定数据都是使用LZ系列算法压缩的。这些压缩方案基本上以您观察到的方式工作:它们将重复的子字符串编码为对先前已解码文本的引用。
这些压缩算法可能不仅用于一个字符串,而且不仅用于文本。它们很有可能还用于压缩其他数据,例如图形或关卡布局。简而言之,使用此算法可能会节省很多钱!
在旧游戏中,通常使用这些压缩算法来节省磁盘空间,但这并不是自动的-罗梅罗添加了自己的东西,因此可能会实施该算法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
编辑于
我来说两句