ios游戏This war of Mine 辅助开发实录

ios开发 myhloli 24979次浏览 已收录 22个评论

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。以后有时间我会把打包好的插件放出来的,动手能力强的同学可以自己试着做下,或许会受益匪浅。
  萝莉社,版权所有丨如未注明,均为原创丨本网站采用BY-NC-SA协议进行授权,转载请注明转自:https://myhloli.com/mod-of-this-war-of-mine.html
喜欢 (47)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(22)个小伙伴在吐槽
  1. 希望能够集成插件发布一下,真的关注好久了
    阿宇2017-06-29 13:17 回复
  2. 不明觉历
    可可味的哈尼2017-06-19 15:14 回复
  3. 考虑做插件吗
    阿宇2017-03-22 14:26 回复
  4. 求大神源码地址,学习学习
    BeiCheng2017-03-19 12:09 回复
  5. 几日不见 开始做ios开发了么
    OIK_JINN2016-01-18 11:54 回复
  6. 几日不见已成大神了
    exebat2015-08-18 11:16 回复
  7. 大神,如何修改mach-o......
    郑旭2015-07-31 17:35 回复
    • 16进制编辑器,把macho文件31 32位改为00即可
      myhloli2015-07-31 18:28 回复
  8. 大神,如何修改math-o......
    郑旭2015-07-31 17:24 回复
  9. 宅の2015-07-31 15:16 回复
  10. 用的明明iPhone
    凉拌炒蛋炒饭2015-07-23 10:44 回复
  11. 不明觉屌
    凉拌炒蛋炒饭2015-07-23 10:44 回复
  12. GodMode On!
    Cytrs2015-07-23 01:22 回复
  13. 不明觉历
    keddy2015-07-23 00:11 回复
加载中……