(新手入门)利用OllyDBG破解自制游戏程序“小弟我生永恒”

(新手入门)利用OllyDBG破解自制游戏程序“我生永恒”

本文背景是给定简单的游戏程序,利用特殊方法使得游戏始终不会结束,通过试验可以发现该游戏每次点击Attack,血量HP会减少10点,直到HP为0,游戏结束。

(新手入门)利用OllyDBG破解自制游戏程序“小弟我生永恒”
(新手入门)利用OllyDBG破解自制游戏程序“小弟我生永恒”

如何才能使得游戏不会结束?下面会对这种方法进行介绍,涉及到的部分知识本文不会详细介绍,还请谅解。
由于给定程序没有加壳,所以不用脱壳(如果程序加壳了,用PEiD、language等软件查壳,并针对指定壳下载相应脱壳软件),可以直接进行反汇编,推荐使用OllyDbg(动态调试工具),功能强大,不仅可以反汇编,还支持调试、修改等。
下载地址:http://www.ollydbg.de
用OllyDbg打开游戏程序,可以看到反汇编出来的代码,由四列组成:

  • 行地址(虚拟地址)
  • 机器码(可以用UltraEdit修改)
  • 汇编指令
  • 注释

接下来右键搜索所有被引用字符串,返回结果,然后右键搜索游戏结束消息“Game Over”,可以看到“Game Over”在被引用字符串中的具体位置。

(新手入门)利用OllyDBG破解自制游戏程序“小弟我生永恒”
(新手入门)利用OllyDBG破解自制游戏程序“小弟我生永恒”
(新手入门)利用OllyDBG破解自制游戏程序“小弟我生永恒”

选中并右键跟踪反汇编,找到这条消息来源于哪些机器码。

(新手入门)利用OllyDBG破解自制游戏程序“小弟我生永恒”
(新手入门)利用OllyDBG破解自制游戏程序“小弟我生永恒”

观察可以发现“Game Over”的下面是“HP:%d“,上面是汇编指令JG跳转,说明程序的结构如下:

(新手入门)利用OllyDBG破解自制游戏程序“小弟我生永恒”

要使程序始终不结束,有两种修改方式,一种是使用无条件跳JMP,另一种是使判断条件永远满足,我们采取的是第二种方式。
顺着汇编指令JG跳转往上找,可以看到:
ADD DWORD PTR DS:[ESI+0BC],-0A
MOV EAX,DWORD PTR DS:[ESI+0BC]
TEST EAX,EAX
TEST是按位与操作,通过分析指令可以得到,如果EAX(HP)不为0,那么JG一定跳转(跳转到游戏继续),而且ADD是HP减10的操作。

(新手入门)利用OllyDBG破解自制游戏程序“小弟我生永恒”

右键汇编,将-0A修改成0,然后右键编辑,复制到可执行文件,最后保存文件。

(新手入门)利用OllyDBG破解自制游戏程序“小弟我生永恒”
(新手入门)利用OllyDBG破解自制游戏程序“小弟我生永恒”
(新手入门)利用OllyDBG破解自制游戏程序“小弟我生永恒”
(新手入门)利用OllyDBG破解自制游戏程序“小弟我生永恒”

接下来打开修改后的程序,无论怎么Attack,游戏始终不会结束。

(新手入门)利用OllyDBG破解自制游戏程序“小弟我生永恒”

由于有些知识在文中没有详细介绍,如果大家有疑问,可以给我留言,我会尽快回复的。