跟着鬼哥学android java hook(二)

  第一篇文章读完之后,大家在熟悉了cydiahook框架了,然后我们就开始下一步的学习。

本篇文章,主要是修改正常软件中方法的返回值,大家可以根据这个思路去延伸扩展,不要局限于此文一个思路。

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 的类和方法。

然后就是看怎么操作那个hookgetMoney的方法了:



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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值