总结一下各路绕过反射限制的方法

为了防止app调用系统的hide方法,android 9.0对反射的调用做了一个限制,每个方法或者变量在编译后在flag里表示了该方法是hide还是公开,通过回溯调用栈判断该调用者的类是否是BootstrapClassLoader 如果是则信任

应对方法

1,定义和系统相同类,骗过编译器,直接调用隐藏方法

2. jni修改 javaruntime里的 隐藏api策略, hidden_api_policy_

3.既然只检查调用类是否是是系统类,那么使用反射去调用反射方法,两次反射,第二次调用系统方法,在检查的时候会发现调用者反射工具类,而反射工具类是系统方法

4。 修改 javaruntime .里的豁免条件GetHiddenApiExemptions ,可以使用反射+反射

参考地址文章

http://weishu.me/2019/03/16/another-free-reflection-above-android-p/

http://weishu.me/2018/06/07/free-reflection-above-android-p/

开源库

https://github.com/tiann/FreeReflection