wlb1001? ? hook 第三方app 签名信息
try { ? ? ? ? ? ? Class<?> activityThreadClass = Class.forName("android.app.ActivityThread"); ? ? ? ? ? ? Method currentActivityThreadMethod = activityThreadClass.getDeclaredMethod("currentActivityThread"); ? ? ? ? ? ? Object activityThreadObj = currentActivityThreadMethod.invoke(null);
? ? ? ? ? ? Method getPackageManagerMethod = activityThreadClass.getDeclaredMethod("getPackageManager"); ? ? ? ? ? ? getPackageManagerMethod.setAccessible(true); ? ? ? ? ? ? Object packageManagerObj = getPackageManagerMethod.invoke(activityThreadObj);
? ? ? ? ? ? Class<?> iPackageManagerInterface = Class.forName("android.content.pm.IPackageManager"); ? ? ? ? ? ? Object proxy = Proxy.newProxyInstance( ? ? ? ? ? ? ? ? ? ? iPackageManagerInterface.getClassLoader(), ? ? ? ? ? ? ? ? ? ? new Class<?>[]{iPackageManagerInterface}, ? ? ? ? ? ? ? ? ? ? new MyInvocationHandler(packageManagerObj)); ? ? ? ? ? ? Field sPackageManagerField = activityThreadClass.getDeclaredField("sPackageManager"); ? ? ? ? ? ? sPackageManagerField.setAccessible(true); ? ? ? ? ? ? sPackageManagerField.set(activityThreadObj, proxy); ? ? ? ? ? ? // 2. 替换 ApplicationPackageManager里面的 mPM对象 ? ? ? ? ? ? PackageManager pm = context.getPackageManager(); ? ? ? ? ? ? Field mPmField = pm.getClass().getDeclaredField("mPM"); ? ? ? ? ? ? mPmField.setAccessible(true); ? ? ? ? ? ? mPmField.set(pm, proxy); ? ? ? ? } catch (Exception e) { ? ? ? ? }
|