2014-11-15_00003_1_副本 This war of Mine是一款非常赞的独立游戏。关于这个游戏到底有多赞,可以参考知乎上的回答:http://www.zhihu.com/question/26834036 周末的时候发现这款游戏居然登录了ios平台,正版需要68元RMB(现在已经涨到¥98),可耻的从pp助手下载的我开始了对这款游戏的探索。 这款游戏在设计上,通过巧妙的控制资源的数值,让玩家始终过的非常艰辛,当有人需要我帮助的时候,每次我都欣然答应,然后自己走向末路。最后实在受不了这种压抑的环境,决定对这款游戏进行逆向,至少玩起来不那么郁闷。 因为是pp上下载的游戏,省去了脱壳的环节,直接把二进制文件扔到ida里分析就好了。 因为游戏内的函数几乎都是用c来写的,所以看不到函数名,全都是sub_xxx的函数,只能另辟蹊径,从字符串入手。 游戏中每个人物都有的关键属性为Hungry,Wonded,Sick,Tired等。开始的思路,是找到是这些属性的值发生变化的函数,进而修改函数逻辑,锁定这些关键属性,使自己不那么被动。 于是开始在字符串中搜索"Hungry",搜索出所有的"Hungry"。 QQ截图20150722231959挨个点进去看了之后,却有了意外的惊喜,点开第三个红框中的地址, QQ截图20150722232323 看到两个if判断,进入判断有GodMode Enable字样,在else后有GodMode Disabled字样,看来游戏开发人员也嫌弃这坑爹的数值设定,自己搞了个上帝模式玩的high起来啊。
通过两个if语句判断进入上帝模式,在上帝模式里,对人物属性的hungry,sick,wounded等属性做了修改。我猜测这个是官方预留的内挂,通过特定途径,可以开启上帝模式,也就是作弊模式,人物不会饥饿受伤。
切换到ida-view界面查看汇编语句是这样的。
QQ截图20150722232637
标红的三行,是if语句之后的跳转语句。即把这几个if语句的跳转汇编代码改成nop,函数就不会跳到后面的else GodMode Disabled了。
通过观察,我猜测sub_1DCA34是一个输出函数,如果开启上帝模式,会输出GodMode Enabled;
如果正常游戏,则会输出GodMode Disabled。
于是通过一个HOOK函数输出日志
d0d444e8-4412-4f80-8066-43c00d1d637458572cf7-cb3e-412a-88c9-5b7344df257f0f579479-8c52-4989-8c44-7478846dc54f
 以上是关键代码。
sub_1DCA34这个函数会被很多函数调用的,所以如果不加个过滤的话,会输出来一大堆无用的字符,干扰我们去找重要的字段。所以同时hook sub_112154。
然后编译,将编译好的dylib拖进ipad,开启游戏,等待奇迹出现的时刻。
6396efa7-9cf9-4653-b5fc-582abf789593
随着游戏的加载,出来一大串输出,GodMode Disabled。
看来有戏。
接着想办法干掉那两个if判断,直接执行if语句里面的内容吧。
先看看ida里的汇编代码:
b8bd1311-35e1-48ae-8438-50838b0c9ba7
cmp或者tst后面跟一个beq,先比较后跳转,如果把所有的beq改成nop,不就可以直接执行到if里面去了么。
说干就干,先在ida里改下字节码看看效果。已知nop的字节码是 00 bf。
2c86cafc-3e3d-4247-900e-c62c98a02791
更改完成,接下来按下F5看看伪代码变成什么样子了。
6db93a02-445e-4249-8bc0-7687f6919c11
伪码中已经没有了if语句,看来修改是成功的。接下来只需要hook进这个函数,修改内存中的字节码就可以了。
把上文中的func_new_modmem()修改成下面这样
4fdf5c22-fae5-4ba2-8a24-bbcfa80a6fd1
解释一下,int result那一行是把需要修改的地址那个内存分页权限改为可读可写,也就是19,然后下面是修改内存中地址的字节码,最后还要把内存分页的读写权限改回来,也就是后面result那行代码来实现的。
为了对内存进行修改,还需要再这之前添加 afcc9d3a-6fa6-4f46-8b9a-257413526bf3
再在sethook中,添加
01683bd7-85af-40d4-8010-b8a3c507a1ac
不然编译会报错。
接下来编译通过,把dylib拖进ipad,再次打开游戏,观察syslog刷新
奇迹出现了!
9aaf2963-42f8-492b-bbda-70cf4369898f
成功开启了上帝模式,这时候游戏已经loading完毕了,看一下我的人,固然所有属性全满,显示content字样,到这里,Twom的上帝模式开启辅助实录就可以结束了。
另外说一下重要的事情,以上的地址,需要使用This war of Mine 1.1版的程序,目前商店已经更新了1.2版本,地址应该不会相同了,不过函数如果还在的话,可以搜索字符串找到,比如在字符串中直接搜索"GodMode"。
如果是64位设备需要模仿本教程的话,需要自行修改游戏的mach-o文件头,改成32位运行模式。当然了,在ida中还是分析32位的binary就好了。
Have a good time。以后有时间我会把打包好的插件放出来的,动手能力强的同学可以自己试着做下,或许会受益匪浅。

love loli,love live!