加固前奏1-替换classloader

使用反射实现替换classLoader
1.获取"android.app.ActivityThread"中的"mPackages" ;

定义为arraymap<String,weakReference<LoadedApk>> mPackages

            c = Class.forName("android.app.ActivityThread");
            Field field1 = c.getDeclaredField("mPackages");
            field1.setAccessible(true);
            Object currentActivityThread = c.getMethod("currentActivityThread").invoke(null);

            ArrayMap map =(ArrayMap) field1.get(currentActivityThread);

2.获取"android.app.LoadedApk","mClassLoader"的属性;

将1中的WeakReference获取的对象传递进去获取LoadedApk,设置其值为自定义的dexClassLoader。

            c = Class.forName("android.app.LoadedApk");
            Field field = c.getDeclaredField("mClassLoader");
            field.setAccessible(true);
            field.set(weakReference.get(), classLoader);

 

posted @ 2018-12-02 10:14  Lyxin_c  阅读(163)  评论(0编辑  收藏  举报