From a48c4a7cc1dbb3ecfce2e345240bca8142740b77 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Sun, 8 Oct 2023 01:45:07 +0200 Subject: [PATCH] fix(Sync for Reddit - Spoof client): Set user-agent for OAuth requests to fix login --- .../patches/reddit/customclients/Constants.kt | 6 ++++++ .../syncforreddit/api/SpoofClientPatch.kt | 17 +++++++++++++++++ .../fingerprints/LoadBrowserURLFingerprint.kt | 10 ++++++++++ 3 files changed, 33 insertions(+) create mode 100644 src/main/kotlin/app/revanced/patches/reddit/customclients/Constants.kt create mode 100644 src/main/kotlin/app/revanced/patches/reddit/customclients/syncforreddit/api/fingerprints/LoadBrowserURLFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/reddit/customclients/Constants.kt b/src/main/kotlin/app/revanced/patches/reddit/customclients/Constants.kt new file mode 100644 index 000000000..6891a97a8 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/reddit/customclients/Constants.kt @@ -0,0 +1,6 @@ +package app.revanced.patches.reddit.customclients + +object Constants { + const val OAUTH_USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) " + + "Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.60" +} \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/reddit/customclients/syncforreddit/api/SpoofClientPatch.kt b/src/main/kotlin/app/revanced/patches/reddit/customclients/syncforreddit/api/SpoofClientPatch.kt index 9e91dcc6c..aab12bdc7 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/customclients/syncforreddit/api/SpoofClientPatch.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/customclients/syncforreddit/api/SpoofClientPatch.kt @@ -10,9 +10,11 @@ import app.revanced.patcher.fingerprint.method.impl.MethodFingerprintResult import app.revanced.patcher.patch.annotation.CompatiblePackage import app.revanced.patcher.patch.annotation.Patch import app.revanced.patches.reddit.customclients.AbstractSpoofClientPatch +import app.revanced.patches.reddit.customclients.Constants.OAUTH_USER_AGENT import app.revanced.patches.reddit.customclients.syncforreddit.api.fingerprints.GetAuthorizationStringFingerprint import app.revanced.patches.reddit.customclients.syncforreddit.api.fingerprints.GetBearerTokenFingerprint import app.revanced.patches.reddit.customclients.syncforreddit.api.fingerprints.ImgurImageAPIFingerprint +import app.revanced.patches.reddit.customclients.syncforreddit.api.fingerprints.LoadBrowserURLFingerprint import app.revanced.patches.reddit.customclients.syncforreddit.detection.piracy.DisablePiracyDetectionPatch import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction @@ -33,6 +35,7 @@ import java.util.* object SpoofClientPatch : AbstractSpoofClientPatch( "http://redditsync/auth", clientIdFingerprints = listOf(GetAuthorizationStringFingerprint), + userAgentFingerprints = listOf(LoadBrowserURLFingerprint), miscellaneousFingerprints = listOf(ImgurImageAPIFingerprint) ) { override fun List.patchClientId(context: BytecodeContext) { @@ -79,4 +82,18 @@ object SpoofClientPatch : AbstractSpoofClientPatch( "const-string v1, \"https://api.imgur.com/3/image\"" ) } + + override fun List.patchUserAgent(context: BytecodeContext) { + first().let { result -> + val insertIndex = result.scanResult.patternScanResult!!.startIndex + + result.mutableMethod.addInstructions( + insertIndex, + """ + const-string v0, "$OAUTH_USER_AGENT" + invoke-virtual {p1, v0}, Landroid/webkit/WebSettings;->setUserAgentString(Ljava/lang/String;)V + """ + ) + } + } } diff --git a/src/main/kotlin/app/revanced/patches/reddit/customclients/syncforreddit/api/fingerprints/LoadBrowserURLFingerprint.kt b/src/main/kotlin/app/revanced/patches/reddit/customclients/syncforreddit/api/fingerprints/LoadBrowserURLFingerprint.kt new file mode 100644 index 000000000..67aba4295 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/reddit/customclients/syncforreddit/api/fingerprints/LoadBrowserURLFingerprint.kt @@ -0,0 +1,10 @@ +package app.revanced.patches.reddit.customclients.syncforreddit.api.fingerprints + +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import com.android.tools.smali.dexlib2.Opcode + +object LoadBrowserURLFingerprint : MethodFingerprint( + parameters = listOf("Landroid/view/View;", "Landroid/os/Bundle;"), + opcodes = listOf(Opcode.CONST_4), + strings = listOf("CustomInterface") +) \ No newline at end of file