使用HookZz框架hook《我的战争》游戏进入上帝模式


(nzt) #1

学习了一段时间HookZz框架,在这里写一个实践项目。

功能介绍

本项目中使用的游戏逆向思路源于ios游戏This war of Mine 辅助开发实录70 ,文中介绍该游戏可进入上帝模式,对人物属性的hungry,sick,wounded等属性做了修改,这可能是官方预留的内挂,通过特定途径,可以开启上帝模式,也就是作弊模式,人物不会饥饿受伤。原文是在静态分析中把if语句的跳转汇编代码改成nop,使游戏跳转到上帝模式,而当前项目是动态修改寄存器的值,实现相同的目的。

开发环境

开发环境:TheOS + MonkeyDev + Xcode
分析工具:静态分析用IDA,动态分析用lldb和debugserver
使用环境:越狱的苹果手机
游戏版本:1.13.1

详细步骤

1.把游戏的二进制文件“TWoM”拖入IDA分析,选择分析64位版本。

2.分析完成,打开“Strings window”窗口,搜索"GodMode"关键字,可以得到“GodMode Enabled”和“GodMode Disabled”。

0@2x.png2374x1048 426 KB

3.根据搜索结果查看对应的汇编语句,可见“GodMode Enabled”和“GodMode Disabled”是一个条件分支。

1@2x.png2414x1460 661 KB

4.查看汇编语句,使用动态调试,在 0x10015CD44 处下断点。执行到断点,打印w8的值为nil,继续执行,代码进入了“GodMode Disabled"分支。于是当下次执行到断点时,我尝试使用"register write w8 4"修改w8寄存器的值为4,继续执行,代码进入了“GodMode Enabled”分支。得出结论:修改w8的值就可以进入上帝模式。

2@2x.png2302x1318 727 KB

5.使用HookZz框架中的 ZzBuildHookAddress 方法来修改w8寄存器的值。

6.“GodMode Enabled”和“GodMode Disabled” 都执行了 sub_10025F9EC 函数,根据《ios游戏This war of Mine 辅助开发实录》的讲解,这貌似是一个打印函数,使用HookZz的ZzBuildHook 来hook这个函数,在这里添加一条打印语句。

3@2x.png2468x1226 538 KB

7.在Xcode中使用MonkeyDev框架创建LogosTweak项目,并编写代码。

8.编译tweak项目并安装到越狱设备,打开游戏app,查看Xcode输出的系统日志,发现输出了“GodMode Enabled”,这可以作为进入上帝模式的依据。

  • 部分打印如下:

    Dec 18 22:41:16 Kainuo-kwj TWoM[95161] <Warning>: 测试---x8 is:开始
    Dec 18 22:41:16 Kainuo-kwj TWoM[95161] <Warning>: 测试---request(x8) is: 0
    Dec 18 22:41:16 Kainuo-kwj TWoM[95161] <Warning>: 测试---request(x8) 修改后is: 4
    Dec 18 22:41:16 Kainuo-kwj TWoM[95161] <Warning>: 测试---日志:GodMode Enabled

x8寄存器的原始值为0,被修改为4,程序进入上帝模式并打印出“GodMode Enabled”。本次hook成功。这个游戏我没怎么玩:smiley:喜欢的小伙伴可以自行玩耍

  • github源码地址:
    喜欢的小伙伴可以帮忙点个“☆”,哈哈,三Q