吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 13907|回复: 20
收起左侧

[Android 原创] 跟着鬼哥学android java hook(二)

  [复制链接]
听鬼哥说故事 发表于 2014-8-29 13:31
本帖最后由 听鬼哥说故事 于 2014-8-29 13:38 编辑

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

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

0x1:建立新工程

新建立一个正常安卓工程,具体可以看附件
工程名:TestHook
包名:com.example.testhook
主类:MainActivity.java

编写一个测试算法的代码:

[Java] 纯文本查看 复制代码
public int getMoney(){
                
                int aa=10;
        
                System.out.println("这里还是初始化的aa为-->"+aa);
                
                  return aa;
        }


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


然后在onCreate中调用这个方法:

[Java] 纯文本查看 复制代码
 System.out.println("开始执行了");
                
                int bb=getMoney();
                
                System.out.println("现在是新版本的aa为-->"+bb);


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


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

图片1.png


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


0x2:编写hook代码

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

图片2.png


这里是定义我们需要 hook 的类和方法。

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

[Java] 纯文本查看 复制代码
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);
                                
                        }


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

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

图片3.png


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

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


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

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



点评

吾爱有你更精彩!  发表于 2014-8-29 14:10

免费评分

参与人数 6热心值 +6 收起 理由
CtoneGao + 1 我很赞同!
Kirito0 + 1 学习了
小试锋芒 + 1 我很赞同!
961611367 + 1 谢谢@Thanks!
呵呵0214 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
低头看月亮 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Avenshy 发表于 2014-8-29 13:39
从来没学过JAVA。。我还是膜拜好了!





QQ截图20140829133753.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
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 00:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表