mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-06 18:55:35 +08:00
Fix cannot hook system framework bug and added zygote name in log
This commit is contained in:
@@ -99,7 +99,7 @@ class YukiMemberHookCreater(@PublishedApi internal val packageParam: PackagePara
|
|||||||
* @return [MemberHookCreater.Result]
|
* @return [MemberHookCreater.Result]
|
||||||
*/
|
*/
|
||||||
inline fun injectMember(priority: Int = PRIORITY_DEFAULT, tag: String = "Default", initiate: MemberHookCreater.() -> Unit) =
|
inline fun injectMember(priority: Int = PRIORITY_DEFAULT, tag: String = "Default", initiate: MemberHookCreater.() -> Unit) =
|
||||||
MemberHookCreater(priority, tag, packageParam.packageName).apply(initiate).apply { preHookMembers.add(this) }.build()
|
MemberHookCreater(priority, tag, packageParam.exhibitName).apply(initiate).apply { preHookMembers.add(this) }.build()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hook 执行入口
|
* Hook 执行入口
|
||||||
@@ -123,7 +123,7 @@ class YukiMemberHookCreater(@PublishedApi internal val packageParam: PackagePara
|
|||||||
}
|
}
|
||||||
isDisableCreaterRunHook.not() && hookClass.instance == null ->
|
isDisableCreaterRunHook.not() && hookClass.instance == null ->
|
||||||
if (onHookClassNotFoundFailureCallback == null)
|
if (onHookClassNotFoundFailureCallback == null)
|
||||||
yLoggerE(msg = "[${packageParam.packageName}] HookClass [${hookClass.name}] not found", e = hookClass.throwable)
|
yLoggerE(msg = "[${packageParam.exhibitName}] HookClass [${hookClass.name}] not found", e = hookClass.throwable)
|
||||||
else onHookClassNotFoundFailureCallback?.invoke(hookClass.throwable ?: Throwable("[${hookClass.name}] not found"))
|
else onHookClassNotFoundFailureCallback?.invoke(hookClass.throwable ?: Throwable("[${hookClass.name}] not found"))
|
||||||
}
|
}
|
||||||
}.start()
|
}.start()
|
||||||
|
@@ -226,7 +226,7 @@ class YukiResourcesHookCreater(private val packageParam: PackageParam, @Publishe
|
|||||||
* @param msg 调试日志内容
|
* @param msg 调试日志内容
|
||||||
*/
|
*/
|
||||||
private fun onHookLogMsg(msg: String) {
|
private fun onHookLogMsg(msg: String) {
|
||||||
if (YukiHookAPI.Configs.isDebug) yLoggerI(msg = "[${packageParam.packageName}] $msg")
|
if (YukiHookAPI.Configs.isDebug) yLoggerI(msg = "[${packageParam.exhibitName}] $msg")
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -55,6 +55,14 @@ import com.highcapable.yukihookapi.hook.xposed.prefs.YukiHookModulePrefs
|
|||||||
*/
|
*/
|
||||||
open class PackageParam(@PublishedApi internal var wrapper: PackageParamWrapper? = null) {
|
open class PackageParam(@PublishedApi internal var wrapper: PackageParamWrapper? = null) {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用于展示的 APP 包名
|
||||||
|
* @return [String]
|
||||||
|
*/
|
||||||
|
@PublishedApi
|
||||||
|
internal val exhibitName
|
||||||
|
get() = wrapper?.exhibitName ?: "unknown"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取当前 Hook APP 的 [ClassLoader]
|
* 获取当前 Hook APP 的 [ClassLoader]
|
||||||
* @return [ClassLoader]
|
* @return [ClassLoader]
|
||||||
|
@@ -56,6 +56,12 @@ class PackageParamWrapper(
|
|||||||
var appResources: YukiResources? = null
|
var appResources: YukiResources? = null
|
||||||
) {
|
) {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用于展示的 APP 包名
|
||||||
|
* @return [String]
|
||||||
|
*/
|
||||||
|
internal val exhibitName get() = if (type == HookEntryType.ZYGOTE) "android-zygote" else packageName
|
||||||
|
|
||||||
override fun toString() =
|
override fun toString() =
|
||||||
"PackageParamWrapper [type] $type [packageName] $packageName [processName] $processName [appInfo] $appInfo [appResources] $appResources"
|
"PackageParamWrapper [type] $type [packageName] $exhibitName [processName] $processName [appInfo] $appInfo [appResources] $appResources"
|
||||||
}
|
}
|
@@ -160,8 +160,8 @@ object YukiHookBridge {
|
|||||||
*/
|
*/
|
||||||
private fun assignWrapper(
|
private fun assignWrapper(
|
||||||
type: HookEntryType,
|
type: HookEntryType,
|
||||||
packageName: String,
|
packageName: String?,
|
||||||
processName: String = "",
|
processName: String? = "",
|
||||||
appClassLoader: ClassLoader? = null,
|
appClassLoader: ClassLoader? = null,
|
||||||
appInfo: ApplicationInfo? = null,
|
appInfo: ApplicationInfo? = null,
|
||||||
appResources: YukiResources? = null
|
appResources: YukiResources? = null
|
||||||
@@ -169,16 +169,16 @@ object YukiHookBridge {
|
|||||||
if (packageParamWrappers[packageName] == null)
|
if (packageParamWrappers[packageName] == null)
|
||||||
PackageParamWrapper(
|
PackageParamWrapper(
|
||||||
type = type,
|
type = type,
|
||||||
packageName = packageName,
|
packageName = packageName ?: SYSTEM_FRAMEWORK_NAME,
|
||||||
processName = processName,
|
processName = processName ?: SYSTEM_FRAMEWORK_NAME,
|
||||||
appClassLoader = appClassLoader ?: XposedBridge.BOOTCLASSLOADER,
|
appClassLoader = appClassLoader ?: XposedBridge.BOOTCLASSLOADER,
|
||||||
appInfo = appInfo,
|
appInfo = appInfo,
|
||||||
appResources = appResources
|
appResources = appResources
|
||||||
).also { packageParamWrappers[packageName] = it }
|
).also { packageParamWrappers[packageName ?: SYSTEM_FRAMEWORK_NAME] = it }
|
||||||
else packageParamWrappers[packageName]?.also {
|
else packageParamWrappers[packageName]?.also {
|
||||||
it.type = type
|
it.type = type
|
||||||
if (packageName.isNotBlank()) it.packageName = packageName
|
if (packageName?.isNotBlank() == true) it.packageName = packageName
|
||||||
if (processName.isNotBlank()) it.processName = processName
|
if (processName?.isNotBlank() == true) it.processName = processName
|
||||||
if (appClassLoader != null) it.appClassLoader = appClassLoader
|
if (appClassLoader != null) it.appClassLoader = appClassLoader
|
||||||
if (appInfo != null) it.appInfo = appInfo
|
if (appInfo != null) it.appInfo = appInfo
|
||||||
if (appResources != null) it.appResources = appResources
|
if (appResources != null) it.appResources = appResources
|
||||||
@@ -230,22 +230,15 @@ object YukiHookBridge {
|
|||||||
resparam: XC_InitPackageResources.InitPackageResourcesParam? = null
|
resparam: XC_InitPackageResources.InitPackageResourcesParam? = null
|
||||||
) {
|
) {
|
||||||
if (isMiuiCatcherPatch(packageName = lpparam?.packageName ?: resparam?.packageName).not()) when {
|
if (isMiuiCatcherPatch(packageName = lpparam?.packageName ?: resparam?.packageName).not()) when {
|
||||||
isZygoteLoaded -> {
|
isZygoteLoaded -> assignWrapper(HookEntryType.ZYGOTE, SYSTEM_FRAMEWORK_NAME, SYSTEM_FRAMEWORK_NAME)
|
||||||
if (isPackageLoaded(SYSTEM_FRAMEWORK_NAME, HookEntryType.ZYGOTE).not())
|
lpparam != null ->
|
||||||
assignWrapper(HookEntryType.ZYGOTE, SYSTEM_FRAMEWORK_NAME, SYSTEM_FRAMEWORK_NAME)
|
if (isPackageLoaded(lpparam.packageName, HookEntryType.PACKAGE).not())
|
||||||
|
assignWrapper(HookEntryType.PACKAGE, lpparam.packageName, lpparam.processName, lpparam.classLoader, lpparam.appInfo)
|
||||||
else null
|
else null
|
||||||
}
|
resparam != null ->
|
||||||
lpparam != null -> {
|
|
||||||
if (lpparam.packageName != null && lpparam.processName != null && lpparam.appInfo != null && lpparam.classLoader != null &&
|
|
||||||
isPackageLoaded(lpparam.packageName, HookEntryType.PACKAGE).not()
|
|
||||||
) assignWrapper(HookEntryType.PACKAGE, lpparam.packageName, lpparam.processName, lpparam.classLoader, lpparam.appInfo)
|
|
||||||
else null
|
|
||||||
}
|
|
||||||
resparam != null -> {
|
|
||||||
if (isPackageLoaded(resparam.packageName, HookEntryType.RESOURCES).not())
|
if (isPackageLoaded(resparam.packageName, HookEntryType.RESOURCES).not())
|
||||||
assignWrapper(HookEntryType.RESOURCES, resparam.packageName, appResources = YukiResources.createFromXResources(resparam.res))
|
assignWrapper(HookEntryType.RESOURCES, resparam.packageName, appResources = YukiResources.createFromXResources(resparam.res))
|
||||||
else null
|
else null
|
||||||
}
|
|
||||||
else -> null
|
else -> null
|
||||||
}?.let { YukiHookAPI.onXposedLoaded(it) }
|
}?.let { YukiHookAPI.onXposedLoaded(it) }
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user