fix(core/xposed_loader): prevent loading in sub processes

Signed-off-by: rhunk <101876869+rhunk@users.noreply.github.com>
This commit is contained in:
rhunk 2024-06-27 23:06:29 +02:00
parent 4b93ec7181
commit d8e98d575b
2 changed files with 89 additions and 83 deletions

View File

@ -1,7 +1,6 @@
package me.rhunk.snapenhance.core
import android.app.Activity
import android.app.Application
import android.content.Context
import android.content.res.Resources
import android.os.Build
@ -53,10 +52,9 @@ class SnapEnhance {
}
}
init {
Application::class.java.hook("attach", HookStage.BEFORE) { param ->
fun init(context: Context) {
appContext = ModContext(
androidContext = param.arg<Context>(0).also { classLoader = it.classLoader }
androidContext = context.also { classLoader = it.classLoader }
)
appContext.apply {
bridgeClient = BridgeClient(this)
@ -103,19 +101,10 @@ class SnapEnhance {
}.also {
appContext.log.verbose("init took ${it}ms")
}
}.onSuccess {
isBridgeInitialized = true
}.onFailure {
appContext.logCritical("Failed to initialize bridge", it)
InAppOverlay.showCrashOverlay("SnapEnhance failed to initialize. Please check logs for more details.", it)
}
}
}
hookMainActivity("onCreate") {
val isMainActivityNotNull = appContext.mainActivity != null
hookMainActivity("onPostCreate") {
appContext.mainActivity = this
if (isMainActivityNotNull || !appContext.mappings.isMappingsLoaded) return@hookMainActivity
if (!appContext.mappings.isMappingsLoaded) return@hookMainActivity
appContext.isMainActivityPaused = false
onActivityCreate()
appContext.actionManager.onNewIntent(intent)
@ -140,6 +129,13 @@ class SnapEnhance {
}
}
}
}.onSuccess {
isBridgeInitialized = true
}.onFailure {
appContext.logCritical("Failed to initialize bridge", it)
InAppOverlay.showCrashOverlay("SnapEnhance failed to initialize. Please check logs for more details.", it)
}
}
}
private fun init(scope: CoroutineScope) {

View File

@ -1,12 +1,22 @@
package me.rhunk.snapenhance.core
import android.app.Application
import de.robv.android.xposed.IXposedHookLoadPackage
import de.robv.android.xposed.XposedBridge
import de.robv.android.xposed.callbacks.XC_LoadPackage
import me.rhunk.snapenhance.common.BuildConfig
import me.rhunk.snapenhance.common.Constants
import me.rhunk.snapenhance.core.util.hook.HookStage
import me.rhunk.snapenhance.core.util.hook.hook
class XposedLoader : IXposedHookLoadPackage {
override fun handleLoadPackage(p0: XC_LoadPackage.LoadPackageParam) {
if (p0.packageName != Constants.SNAPCHAT_PACKAGE_NAME) return
SnapEnhance()
// prevent loading in sub-processes
if (p0.processName.contains(":")) return
XposedBridge.log("Loading SnapEnhance v${BuildConfig.VERSION_NAME}#${BuildConfig.GIT_HASH} (package: ${BuildConfig.APPLICATION_ID})")
Application::class.java.hook("attach", HookStage.BEFORE) { param ->
SnapEnhance().init(param.arg(0))
}
}
}