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



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






  • 相关阅读:
    FFTW3学习笔记2:FFTW(快速傅里叶变换)中文参考
    小程序中用rich-text来实现ul功能 (代码)
    微信小程序中如何实现列表渲染多层嵌套循环
    小程序中实现选择预览图片同时可以实现长按删除图片的代码
    微信小程序实例:获取当前城市位置及再次授权地理位置的代码实现
    微信小程序实例:实现顶部tab切换以及滑动切换时导航栏会随着移动的效果(代码)
    入门微信小程序直播
    微信小程序之登录态
    微信小程序之本地缓存
    微信小程序之页面路由
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6972119.html
Copyright © 2011-2022 走看看