码迷,mamicode.com
首页 > 其他好文 > 详细

Hook的两个小插曲

时间:2014-09-03 11:23:36      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:android   style   blog   http   color   使用   java   ar   2014   

    看完了前面三篇文章后,这里我们来一个小插曲~~~~

    

    第一个小插曲,是前面文章一个CM精灵的分析,我们这里使用hook代码来搞定;

第二个小插曲,是现在一些游戏,都有了支付上限,例如每天只能花20块钱来购买。

好了,下面我们分开叙述~~~~

0x1:第一个小插曲


CM精灵分析的时候,打开软件能得到的最初始的信息,是软件的使用时间有限制,为30分钟,我们可以找到其上下文来继续查看一下。

软件分析方面,懒得再次打字叙述了,看下面的连接即可:

http://www.52pojie.cn/thread-285325-1-1.html

 

我们通过分析以后,可以得到:


bubuko.com,布布扣


通过查看a()Z方法,发现是一个返回值为boolean类型的方法,所以,也能看到确定的类和方法,那么我们就开始写hook代码,hook代码简单来说,使用框架的话是很简单的:


1.确定hook

2.确定hook类中的关键call方法

3.hook方法来怎么做


那好,有这三条流程以后,我们继续下去。

这里是确定需要hook方法所在的类:




MS.hookClassLoad("net.aisence.Touchelper.TouchelperLicense", new MS.ClassLoadHook()


这里是确定需要hook的方法名和方法的传入参数



hookvalid=arg0.getMethod("a", null);



然后就是hook那个方法,我们这里只需要它的返回值为true即可:



final MS.MethodPointer old = new MS.MethodPointer();
					
					MS.hookMethod(arg0, hookvalid, new MS.MethodHook() {

						@Override
						public Object invoked(Object arg0, Object... arg1)
								throws Throwable {
							// TODO Auto-generated method stub
							

							System.out.println("是否注册 hook --->");
							boolean aa=(Boolean) old.invoke(arg0,arg1);
							
							aa=true;
							
							System.out.println("是否注册了呢?-->"+aa);
							
							return aa;  
							
						}
					}, old);



好了,我们运行安装插件,然后重启手机打开软件:

在点击播放一个脚本的时候,会有如下信息:



bubuko.com,布布扣



刚好是我们hook中的打印信息,说明一切正常。

测试方面,我只是简单测了几个插件而已,没有连续搞1个多小时那么长时间,如果测试出现其他问题,那么继续根据问题寻找原因即可。

 

0x2:第二个小插曲


游戏中想花钱也不行,人家限定了每天只能花多少,所以,我们可以推测,游戏获取手机的信息,然后判断你是不是支付了太多,那么一般常见的信息就是imeiimsi了。这两个单词的概念,不懂的同学搜索一下,一个是手机imei,一个是sim卡的imsi,相当于人的身份证。


好了,那么我们先从imei入手:


先写下我们开发中正常获取imei的代码:




TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(this.TELEPHONY_SERVICE);

String imei=mTelephonyMgr.getDeviceId();
	    
		System.out.println("现在的Imei为-->"+imei);




好了,正常软件开发来获取手机的imei是这样写的,使用系统的API即可。


然后我们需要分析下TelephonyManager 所在的类,由上面的引用import为:



import android.telephony.TelephonyManager;



所以,我们可以知道完整的类路径,同时又知道方法,那么我们就开始编写hook代码了:


按照前文的三部曲:



1. MS.hookClassLoad("android.telephony.TelephonyManager"new MS.ClassLoadHook() 

 

 

2. hookimei=arg0.getMethod("getDeviceId"null);

 

 

3. System.out.println("hook imei----------->");

 

        String imei=(String) old1.invoke(arg0, arg1); 

 

  imei="999996015409081";

                             

return imei;  

 

好了,然后我们安装,开始测试吧,刚好在前面我们写的正常获取的工程里面测试,通过各种打印信息,我们可以知道结果的。




bubuko.com,布布扣



上面的打印是我们hook代码中的信息,最后一行的代码是我们测试获取imei工程中的打印,说明一切正常,我们达到了所需目的!

IMEI的获取没问题了,那么我们就开始操作IMSI吧,按照上面的思路走起~



1.MS.hookClassLoad("android.telephony.TelephonyManager"new MS.ClassLoadHook()

 

2.hookimsi=arg0.getMethod("getSubscriberId"null);

 

3. System.out.println("hook imsi----------->");

String imsi=(String) old1.invoke(arg0, arg1);

imsi="460001200505666";

return imsi;  

 


测试截图:



bubuko.com,布布扣





带入正常游戏的测试,暂时手上没有合适的包来测试,这里不再叙述,有需求的朋友可以自行测试即可。

这个插件,其实也可以做成一个界面形式的,将ImeiImsi可以做成自己想要修改的数值,有兴趣的,自己写下。


相关附件资料:


http://pan.baidu.com/s/1gd9rV2r



前面三课没有学习的,自行翻阅,一步一步来,按照文中所有的叙述操作即可,然后自己再思考扩展一下,这样才是我们这几课程的目的。






Hook的两个小插曲

标签:android   style   blog   http   color   使用   java   ar   2014   

原文地址:http://blog.csdn.net/guiguzi1110/article/details/39023349

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!