This commit is contained in:
LoveSy 2021-10-29 18:41:08 +08:00 committed by GitHub
parent 330747aca1
commit 5f14670bd9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 32 additions and 25 deletions

View File

@ -46,6 +46,7 @@ public class ParasiticManagerHooker {
private synchronized static PackageInfo getManagerPkgInfo(ApplicationInfo appInfo) { private synchronized static PackageInfo getManagerPkgInfo(ApplicationInfo appInfo) {
if (managerPkgInfo == null) { if (managerPkgInfo == null) {
try {
Context ctx = ActivityThread.currentActivityThread().getSystemContext(); Context ctx = ActivityThread.currentActivityThread().getSystemContext();
var sourceDir = "/proc/self/fd/" + managerFd; var sourceDir = "/proc/self/fd/" + managerFd;
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) { if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) {
@ -70,6 +71,9 @@ public class ParasiticManagerHooker {
newAppInfo.processName = appInfo.processName; newAppInfo.processName = appInfo.processName;
HiddenApiBridge.ApplicationInfo_credentialProtectedDataDir(newAppInfo, HiddenApiBridge.ApplicationInfo_credentialProtectedDataDir(appInfo)); HiddenApiBridge.ApplicationInfo_credentialProtectedDataDir(newAppInfo, HiddenApiBridge.ApplicationInfo_credentialProtectedDataDir(appInfo));
newAppInfo.uid = appInfo.uid; newAppInfo.uid = appInfo.uid;
} catch (Throwable e) {
Utils.logE("get manager pkginfo", e);
}
} }
return managerPkgInfo; return managerPkgInfo;
} }
@ -94,7 +98,8 @@ public class ParasiticManagerHooker {
LoadedApk.class, "getClassLoader", new XC_MethodHook() { LoadedApk.class, "getClassLoader", new XC_MethodHook() {
@Override @Override
protected void afterHookedMethod(MethodHookParam param) { protected void afterHookedMethod(MethodHookParam param) {
if (XposedHelpers.getObjectField(param.thisObject, "mApplicationInfo") == getManagerPkgInfo(null).applicationInfo) { var pkgInfo = getManagerPkgInfo(null);
if (pkgInfo != null && XposedHelpers.getObjectField(param.thisObject, "mApplicationInfo") == pkgInfo.applicationInfo) {
InstallerVerifier.sendBinderToManager((ClassLoader) param.getResult(), managerService.asBinder()); InstallerVerifier.sendBinderToManager((ClassLoader) param.getResult(), managerService.asBinder());
unhooks[0].unhook(); unhooks[0].unhook();
} }
@ -107,6 +112,7 @@ public class ParasiticManagerHooker {
for (var i = 0; i < param.args.length; ++i) { for (var i = 0; i < param.args.length; ++i) {
if (param.args[i] instanceof ActivityInfo) { if (param.args[i] instanceof ActivityInfo) {
var pkgInfo = getManagerPkgInfo(((ActivityInfo) param.args[i]).applicationInfo); var pkgInfo = getManagerPkgInfo(((ActivityInfo) param.args[i]).applicationInfo);
if (pkgInfo == null) return;
for (var activity : pkgInfo.activities) { for (var activity : pkgInfo.activities) {
if ("org.lsposed.manager.ui.activity.MainActivity".equals(activity.name)) { if ("org.lsposed.manager.ui.activity.MainActivity".equals(activity.name)) {
activity.applicationInfo = pkgInfo.applicationInfo; activity.applicationInfo = pkgInfo.applicationInfo;
@ -157,8 +163,9 @@ public class ParasiticManagerHooker {
ctxIdx = i; ctxIdx = i;
} else if (arg instanceof ProviderInfo) info = (ProviderInfo) arg; } else if (arg instanceof ProviderInfo) info = (ProviderInfo) arg;
} }
if (ctx != null && info != null) { var pkgInfo = getManagerPkgInfo(null);
var packageName = getManagerPkgInfo(null).applicationInfo.packageName; if (ctx != null && info != null && pkgInfo != null) {
var packageName = pkgInfo.applicationInfo.packageName;
if (!info.applicationInfo.packageName.equals(packageName)) return; if (!info.applicationInfo.packageName.equals(packageName)) return;
if (originalContext == null) { if (originalContext == null) {
info.applicationInfo.packageName = packageName + ".origin"; info.applicationInfo.packageName = packageName + ".origin";