From 6f5e007a78dc5e1ed3935a3436ac1de7eb719ea1 Mon Sep 17 00:00:00 2001 From: Aunali321 <48486084+Aunali321@users.noreply.github.com> Date: Sat, 1 Jul 2023 05:52:42 +0530 Subject: [PATCH] feat(baconreader): add `change-oauth-client-id` patch (#2535) Co-authored-by: oSumAtrIX --- .../GetAuthorizationUrlFingerprint.kt | 7 +++ .../fingerprints/GetClientIdFingerprint.kt | 12 +++++ .../fingerprints/RequestTokenFingerprint.kt | 7 +++ .../api/patch/ChangeOAuthClientIdPatch.kt | 47 +++++++++++++++++++ 4 files changed, 73 insertions(+) create mode 100644 src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/api/fingerprints/GetAuthorizationUrlFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/api/fingerprints/GetClientIdFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/api/fingerprints/RequestTokenFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/api/patch/ChangeOAuthClientIdPatch.kt diff --git a/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/api/fingerprints/GetAuthorizationUrlFingerprint.kt b/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/api/fingerprints/GetAuthorizationUrlFingerprint.kt new file mode 100644 index 000000000..870d569cc --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/api/fingerprints/GetAuthorizationUrlFingerprint.kt @@ -0,0 +1,7 @@ +package app.revanced.patches.reddit.customclients.baconreader.api.fingerprints + +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint + +object GetAuthorizationUrlFingerprint: MethodFingerprint( + strings = listOf("client_id=zACVn0dSFGdWqQ"), +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/api/fingerprints/GetClientIdFingerprint.kt b/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/api/fingerprints/GetClientIdFingerprint.kt new file mode 100644 index 000000000..8049f362a --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/api/fingerprints/GetClientIdFingerprint.kt @@ -0,0 +1,12 @@ +package app.revanced.patches.reddit.customclients.baconreader.api.fingerprints + +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint + +object GetClientIdFingerprint : MethodFingerprint( + strings = listOf("client_id=zACVn0dSFGdWqQ"), + customFingerprint = custom@{ methodDef, classDef -> + if (!classDef.type.endsWith("RedditOAuth;")) return@custom false + + methodDef.name == "getAuthorizeUrl" + } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/api/fingerprints/RequestTokenFingerprint.kt b/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/api/fingerprints/RequestTokenFingerprint.kt new file mode 100644 index 000000000..4e4eddac8 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/api/fingerprints/RequestTokenFingerprint.kt @@ -0,0 +1,7 @@ +package app.revanced.patches.reddit.customclients.baconreader.api.fingerprints + +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint + +object RequestTokenFingerprint : MethodFingerprint( + strings = listOf("zACVn0dSFGdWqQ", "kDm2tYpu9DqyWFFyPlNcXGEni4k"), // App ID and secret. +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/api/patch/ChangeOAuthClientIdPatch.kt b/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/api/patch/ChangeOAuthClientIdPatch.kt new file mode 100644 index 000000000..e7e653327 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/api/patch/ChangeOAuthClientIdPatch.kt @@ -0,0 +1,47 @@ +package app.revanced.patches.reddit.customclients.baconreader.api.patch + +import app.revanced.patcher.annotation.Compatibility +import app.revanced.patcher.annotation.Package +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.InstructionExtensions.getInstruction +import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprintResult +import app.revanced.patcher.patch.PatchResult +import app.revanced.patcher.patch.PatchResultSuccess +import app.revanced.patches.reddit.customclients.AbstractChangeOAuthClientIdPatch +import app.revanced.patches.reddit.customclients.ChangeOAuthClientIdPatchAnnotation +import app.revanced.patches.reddit.customclients.baconreader.api.fingerprints.GetAuthorizationUrlFingerprint +import app.revanced.patches.reddit.customclients.baconreader.api.fingerprints.RequestTokenFingerprint +import org.jf.dexlib2.iface.instruction.OneRegisterInstruction + + +@ChangeOAuthClientIdPatchAnnotation +@Compatibility([Package("com.onelouder.baconreader")]) +class ChangeOAuthClientIdPatch : AbstractChangeOAuthClientIdPatch( + "http://baconreader.com/auth", Options, listOf(GetAuthorizationUrlFingerprint, RequestTokenFingerprint) +) { + + override fun List.patch(context: BytecodeContext): PatchResult { + fun MethodFingerprintResult.patch(replacementString: String) { + val clientIdIndex = scanResult.stringsScanResult!!.matches.first().index + + mutableMethod.apply { + val clientIdRegister = getInstruction(clientIdIndex).registerA + replaceInstruction( + clientIdIndex, + "const-string v$clientIdRegister, \"$replacementString\"" + ) + } + } + + // Patch client id in authorization url. + first().patch("client_id=$clientId") + + // Patch client id for access token request. + last().patch(clientId!!) + + return PatchResultSuccess() + } + + companion object Options : AbstractChangeOAuthClientIdPatch.Options.ChangeOAuthClientIdOptionsContainer() +}