Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

支持hook代码与目标方法处于相同DexClassLoader #29

Open
rk700 opened this issue Sep 7, 2017 · 7 comments
Open

支持hook代码与目标方法处于相同DexClassLoader #29

rk700 opened this issue Sep 7, 2017 · 7 comments

Comments

@rk700
Copy link
Member

rk700 commented Sep 7, 2017

设计之初是参考xposed,hook代码采用插件的形式,运行时通过DexClassLoader动态加载。目前基本没有问题

但是现在有些人要把hook代码与app放在一起,这样做目前是不支持的。具体原因和能否解决,还得等将来有时间再去看。用这个issue统一跟踪。

@rk700
Copy link
Member Author

rk700 commented Sep 7, 2017

开了个新分支 https://github.com/rk700/YAHFA/tree/internalHook

其中就是在demo Application创建时直接进行hook,不使用DexClassLoader。

7.0以上需要改hookMethod的hotness还没有试,但是在x86 avd 5.0-6.0上试验都ok

@svengong
Copy link

我适配了7.0以上的arm和aarch64,等x86弄完我就提过来

@netstu
Copy link

netstu commented Oct 19, 2017

#33

@rk700 一样的问题,我的机器是一加3t 7.1.1

@cheasonxie
Copy link

魅族7.1.1 hook之后前面几次还可以,到后面提示IncompatibleClassChangeError:
java.lang.IncompatibleClassChangeError: The method ** was expected to be of type static but instead was found to be of type virtual (declaration of ' appears in /data/app//base.apk:classes4.dex)

@conghongjie
Copy link

conghongjie commented May 15, 2018

相同DexClassLoader中,用直接调用findAndBackupAndHook的方式hook FileInputStream.open(String)函数,发生崩溃或备份函数失效的问题。

【问题现象】
在master分支上,直接调用findAndBackupAndHook的方式hook,1s后,有IllegalAccessError异常;
但在master分支上,用dex的方式hook,无异常;
在internalHook分支上,直接调用findAndBackupAndHook的方式hook,1s后,backMethod失效;

【问题机型】
我手里的两台7.1的手机,都有问题,没测试其他手机

【实现Hook】
public static String className = "java.io.FileInputStream";
public static String methodName = "open";
public static String methodSig = "(Ljava/lang/String;)V";
public static void hook(Object thiz, String name) {
Log.e("Elvis","FileInputStream.open start:"+System.currentTimeMillis() + name);
backup(thiz, name);
Log.e("Elvis","FileInputStream.open end:"+System.currentTimeMillis());
}
public static void backup(Object thiz, String name) {
Log.d("Elvis", "FileInputStream.open 这个日志出现了就爆炸了");
}

【IllegalAccessError异常】
Process: lab.galaxy.yahfa.demoApp, PID: 24142
java.lang.IllegalAccessError: Method 'void java.io.FileInputStream.open(java.lang.String)' is inaccessible to class 'lab.galaxy.yahfa.demoApp.elvis.Hook_FileInputStream_open' (declaration of 'lab.galaxy.yahfa.demoApp.elvis.Hook_FileInputStream_open' appears in /data/app/lab.galaxy.yahfa.demoApp-1/base.apk)
at lab.galaxy.yahfa.demoApp.elvis.Hook_FileInputStream_open.hook(Hook_FileInputStream_open.java:17)
at java.io.FileInputStream.(FileInputStream.java:146)
at lab.galaxy.yahfa.demoApp.MainActivity.getCPUThreads(MainActivity.java:75)
at lab.galaxy.yahfa.demoApp.MainActivity$1$1.run(MainActivity.java:49)
at java.lang.Thread.run(Thread.java:760)

【backMethod失效】
FileInputStream.open start:1526478168902/proc/13101/task/13101/stat
FileInputStream.open 这个日志出现了就爆炸了
FileInputStream.open end:1526478168903
FileInputStream.open start:1526478168905/proc/13101/task/13106/stat
FileInputStream.open 这个日志出现了就爆炸了
FileInputStream.open end:1526478168905
FileInputStream.open start:1526478168906/proc/13101/task/13107/stat
FileInputStream.open 这个日志出现了就爆炸了
FileInputStream.open end:1526478168906
......
@rk700 应该也是hotness的问题

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants
@netstu @rk700 @svengong @cheasonxie @conghongjie and others