听鬼哥说故事 发表于 2014-9-1 10:09

跟着鬼哥学android java hook(三)

本帖最后由 淡然出尘 于 2015-2-3 18:39 编辑

    按照上文的约定,我们继续第三篇文章,找一个游戏来测试此框架和插件的稳定性。
      游戏以及测试Hook代码都在附件,这里不再重复叙述,希望读者可以自己对附件中的游戏进行测试分析,掌握hook的简单使用,才是本文最主要的目的。   
    一个解谜逃脱类的游戏,挺好玩的,我还是未破解情况下玩通上一个版本了,新版本其实也出来两三个月了,过了那个新鲜劲头,就直接破解得了。游戏正常的破解方面,读者自己去搞吧,一般是看完我以前发过的所有文章,这个游戏是很简单搞定的,在这里,我们不用暴力破解的方式来搞,假设游戏里面加入了很多防护,如文件md5验证,dex修改,签名验证,防回编译之类的,那么只能反编译而回编译不了或者回编译的包不能运行,所以我们需要在不修改游戏原包情况下来操作游戏的破解了。        所以我们先静态分析一下游戏,然后找到关键类:过程这里不再重复,读者自己去分析一下,hook是基于对方法的操作,如果都找不对关键的call,那么一切都是无用的。



通过这个类,已经很明显的定义了一个Money的Model,用于所有跟Money相关资源的定义。这里我们对此getMoney()方法来进行hook。上面截图大家可以看到,我是先采用的暴力破解,直接修改金币数量为99999,如果这个软件有防护,那我们就开始编写插件。软件使用的基本框架,参照前两篇文章即可,我们只需要用第二篇文章提到的工程,简单修改一些代码即可使用。1.我们需要hook的类2.我们需要hook的方法3.hook方法后的操作按照我们归纳的这三点:首先是修改这里,将需要hook的类换成游戏中这个类:

MS.hookClassLoad("com.gipnetix.escapeaction.scenes.money.MoneyModel", new MS.ClassLoadHook()
然后就是hook的方法:(无参,后面用null)log=arg0.getMethod("getMoney", null);


接着就是hook后这个方法的操作:

//调用原getMoney方法,将原方法的返回值放到aa中
                                                float aa=(Float) old.invoke(arg0, arg1);
                                                //修改aa为777777,即原方法返回值已经修改掉了                                                aa=777777;
                                                System.out.println("金币已经修改为777777");
                                                //返回aa                                                return aa;



Float类型的方法,返回值必然也是float,所以上面我们已经修改数据返回为77777,然后就是安装此插件,重启手机激活插件。运行游戏,查看log日志:





好了,通过上面两个图,证明我们的修改是有效的。
总结一下:
本文主要进行修改的是无参数方法的hook,修改方法的返回值,然后达到破解的效果,不过一般方法来说,还是有参数的为多,那么下一篇,我们就开始分析一个有参数的方法的hook代码的编写。编码基础不好的同学,请注意自主学习,网上很多资料的,多翻翻多看看,有付出才会有进步。
相关代码和文档附件:
链接:http://pan.baidu.com/s/1kTkhpl1 密码:ozbm

ky9999 发表于 2015-1-8 15:03

楼主 请问你那段MoneyModel的java代码是怎么找到的的 反编译得不到java代码啊

feiji5218 发表于 2014-9-2 13:15

现在腾讯手游真的很火,期待鬼哥的关于腾讯手游的教程!呵呵,我先小小自私下,玩了半年的《全民飞机大战》

lwj一辈子 发表于 2014-9-1 10:18

我只想说,我是前排,火钳必须留名{:301_986:}

lovehmy123 发表于 2014-9-1 10:21

学习了,已收藏,留着慢慢研究

Tong 发表于 2014-9-1 10:28

多谢分享

uhyjjgt 发表于 2014-9-1 10:34

谢谢分享 ‘





鬼圈 发表于 2014-9-1 10:53

{:1_900:}为毛你的名字这么叼。。。

天天404 发表于 2014-9-1 11:00

我是前排,火钳刘明

无人说爱我 发表于 2014-9-1 11:01

{:17_1065:}会火哦,前排。

92pojie 发表于 2014-9-1 11:03

火钳刘明,哈哈

jiang196771 发表于 2014-9-1 11:09

大火前,留名啊
页: [1] 2 3 4
查看完整版本: 跟着鬼哥学android java hook(三)