package com.lody.virtual.client.hook.patchs.pm; import android.os.IInterface; import com.lody.virtual.client.hook.base.HookBinderDelegate; import com.lody.virtual.client.hook.base.HookDelegate; import com.lody.virtual.client.hook.base.Patch; import com.lody.virtual.client.hook.base.PatchDelegate; import com.lody.virtual.client.hook.base.ResultStaticHook; import mirror.android.app.ActivityThread; /** * @author Lody */ @Patch({GetPackageInfo.class, GetApplicationInfo.class, GetActivityInfo.class, GetServiceInfo.class, GetPermissions.class, GetProviderInfo.class, GetReceiverInfo.class, GetPermissionFlags.class, CheckSignatures.class, ResolveIntent.class, ResolveService.class, ResolveContentProvider.class, QueryIntentActivities.class, QueryIntentServices.class, QueryIntentReceivers.class, QueryIntentContentProviders.class, QueryContentProviders.class, CheckPermission.class, RevokeRuntimePermission.class, SetPackageStoppedState.class, GetInstalledPackages.class, GetInstalledApplications.class, SetApplicationEnabledSetting.class, GetApplicationEnabledSetting.class, SetApplicationBlockedSettingAsUser.class, GetApplicationBlockedSettingAsUser.class, DeleteApplicationCacheFiles.class, GetInstallerPackageName.class, IsPackageAvailable.class, IsPackageForzen.class, GetComponentEnabledSetting.class, SetComponentEnabledSetting.class, GetPackageUid.class, GetPackageUidEtc.class, GetPackageGids.class, GetPackageGidsEtc.class, GetPackagesForUid.class, AddPackageToPreferred.class, RemovePackageFromPreferred.class, ClearPackagePreferredActivities.class, GetPreferredActivities.class, ClearPackagePersistentPreferredActivities.class, GetPermissionGroupInfo.class, DeletePackage.class, GetPackageInstaller.class, AddOnPermissionsChangeListener.class, RemoveOnPermissionsChangeListener.class, ActivitySupportsIntent.class, }) public final class PackageManagerPatch extends PatchDelegate<HookDelegate<IInterface>> { public PackageManagerPatch() { super(new HookDelegate<IInterface>(ActivityThread.sPackageManager.get())); } @Override protected void onBindHooks() { super.onBindHooks(); addHook(new ResultStaticHook("addPermissionAsync", true)); addHook(new ResultStaticHook("addPermission", true)); } @Override public void inject() throws Throwable { final IInterface hookedPM = getHookDelegate().getProxyInterface(); ActivityThread.sPackageManager.set(hookedPM); HookBinderDelegate pmHookBinder = new HookBinderDelegate(getHookDelegate().getBaseInterface()); pmHookBinder.copyHooks(getHookDelegate()); pmHookBinder.replaceService("package"); } @Override public boolean isEnvBad() { return getHookDelegate().getProxyInterface() != ActivityThread.sPackageManager.get(); } }