0
点赞
收藏
分享

微信扫一扫

[转]android java hook(二)


第一篇文章读完之后,大家在熟悉了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日志:


[img]http://dl2.iteye.com/upload/attachment/0104/5457/177b431c-0b55-3aee-b69c-de32b498bc12.png[/img]


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



0x2:编写hook代码



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


[img]http://dl2.iteye.com/upload/attachment/0104/5459/42ed3f92-adf0-3b3e-a4b1-8cbb98e1c56c.png[/img]


这里是定义我们需要 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 {
      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);
}


好了,这样以后,我们可以开始测试了。



进行安装此插件,然后重启手机。。。


[img]http://dl2.iteye.com/upload/attachment/0104/5461/ee4f06f4-1b0a-3705-a43a-a3c3b1e1d3e1.png[/img]


对比上面我们测试工程的打印截图,这下可以很清楚的看到,我们已经成功修改掉getMoney的返回值为999999。



好了,到现在这两篇文章,大家看完之后,也就可以大致明白了,我们是可以通过这个来操作游戏的,尤其是对有各种验证如签名或者md5的游戏,我们在本机这样修改的话,就可以算是掉了,那么我们下一篇文章就拿一个游戏开始测试,验证我们的想法是否可行。




相关工程附件都在下面网盘,可以直接拿来测试。



链接:[url]http://pan.baidu.com/s/1qW2TPYO[/url] 密码:d1ad


举报

相关推荐

0 条评论