修补 if() 语句¶
如果你觉得已经准备好亲自动手使用 OllyDbg,请继续阅读。前往 https://www.nostarch.com/gamehacking/,下载本书的资源文件,拿到 BasicDebugging.exe 并运行它。乍一看,你会发现它看起来像经典游戏 Pong。在这个 Pong 版本中,当球在对手的屏幕上时,你是看不到它的。你的任务是禁用这个功能,让你总能看见球。为了让你更容易,我把游戏做成了自主运行。你不必玩,只需破解。
首先,把 OllyDbg 附加到游戏。然后把 CPU 窗口聚焦到主模块(在模块列表中找到 .exe 并双击它),使用「引用的文本字符串」功能定位球被隐藏时显示的字符串。接下来,双击字符串在代码中定位它,分析周围代码,直到找到决定是否隐藏球的 if() 语句。最后,使用代码补丁功能,修补 if() 语句,让球总是被绘制。作为额外奖励,你可以尝试用 OllyFlow 绘制这个函数的图,以便更好地理解它到底在做什么。(提示:if() 语句检查球的 x 坐标是否小于 0x140。如果是,它跳转到绘制球的代码。如果不是,它绘制没有球的场景。如果你能把 0x140 改成 0xFFFF,球就永远不会被隐藏。)