zoukankan      html  css  js  c++  java
  • Hook的两个小插曲

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

        

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

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

    好了。以下我们分开叙述~~~~

    0x1:第一个小插曲


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

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

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

     

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





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


    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);



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

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






    刚好是我们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;  

    好了,然后我们安装,開始測试吧,刚好在前面我们写的正常获取的project里面測试,通过各种信息打印。我们能够知道结果的。







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

    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;  


    測试截图:







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

    这个插件,事实上也能够做成一个界面形式的,将ImeiImsi能够做成自己想要改动的数值,有兴趣的。自己写下。


    相关附件资料:


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



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






  • 相关阅读:
    HDU 5492 Find a path
    codeforce gym 100548H The Problem to Make You Happy
    Topcoder SRM 144 Lottery
    codeforce 165E Compatible Numbers
    codeforce gym 100307H Hack Protection
    区间DP总结
    UESTC 1321 柱爷的恋爱 (区间DP)
    HDU 4283 You Are the One (区间DP)
    HDU 2476 String painter (区间DP)
    UESTC 426 Food Delivery (区间DP)
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6972119.html
Copyright © 2011-2022 走看看