From ad06b620928cf6e6954f5844409dd82dc3e7d5ad Mon Sep 17 00:00:00 2001 From: inotia00 <108592928+inotia00@users.noreply.github.com> Date: Wed, 3 Jan 2024 20:35:43 +0900 Subject: [PATCH] fix(Sanitize sharing links): patch doesn't work --- .../misc/tracking/SanitizeUrlQueryPatch.kt | 7 ++- .../tracking/AbstractSanitizeUrlQueryPatch.kt | 46 +++---------------- .../misc/tracking/SanitizeUrlQueryPatch.kt | 42 ++++++++++++++++- 3 files changed, 53 insertions(+), 42 deletions(-) diff --git a/src/main/kotlin/app/revanced/patches/music/misc/tracking/SanitizeUrlQueryPatch.kt b/src/main/kotlin/app/revanced/patches/music/misc/tracking/SanitizeUrlQueryPatch.kt index 67a657aa7..e83fc7355 100644 --- a/src/main/kotlin/app/revanced/patches/music/misc/tracking/SanitizeUrlQueryPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/tracking/SanitizeUrlQueryPatch.kt @@ -18,7 +18,12 @@ import app.revanced.patches.shared.patch.tracking.AbstractSanitizeUrlQueryPatch ) @Suppress("unused") object SanitizeUrlQueryPatch : AbstractSanitizeUrlQueryPatch( - "$MISC_PATH/SanitizeUrlQueryPatch;" + "$MISC_PATH/SanitizeUrlQueryPatch;", + listOf( + CopyTextEndpointFingerprint, + ShareLinkFormatterFingerprint + ), + null ) { override fun execute(context: BytecodeContext) { super.execute(context) diff --git a/src/main/kotlin/app/revanced/patches/shared/patch/tracking/AbstractSanitizeUrlQueryPatch.kt b/src/main/kotlin/app/revanced/patches/shared/patch/tracking/AbstractSanitizeUrlQueryPatch.kt index 9dbe0446e..f9fc7b392 100644 --- a/src/main/kotlin/app/revanced/patches/shared/patch/tracking/AbstractSanitizeUrlQueryPatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/patch/tracking/AbstractSanitizeUrlQueryPatch.kt @@ -3,50 +3,21 @@ package app.revanced.patches.shared.patch.tracking import app.revanced.patcher.data.BytecodeContext import app.revanced.patcher.extensions.InstructionExtensions.addInstructions import app.revanced.patcher.extensions.InstructionExtensions.getInstruction -import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patcher.patch.BytecodePatch -import app.revanced.patches.shared.fingerprints.tracking.CopyTextEndpointFingerprint import app.revanced.util.exception -import com.android.tools.smali.dexlib2.Opcode -import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction -import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction abstract class AbstractSanitizeUrlQueryPatch( private val descriptor: String, - private val additionalFingerprints: Set = emptySet() + private val sharedFingerprints: List, + private val additionalFingerprints: List? = null ) : BytecodePatch( buildSet { - add(CopyTextEndpointFingerprint) - additionalFingerprints.let(::addAll) + addAll(sharedFingerprints) + additionalFingerprints?.let(::addAll) } ) { - private fun MethodFingerprint.additionalInvoke() { - result?.let { - it.mutableMethod.apply { - for ((index, instruction) in implementation!!.instructions.withIndex()) { - if (instruction.opcode != Opcode.INVOKE_VIRTUAL) - continue - - if ((instruction as ReferenceInstruction).reference.toString() != "Landroid/content/Intent;->putExtra(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;") - continue - - if (getInstruction(index + 1).opcode != Opcode.GOTO) - continue - - val invokeInstruction = instruction as FiveRegisterInstruction - - replaceInstruction( - index, - "invoke-static {v${invokeInstruction.registerC}, v${invokeInstruction.registerD}, v${invokeInstruction.registerE}}, " - + "$descriptor->stripQueryParameters(Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;)V" - ) - } - } - } ?: throw exception - } - private fun MethodFingerprint.invoke() { result?.let { it.mutableMethod.apply { @@ -64,12 +35,7 @@ abstract class AbstractSanitizeUrlQueryPatch( } override fun execute(context: BytecodeContext) { - CopyTextEndpointFingerprint.invoke() - - if (additionalFingerprints.isNotEmpty()) { - additionalFingerprints.forEach { fingerprint -> - fingerprint.additionalInvoke() - } - } + for (fingerprint in sharedFingerprints) + fingerprint.invoke() } } \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/tracking/SanitizeUrlQueryPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/tracking/SanitizeUrlQueryPatch.kt index b380a274f..eb968a552 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/tracking/SanitizeUrlQueryPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/tracking/SanitizeUrlQueryPatch.kt @@ -1,13 +1,20 @@ package app.revanced.patches.youtube.misc.tracking import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.InstructionExtensions.getInstruction +import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction import app.revanced.patcher.patch.annotation.CompatiblePackage import app.revanced.patcher.patch.annotation.Patch +import app.revanced.patches.shared.fingerprints.tracking.CopyTextEndpointFingerprint import app.revanced.patches.shared.patch.tracking.AbstractSanitizeUrlQueryPatch import app.revanced.patches.youtube.misc.tracking.fingerprints.ShareLinkFormatterFingerprint import app.revanced.patches.youtube.misc.tracking.fingerprints.SystemShareLinkFormatterFingerprint import app.revanced.patches.youtube.utils.integrations.Constants.MISC_PATH import app.revanced.patches.youtube.utils.settings.SettingsPatch +import app.revanced.util.exception +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction @Patch( name = "Sanitize sharing links", @@ -43,14 +50,47 @@ import app.revanced.patches.youtube.utils.settings.SettingsPatch @Suppress("unused") object SanitizeUrlQueryPatch : AbstractSanitizeUrlQueryPatch( "$MISC_PATH/SanitizeUrlQueryPatch;", - setOf( + listOf(CopyTextEndpointFingerprint), + listOf( ShareLinkFormatterFingerprint, SystemShareLinkFormatterFingerprint ) ) { + private const val INTEGRATIONS_CLASS_DESCRIPTOR = + "$MISC_PATH/SanitizeUrlQueryPatch;" + override fun execute(context: BytecodeContext) { super.execute(context) + arrayOf( + ShareLinkFormatterFingerprint, + SystemShareLinkFormatterFingerprint + ).forEach { fingerprint -> + fingerprint.result?.let { + it.mutableMethod.apply { + for ((index, instruction) in implementation!!.instructions.withIndex()) { + if (instruction.opcode != Opcode.INVOKE_VIRTUAL) + continue + + if ((instruction as ReferenceInstruction).reference.toString() != "Landroid/content/Intent;->putExtra(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;") + continue + + if (getInstruction(index + 1).opcode != Opcode.GOTO) + continue + + val invokeInstruction = instruction as FiveRegisterInstruction + + replaceInstruction( + index, + "invoke-static {v${invokeInstruction.registerC}, v${invokeInstruction.registerD}, v${invokeInstruction.registerE}}, " + + "$INTEGRATIONS_CLASS_DESCRIPTOR->stripQueryParameters(Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;)V" + ) + } + } + } ?: throw fingerprint.exception + } + + /** * Add settings */