From 0dbfa6247e6e7ff51e8fee86fd798f693ab05bcf Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sat, 1 Apr 2023 17:15:28 +0400 Subject: [PATCH] fix(youtube/spoof-signature-verification): fixed subtitles in wrong location (#1833) --- ...tleWindowSettingsConstructorFingerprint.kt | 11 ++++++++++ .../patch/SpoofSignatureVerificationPatch.kt | 21 +++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/fingerprints/SubtitleWindowSettingsConstructorFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/fingerprints/SubtitleWindowSettingsConstructorFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/fingerprints/SubtitleWindowSettingsConstructorFingerprint.kt new file mode 100644 index 0000000000..0cb104f24d --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/fingerprints/SubtitleWindowSettingsConstructorFingerprint.kt @@ -0,0 +1,11 @@ +package app.revanced.patches.youtube.misc.fix.playback.fingerprints + +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint + +object SubtitleWindowSettingsConstructorFingerprint : MethodFingerprint( + parameters = listOf("I", "I", "I", "Z", "Z"), + customFingerprint = { methodDef -> + methodDef.definingClass == "Lcom/google/android/libraries/youtube/player/subtitles/model/SubtitleWindowSettings;" + && methodDef.name == "" + } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/patch/SpoofSignatureVerificationPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/patch/SpoofSignatureVerificationPatch.kt index cad32ce1db..b90d69cb47 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/patch/SpoofSignatureVerificationPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/patch/SpoofSignatureVerificationPatch.kt @@ -19,6 +19,7 @@ import app.revanced.patches.shared.settings.preference.impl.SwitchPreference import app.revanced.patches.youtube.misc.fix.playback.annotation.ProtobufSpoofCompatibility import app.revanced.patches.youtube.misc.fix.playback.fingerprints.OpenCronetDataSourceFingerprint import app.revanced.patches.youtube.misc.fix.playback.fingerprints.ProtobufParameterBuilderFingerprint +import app.revanced.patches.youtube.misc.fix.playback.fingerprints.SubtitleWindowSettingsConstructorFingerprint import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch import app.revanced.patches.youtube.misc.playertype.patch.PlayerTypeHookPatch import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch @@ -34,6 +35,7 @@ class SpoofSignatureVerificationPatch : BytecodePatch( listOf( ProtobufParameterBuilderFingerprint, OpenCronetDataSourceFingerprint, + SubtitleWindowSettingsConstructorFingerprint, ) ) { override fun execute(context: BytecodeContext): PatchResult { @@ -83,6 +85,25 @@ class SpoofSignatureVerificationPatch : BytecodePatch( } ?: return OpenCronetDataSourceFingerprint.toErrorResult() + // hook override subtitles + SubtitleWindowSettingsConstructorFingerprint.result?.let { + it.mutableMethod.apply { + addInstructions( + 0, + """ + invoke-static {p1, p2, p3, p4, p5}, $INTEGRATIONS_CLASS_DESCRIPTOR->getSubtitleWindowSettingsOverride(IIIZZ)[I + move-result-object v0 + const/4 v1, 0x0 + aget p1, v0, v1 # ap, anchor configuration + const/4 v1, 0x1 + aget p2, v0, v1 # ah, horizontal anchor + const/4 v1, 0x2 + aget p3, v0, v1 # av, vertical anchor + """ + ) + } + } ?: return SubtitleWindowSettingsConstructorFingerprint.toErrorResult() + return PatchResultSuccess() }