听鬼哥说故事 发表于 2014-8-29 13:31

跟着鬼哥学android java hook(二)

本帖最后由 听鬼哥说故事 于 2014-8-29 13:38 编辑

第一篇文章读完之后,大家在熟悉了cydia的hook框架了,然后我们就开始下一步的学习。
本篇文章,主要是修改正常软件中方法的返回值,大家可以根据这个思路去延伸扩展,不要局限于此文一个思路。
0x1:建立新工程

新建立一个正常安卓工程,具体可以看附件工程名:TestHook包名:com.example.testhook主类:MainActivity.java
编写一个测试算法的代码:
public int getMoney(){
               
                int aa=10;
      
                System.out.println("这里还是初始化的aa为-->"+aa);
               
                  return aa;
      }

代码很简单,模拟一般游戏的get方法,返回一个int类型的数据,一般用来当作游戏中的金币数量。

然后在onCreate中调用这个方法:
System.out.println("开始执行了");
               
                int bb=getMoney();
               
                System.out.println("现在是新版本的aa为-->"+bb);

在调用方法前后,对数据都有打印,这样我们就可以很方便的查看数据是否改变了。

好了,测试工程基本就这样了,那么我们安装看一下log日志:


一切正常,我们的目标工程完成后,那么我们就开始编写hook方面的算法。

0x2:编写hook代码

省事一点,我们直接使用上篇文章使用的Hook工程,编写一个新的方法即可。


这里是定义我们需要 hook 的类和方法。
然后就是看怎么操作那个hook的getMoney的方法了:
if(log!=null){
                              
                              final MS.MethodPointer old = new MS.MethodPointer();
                              
                              MS.hookMethod(arg0, log, new MS.MethodHook() {

                                        @Override
                                        public Object invoked(Object arg0, Object... arg1)
                                                      throws Throwable {
                                                // TODO Auto-generated method stub
                                                
                                                System.out.println("i am in---------->");
                                                
                                                System.out.println("i am going to fuck ---->");
                                                
                                                //调用原getMoney方法,将原方法的返回值放到aa中
                                                int aa=(Integer) old.invoke(arg0, arg1);
                                                
                                                //修改aa为999999,即原方法返回值已经修改掉了
                                                aa=9999999;
                                                               
                                                //返回aa
                                                return aa;
                                        }
                                       
                              },old);
                              
                        }

好了,这样以后,我们可以开始测试了。
进行安装此插件,然后重启手机。。。


对比上面我们测试工程的打印截图,这下可以很清楚的看到,我们已经成功修改掉getMoney的返回值为999999。
好了,到现在这两篇文章,大家看完之后,也就可以大致明白了,我们是可以通过这个来操作游戏的,尤其是对有各种验证如签名或者md5的游戏,我们在本机这样修改的话,就可以算是破解掉了,那么我们下一篇文章就拿一个游戏开始测试,验证我们的想法是否可行。

相关工程附件都在下面网盘,可以直接拿来测试。
链接:http://pan.baidu.com/s/1qW2TPYO 密码:d1ad


Avenshy 发表于 2014-8-29 13:39

从来没学过JAVA。。我还是膜拜好了!




http://www.52pojie.cn/static/image/common/xsigline.gif.pagespeed.ic.VSrZ79S_Nm.png


adslxyz 发表于 2014-10-5 23:47

一定要重启手机吗?鬼哥有没有什么其他方法。每次重启手机太浪费时间了。。

xiaowenyu520 发表于 2014-8-29 13:36

Tong 发表于 2014-8-29 13:36

沙发没了

ii丶BigBreast 发表于 2014-8-29 13:42

来围观一下大牛

924410377 发表于 2014-8-29 13:51

前排前排...嘿嘿

xuanhei 发表于 2014-8-29 14:03

不简单!

羅少 发表于 2014-8-29 14:10

windows的hook我会。。安卓的就不知道了。。

小试锋芒 发表于 2014-8-29 21:15

这么快就出二了,速度!大家快来学习!

yyz219 发表于 2014-8-30 08:03

页: [1] 2
查看完整版本: 跟着鬼哥学android java hook(二)