From feb09c56f475e2537a67d3636b08737848158a8e Mon Sep 17 00:00:00 2001 From: Joey Peter Date: Mon, 27 Jun 2022 22:09:17 +0200 Subject: [PATCH] fix: some more refactoring of integrations, add hide-watermark patch (#63) * refactor: integrations * add HideWatermark patch * add hidewatermark patch * fix bug * use latest patcher version * Fix sig name * update to fingerprints * make cleaner patch * add 17.24.35 support for hide-watermark --- .../button/patch/ShortsButtonRemoverPatch.kt | 1 + .../annotations/HideWaterwarkCompatibility.kt | 13 +++++ .../fingerprints/HideWatermarkFingerprint.kt | 21 ++++++++ .../HideWatermarkParentFingerprint.kt | 21 ++++++++ .../watermark/patch/HideWatermarkPatch.kt | 51 +++++++++++++++++++ .../integrations/patch/IntegrationsPatch.kt | 6 +-- 6 files changed, 110 insertions(+), 3 deletions(-) create mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/watermark/annotations/HideWaterwarkCompatibility.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/watermark/fingerprints/HideWatermarkFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/watermark/fingerprints/HideWatermarkParentFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/watermark/patch/HideWatermarkPatch.kt diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/shorts/button/patch/ShortsButtonRemoverPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/shorts/button/patch/ShortsButtonRemoverPatch.kt index cd28fa545..c25eb6675 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/shorts/button/patch/ShortsButtonRemoverPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/shorts/button/patch/ShortsButtonRemoverPatch.kt @@ -38,6 +38,7 @@ class ShortsButtonRemoverPatch : BytecodePatch( val moveViewInstruction = buttonsViewImplementation.instructions[buttonsViewResult.patternScanResult!!.endIndex] val viewRegister = (moveViewInstruction as OneRegisterInstruction).registerA + // Save the tab enum in XGlobals to avoid smali/register workarounds tabEnumResult.mutableMethod.addInstruction( tabEnumResult.patternScanResult!!.endIndex + 1, diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/watermark/annotations/HideWaterwarkCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/watermark/annotations/HideWaterwarkCompatibility.kt new file mode 100644 index 000000000..be889b5d8 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/watermark/annotations/HideWaterwarkCompatibility.kt @@ -0,0 +1,13 @@ +package app.revanced.patches.youtube.layout.watermark.annotations + +import app.revanced.patcher.annotation.Compatibility +import app.revanced.patcher.annotation.Package + +@Compatibility( + [Package( + "com.google.android.youtube", arrayOf("17.24.34", "17.24.35") + )] +) +@Target(AnnotationTarget.CLASS) +@Retention(AnnotationRetention.RUNTIME) +internal annotation class HideWatermarkCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/watermark/fingerprints/HideWatermarkFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/watermark/fingerprints/HideWatermarkFingerprint.kt new file mode 100644 index 000000000..2591a37ea --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/watermark/fingerprints/HideWatermarkFingerprint.kt @@ -0,0 +1,21 @@ +package app.revanced.patches.youtube.layout.watermark.fingerprints + +import app.revanced.patcher.annotation.Name +import app.revanced.patcher.annotation.Version +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod +import app.revanced.patcher.fingerprint.method.annotation.MatchingMethod +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import app.revanced.patches.youtube.layout.watermark.annotations.HideWatermarkCompatibility +import org.jf.dexlib2.AccessFlags + +@Name("hide-watermark-signature") +@MatchingMethod( + "Ljvy;", "" +) +@FuzzyPatternScanMethod(3) +@HideWatermarkCompatibility +@Version("0.0.1") +object HideWatermarkFingerprint : MethodFingerprint ( + "V", AccessFlags.PUBLIC or AccessFlags.FINAL, listOf("L", "L"), null ,null, null +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/watermark/fingerprints/HideWatermarkParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/watermark/fingerprints/HideWatermarkParentFingerprint.kt new file mode 100644 index 000000000..036a315d1 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/watermark/fingerprints/HideWatermarkParentFingerprint.kt @@ -0,0 +1,21 @@ +package app.revanced.patches.youtube.layout.watermark.fingerprints + +import app.revanced.patcher.annotation.Name +import app.revanced.patcher.annotation.Version +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod +import app.revanced.patcher.fingerprint.method.annotation.MatchingMethod +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import app.revanced.patches.youtube.layout.watermark.annotations.HideWatermarkCompatibility +import org.jf.dexlib2.AccessFlags + +@Name("hide-watermark-parent-signature") +@MatchingMethod( + "Ljvy;", "" +) +@FuzzyPatternScanMethod(3) +@HideWatermarkCompatibility +@Version("0.0.1") +object HideWatermarkParentFingerprint : MethodFingerprint ( + "L", AccessFlags.PUBLIC or AccessFlags.FINAL, null, null, listOf("player_overlay_in_video_programming"), null +) diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/watermark/patch/HideWatermarkPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/watermark/patch/HideWatermarkPatch.kt new file mode 100644 index 000000000..4aaed5d57 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/watermark/patch/HideWatermarkPatch.kt @@ -0,0 +1,51 @@ +package app.revanced.patches.youtube.layout.watermark.patch + +import app.revanced.patcher.annotation.Description +import app.revanced.patcher.annotation.Name +import app.revanced.patcher.annotation.Version +import app.revanced.patcher.data.impl.BytecodeData +import app.revanced.patcher.extensions.addInstructions +import app.revanced.patcher.extensions.removeInstruction +import app.revanced.patcher.extensions.removeInstructions +import app.revanced.patcher.fingerprint.method.utils.MethodFingerprintUtils.resolve +import app.revanced.patcher.patch.PatchResult +import app.revanced.patcher.patch.PatchResultError +import app.revanced.patcher.patch.PatchResultSuccess +import app.revanced.patcher.patch.annotations.Dependencies +import app.revanced.patcher.patch.annotations.Patch +import app.revanced.patcher.patch.impl.BytecodePatch +import app.revanced.patches.youtube.layout.watermark.annotations.HideWatermarkCompatibility +import app.revanced.patches.youtube.layout.watermark.fingerprints.HideWatermarkParentFingerprint +import app.revanced.patches.youtube.layout.watermark.fingerprints.HideWatermarkFingerprint +import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch + +@Patch +@Dependencies(dependencies = [IntegrationsPatch::class]) +@Name("hide-watermark") +@Description("Hide Watermark on the page.") +@HideWatermarkCompatibility +@Version("0.0.1") +class HideWatermarkPatch : BytecodePatch( + listOf( + HideWatermarkParentFingerprint + ) +) { + override fun execute(data: BytecodeData): PatchResult { + HideWatermarkFingerprint.resolve(data, HideWatermarkParentFingerprint.result!!.classDef) + val result = HideWatermarkFingerprint.result + ?: return PatchResultError("Required parent method could not be found.") + + val method = result.mutableMethod + val line = method.implementation!!.instructions.size - 5 + + method.removeInstruction(line) + method.addInstructions( + line, """ + invoke-static {}, Lapp/revanced/integrations/patches/BrandingWaterMarkPatch;->isBrandingWatermarkShown()Z + move-result p2 + """ + ) + + return PatchResultSuccess() + } +} diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/patch/IntegrationsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/patch/IntegrationsPatch.kt index 9918e19e9..f9faf2b99 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/patch/IntegrationsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/patch/IntegrationsPatch.kt @@ -28,7 +28,7 @@ class IntegrationsPatch : BytecodePatch( ) ) { override fun execute(data: BytecodeData): PatchResult { - if (data.findClass("Lapp/revanced/integrations/utils/Globals") == null) + if (data.findClass("Lapp/revanced/integrations/utils/ReVancedUtils") == null) return PatchResultError("Integrations have not been merged yet. This patch can not succeed without the integrations.") val result = InitFingerprint.result!! @@ -40,7 +40,7 @@ class IntegrationsPatch : BytecodePatch( method.addInstructions( 0, """ invoke-static {v$count}, Lapp/revanced/integrations/sponsorblock/StringRef;->setContext(Landroid/content/Context;)V - sput-object v$count, Lapp/revanced/integrations/utils/Globals;->context:Landroid/content/Context; + sput-object v$count, Lapp/revanced/integrations/utils/ReVancedUtils;->context:Landroid/content/Context; """ ) @@ -56,7 +56,7 @@ class IntegrationsPatch : BytecodePatch( null, ImmutableMethodImplementation( 1, """ - invoke-static { }, Lapp/revanced/integrations/utils/Globals;->getAppContext()Landroid/content/Context; + invoke-static { }, Lapp/revanced/integrations/utils/ReVancedUtils;->getAppContext()Landroid/content/Context; move-result-object v0 return-object v0 """.toInstructions(), null, null