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


#1

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

功能介绍

本项目中使用的游戏逆向思路源于ios游戏This war of Mine 辅助开发实录 ,文中介绍该游戏可进入上帝模式,对人物属性的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”。

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

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

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

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

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:喜欢的小伙伴可以自行玩耍


#2

阿里星三号机为什么这么强


#3

牛批啊 兄 dei


#4

是你的HookZz牛批


#5

是你的HookZz牛批


#6

是你的HookZz午批


#7

总之牛批!


#8

编译环境是xcode多少,老报寄存器结构错误!


#9

升级9.2Xcode,己解决


#10

我用的是xcode8.2.1


#11

赞,那修改条件分支为 ‘非’ 是不是也可以呢?也就是说,通过静态修改也可以吧?


#12

静态修改也可以,要修改二进制文件了


#13

嗯,了解,我有几个问题请教下:

  1. 从github pull下来的hookzz源码编译之后是静态链接库,如果想编译动态链接库可以吗?
  2. HookZz修改寄存器的步骤可以大概说一下嘛?我看帖子都没怎么详细说。

#14

此贴是对HookZz框架的简单使用范例,重点在使用,我也用的静态库。HookZz的具体详情最好还是看原作者的github上的教程和例子。底层具体原理我说不清楚:joy:二楼是原作者:star_struck::heart_eyes:哈哈


#15

请问osx下有类似框架吗。。。
想hook某个寄存器 实时修改 类似pc下的内存补丁
不知道咋弄。。。新手求助:joy: