From ffc141346c39fc2b8004c4883553989fce685395 Mon Sep 17 00:00:00 2001 From: fankesyooni Date: Sun, 29 May 2022 01:15:44 +0800 Subject: [PATCH] Fix some device system's "classLoader" maybe wrong in "XC_InitPackageResources.InitPackageResourcesParam" --- .../hook/xposed/bridge/YukiHookBridge.kt | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/bridge/YukiHookBridge.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/bridge/YukiHookBridge.kt index 5ff6edec..6e2d107e 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/bridge/YukiHookBridge.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/bridge/YukiHookBridge.kt @@ -56,6 +56,7 @@ import com.highcapable.yukihookapi.hook.xposed.bridge.dummy.YukiModuleResources import com.highcapable.yukihookapi.hook.xposed.bridge.dummy.YukiResources import com.highcapable.yukihookapi.hook.xposed.bridge.inject.YukiHookBridge_Injector import com.highcapable.yukihookapi.hook.xposed.channel.YukiHookDataChannel +import dalvik.system.PathClassLoader import de.robv.android.xposed.* import de.robv.android.xposed.callbacks.XC_InitPackageResources import de.robv.android.xposed.callbacks.XC_LoadPackage @@ -184,6 +185,8 @@ object YukiHookBridge { /** * 创建、修改 [PackageParamWrapper] + * + * 忽略在 [type] 不为 [HookEntryType.ZYGOTE] 时 [appClassLoader] 为空导致首次使用 [XposedBridge.BOOTCLASSLOADER] 装载的问题 * @param type 当前正在进行的 Hook 类型 * @param packageName 包名 * @param processName 当前进程名 @@ -201,19 +204,21 @@ object YukiHookBridge { appResources: YukiResources? = null ) = run { if (packageParamWrappers[packageName] == null) - PackageParamWrapper( - type = type, - packageName = packageName ?: SYSTEM_FRAMEWORK_NAME, - processName = processName ?: SYSTEM_FRAMEWORK_NAME, - appClassLoader = appClassLoader ?: XposedBridge.BOOTCLASSLOADER, - appInfo = appInfo, - appResources = appResources - ).also { packageParamWrappers[packageName ?: SYSTEM_FRAMEWORK_NAME] = it } + if (type == HookEntryType.ZYGOTE || appClassLoader != null) + PackageParamWrapper( + type = type, + packageName = packageName ?: SYSTEM_FRAMEWORK_NAME, + processName = processName ?: SYSTEM_FRAMEWORK_NAME, + appClassLoader = appClassLoader ?: XposedBridge.BOOTCLASSLOADER, + appInfo = appInfo, + appResources = appResources + ).also { packageParamWrappers[packageName ?: SYSTEM_FRAMEWORK_NAME] = it } + else null else packageParamWrappers[packageName]?.also { it.type = type if (packageName?.isNotBlank() == true) it.packageName = packageName if (processName?.isNotBlank() == true) it.processName = processName - if (appClassLoader != null) it.appClassLoader = appClassLoader + if (appClassLoader != null && (type == HookEntryType.ZYGOTE || appClassLoader is PathClassLoader)) it.appClassLoader = appClassLoader if (appInfo != null) it.appInfo = appInfo if (appResources != null) it.appResources = appResources }