首页
社区
课程
招聘
[求助]利用AndFix去Hook android库方法出现异常
发表于: 2017-9-19 20:00 3394

[求助]利用AndFix去Hook android库方法出现异常

2017-9-19 20:00
3394
环境:Android 7.0  ART
尝试Hook的的方法: android.widget.TextView中的
public final void setText(CharSequence text)
我写的测试demo中替换上述方法的代码如下:
public hook(){
    //保存原方法
    Class clazz = Class.forName("android.widget.TextView");
    Method method = clazz.getDeclaredMethod("setText", CharSequence.class)
    replaceMethod(getClassLoader(), MainActivity.class.getName(), "orig", method);//orig是本地写的一个方法,用来保存被替换的原方法
    
    //替换成新方法
    method = MainActivity.class.getDeclaredMethod("newSetText", CharSequence.class);//newSetText是自己写的方法
    replaceMethod(getClassLoader(), clazz.getName(), "setText", method);
}

private void replaceMethod(ClassLoader classLoader, String clz, String meth, Method method) {    
      try {        
            Class<?> clazz = classLoader.loadClass(clz);        
            if(clazz != null) {            
                              clazz = AndFix.initTargetClass(clazz);            
                              Method src = clazz.getDeclaredMethod(meth, method.getParameterTypes());            
                              AndFix.addReplaceMethod(src, method);        
            }    
          } catch (Exception e) { Log.e(TAG, "replaceMethod", e);  }
}
AndFix这个类及其他的jni里的函数都是从AndFix里直接拖过来的,上述代码是参考了
https://bbs.pediy.com/thread-220838.htm这位大神的帖子里的。然后整个代码都没有出异常,但是运行以后出了异常,如下
com.example.git.andfixtest E/AndroidRuntime: FATAL EXCEPTION: main
                        Process: com.example.git.andfixtest, PID: 19530
                        java.lang.ClassCastException: android.support.v7.widget.AppCompatButton cannot be cast to android.view.View
                                                      at android.animation.StateListAnimator.getTarget(StateListAnimator.java:104)
                                                      at android.animation.StateListAnimator.start(StateListAnimator.java:186)
                                                      at android.animation.StateListAnimator.setState(StateListAnimator.java:181)
                                                      at android.view.View.drawableStateChanged(View.java:19159)

希望大神们能指点一二

[峰会]看雪.第八届安全开发者峰会10月23日上海龙之梦大酒店举办!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 187
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
Andfix有一个初始化的方法,不知道你有没有去调用。
AndFix.setup();
你试下先初始化,再去Hook。
2017-9-22 14:38
0
雪    币: 3549
活跃值: (941)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
3
 

我也遇到这个问题,系统的类的类加载器是java.lang.BootClassLoader,应用的类加载器是dalvik.system.PathClassLoader,在方法替换了之后去调用的时候,就会出现类依赖的错误,所以用andfix这种在底层把属性给改了的方法应该不行

ava.lang.IncompatibleClassChangeError: The method 'void android.widget.TextView.setText(java.lang.CharSequence)' was expected to be of type direct but instead was found to be of type virtual (declaration of 'java.lang.reflect.ArtMethod' appears in /system/framework/core-libart.jar)
2017-10-8 16:24
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
已经调用了,调试下来,JNI的方法也都执行了,然后在所有代码都执行完后出现了这个异常。
2017-10-12 14:32
0
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
把你的方法贴出来
2017-10-12 16:46
0
游客
登录 | 注册 方可回帖
返回
//