看我如何绕过android P的Restrictions on non

  • 时间:
  • 浏览:1

很久 ,怎样让do_hidden_api_checks_赋值为false很明显了,直接调用你你这个函数SetHiddenApiChecksEnabled(false)即可,不过找到你你这个函数地址也是有点儿小难度的,要找到Runtime你你这个实例的基地址上加SetHiddenApiChecksEnabled的函数偏移才行,你你这个偏移没办法硬编码,很久 从 Android N 现在始于,谷歌对NDK调用私有API的行为做了限制,导致 通过dlopen系统库和dlsym函数符号找到函数地址不可能 失效了,不过我们都儿还是可不须要通过许多有点儿的手段处置你你这个问題图片的,这里就不继续深入了,有兴趣的可不须要私下找我探讨。

实际上无论谷歌为社 么限制,主要全部都是在内核层限制,在自己的任务管理器空间里边限制一句话,理论上全部都是可不须要绕过的。

android P出了个新底部形态,限制了对hidden field 和 method 的 反射调用,那组件化哪几种是全部都是都快要挂了。我第一感觉应该是可不须要绕过的,于是马上研究了下,详情可不须要看

https://developer.android.com/preview/restrictions-non-sdk-interfaces.html

限制私有api的调用,这导致 目前几乎所有的组件化框架和多开哪几种全部都是失效,哪几种框架都反射调用了大量的私有系统api,android P目前给了我们都儿有有2个 多过渡的时间,用了私有api的暂时无需奔溃,很久在logcat全部都是给出現warning,比如:

接着查找函数引用,找到上层函数ShouldBlockAccessToMember,

runtime->AreHiddenApiChecksEnabled这里是个很关键的开关,当开关是false的以前,会不检查私有函数的调用。在

https://android.googlesource.com/platform/art/+/master/runtime/runtime.h我们都儿找到了你你这个函数的逻辑:

https://android.googlesource.com/platform/art/+/d7fbc0eb824e495b940dd739404d945a35f01fd3%5E%21/#F2(感谢武华第一时间给我发了代码diff)

你你这个提交是处置hidden API的状况的,我们都儿须要的代码差不多就在这里边了。通过逆向思维,我们都儿查找打印出warning的关键字Accessing hidden method ,可不须要定位到函数在https://android.googlesource.com/platform/art/+/master/runtime/hidden_api.h

到这里,不可能 无需再跟踪上层应用了,你你这个逻辑不可能 很清楚了,有兴趣的可不须要自己继续跟踪上去。

但以前的版本,就会出更严格的限制,使用哪几种api直接回抛Error,比如:NoSuchFieldError和NoSuchMethodError

do_hidden_api_checks_是个全局变量,继续查找do_hidden_api_checks_ 的引用,可不须要发现有个SetHiddenApiChecksEnabled的函数,