破解project 发表于 2019-1-17 04:13

Android P破解隐藏私有API禁止调用的限制

本帖最后由 破解project 于 2019-2-24 10:22 编辑

参考

http://weishu.me/2018/06/07/free-reflection-above-android-p/
https://juejin.im/post/5ba0f3f7e51d450e6f2e39e0

原理链接已经提供了,这里不做解释。维术的第二个条件和掘金的方法五,虽然提到了Unsafe,但是都没有给出源码。 现在我把源码发上来,算是这部分的最后一块拼图。


    /**
   * 用Unsafe清除classloader
   * 该方法仅对同一个类生效,所以必须在需要的类中添加使用,不可以跨类调用
   *
   * @param cls 需要清除Loader的类
   */
    @SuppressWarnings({"unchecked", "JavaReflectionMemberAccess"})
    public static void clearClassLoaderInClass(Class cls) {
      try {
            //Unsafe类
            Class unsafeClass = Class.forName("sun.misc.Unsafe");
            //取Unsafe实例字段
            Field unsafeInstanceField = unsafeClass.getDeclaredField("theUnsafe");
            //放开Unsafe实例字段权限
            unsafeInstanceField.setAccessible(true);
            //取Unsafe实例
            Object unsafeInstance = unsafeInstanceField.get(null);
            //取objectFieldOffset方法取偏移量
            Method objectFieldOffset = unsafeClass.getMethod("objectFieldOffset", Field.class);
            //Class的classLoader字段
            Field classLoaderField = Class.class.getDeclaredField("classLoader");
            //使classLoader可见
            classLoaderField.setAccessible(true);
            //取putObject方法进行置空
            Method putObject = unsafeClass.getMethod("putObject", Object.class, long.class, Object.class);
            //值为8,这里不用硬编码,看什么时候等到classLoader字段被404了再用
            long offset = (long) objectFieldOffset.invoke(unsafeInstance, classLoaderField);

            Log.i(TAG, "clearClassLoaderInClass: classLoader offset=" + offset);
            //偏移量为8处置空
            putObject.invoke(unsafeInstance, cls, offset, null);
      } catch (Throwable throwable) {
            Log.e(TAG, "clearClassLoaderInClass: ", throwable);
      }
    }用法://在当前类下
public class Reflection9 {
    private static void method() {
      //传入当前类
      clearClassLoaderInClass(Reflection9.class);
      //接下来就可以调用隐私API了...
      SystemService.restart("zygote");
    }
}

和掘金说的不同,不仅仅反射,直接调用也是可以的,没有此类限制。
请求热心值和热心回复


后续
https://www.52pojie.cn/thread-877958-1-1.html

wen704 发表于 2019-1-17 09:23

本帖最后由 wen704 于 2019-1-17 09:25 编辑

mlgmxyysd 发表于 2019-1-17 08:42
weishu链接不加https无法打开,给你提pr了。
https://github.com/nijigenirubasho/AndroidPHiddenAPI52Pojie
Android P破解隐藏私有API禁止调用的限制
这个链接,楼主的连接被转义了,没做超链接

涛之雨 发表于 2019-1-17 11:42

Hmily 发表于 2019-1-17 08:15
@破解project 发帖被拦截还是上传附件被拦截?

H大。我之前发帖子的时候也是被拦截了好几次,就是文章排版好,一点发帖。360的那个网站卫士就蹦出来。说因为当前网站访问量过大。然后让我输入验证码。
输完验证码结果发现跳转到发帖前的那个目录去了。
然后检查已发帖子,发现没传上去。
后来发现是因为当时在科·学·上·网
{:301_1004:}
上上次发主题时发生的后来没有过。。
不过从那以后。吾爱就是pac白名单里的网站了……

xzgjswb 发表于 2019-1-17 06:51

首先感谢分享,然后先观摩一番,

Hmily 发表于 2019-1-17 08:15

@破解project 发帖被拦截还是上传附件被拦截?

jinghong 发表于 2019-1-17 08:31

mlgmxyysd 发表于 2019-1-17 08:42

weishu链接不加https无法打开,给你提pr了。

破解project 发表于 2019-1-17 08:53

Hmily 发表于 2019-1-17 08:15
@破解project 发帖被拦截还是上传附件被拦截?

发帖(凑字数凑字数)

破解project 发表于 2019-1-17 08:54

mlgmxyysd 发表于 2019-1-17 08:42
weishu链接不加https无法打开,给你提pr了。

我这里打开没有问题

mlgmxyysd 发表于 2019-1-17 09:11

加了https或挂梯子都能上,裸奔上不去。

丶那年如此年少o 发表于 2019-1-17 09:35

其实楼主的链接是:
https://github.com/nijigenirubasho/AndroidPHiddenAPI52Pojie/blob/master/Android%20P破解隐藏私有API禁止调用的限制.md
这个全部都是呀,各位大佬!{:1_925:}
页: [1] 2 3
查看完整版本: Android P破解隐藏私有API禁止调用的限制