fix(youtube/navber-index-hook): patch fails on some versions

This commit is contained in:
inotia00 2023-10-03 06:41:34 +09:00
parent 7e488c5248
commit 4b93941b23
3 changed files with 39 additions and 8 deletions

View File

@ -2,7 +2,6 @@ package app.revanced.patches.youtube.utils.navbarindex.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import app.revanced.util.bytecode.isNarrowLiteralExists
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
@ -11,6 +10,10 @@ object NavButtonOnClickFingerprint : MethodFingerprint(
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
parameters = listOf("Landroid/view/View;"),
opcodes = listOf(
Opcode.NEW_INSTANCE,
null,
Opcode.INVOKE_DIRECT,
Opcode.INVOKE_VIRTUAL,
Opcode.RETURN_VOID,
Opcode.IGET_OBJECT,
Opcode.CHECK_CAST,
@ -21,6 +24,6 @@ object NavButtonOnClickFingerprint : MethodFingerprint(
Opcode.RETURN_VOID
),
customFingerprint = { methodDef, _ ->
methodDef.name == "onClick" && methodDef.isNarrowLiteralExists(16843611)
methodDef.name == "onClick"
}
)

View File

@ -0,0 +1,26 @@
package app.revanced.patches.youtube.utils.navbarindex.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import app.revanced.util.bytecode.isNarrowLiteralExists
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
object NavButtonOnClickLegacyFingerprint : MethodFingerprint(
returnType = "V",
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
parameters = listOf("Landroid/view/View;"),
opcodes = listOf(
Opcode.RETURN_VOID,
Opcode.IGET_OBJECT,
Opcode.CHECK_CAST,
Opcode.IGET_OBJECT,
Opcode.INVOKE_VIRTUAL,
Opcode.MOVE_RESULT,
Opcode.INVOKE_VIRTUAL, // insert index
Opcode.RETURN_VOID
),
customFingerprint = { methodDef, _ ->
methodDef.name == "onClick" && methodDef.isNarrowLiteralExists(16843611)
}
)

View File

@ -9,10 +9,7 @@ import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.PatchException
import app.revanced.patches.youtube.utils.fingerprints.OnBackPressedFingerprint
import app.revanced.patches.youtube.utils.navbarindex.fingerprints.MobileTopBarButtonOnClickFingerprint
import app.revanced.patches.youtube.utils.navbarindex.fingerprints.NavButtonOnClickFingerprint
import app.revanced.patches.youtube.utils.navbarindex.fingerprints.OnResumeFragmentsFingerprints
import app.revanced.patches.youtube.utils.navbarindex.fingerprints.SettingsActivityOnBackPressedFingerprint
import app.revanced.patches.youtube.utils.navbarindex.fingerprints.*
import app.revanced.util.integrations.Constants.UTILS_PATH
import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction35c
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
@ -21,6 +18,7 @@ class NavBarIndexHookPatch : BytecodePatch(
listOf(
MobileTopBarButtonOnClickFingerprint,
NavButtonOnClickFingerprint,
NavButtonOnClickLegacyFingerprint,
OnBackPressedFingerprint,
OnResumeFragmentsFingerprints,
SettingsActivityOnBackPressedFingerprint
@ -28,10 +26,14 @@ class NavBarIndexHookPatch : BytecodePatch(
) {
override fun execute(context: BytecodeContext) {
val navButtonOnClickFingerprintResult =
NavButtonOnClickFingerprint.result
?: NavButtonOnClickLegacyFingerprint.result
?: throw NavButtonOnClickFingerprint.exception
/**
* Change NavBar Index value according to selected Tab
*/
NavButtonOnClickFingerprint.result?.let {
navButtonOnClickFingerprintResult.let {
it.mutableMethod.apply {
val insertIndex = it.scanResult.patternScanResult!!.endIndex - 1
val targetString =
@ -46,7 +48,7 @@ class NavBarIndexHookPatch : BytecodePatch(
"invoke-static {v$indexRegister}, $INTEGRATIONS_CLASS_DESCRIPTOR->setCurrentNavBarIndex(I)V"
)
}
} ?: throw NavButtonOnClickFingerprint.exception
}
/**
* Set NavBar index to last index on back press