From 8f3f4c95bb8f151fc9a2c272bf7d0e905c2f01fc Mon Sep 17 00:00:00 2001 From: xehpuk Date: Sat, 27 Dec 2025 18:45:09 +0100 Subject: [PATCH] feat(Strava): Add `Enable password login` patch (#6396) Co-authored-by: oSumAtrIX --- patches/api/patches.api | 4 ++++ .../password/EnablePasswordLoginPatch.kt | 21 +++++++++++++++++++ .../patches/strava/password/Fingerprints.kt | 18 ++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 patches/src/main/kotlin/app/revanced/patches/strava/password/EnablePasswordLoginPatch.kt create mode 100644 patches/src/main/kotlin/app/revanced/patches/strava/password/Fingerprints.kt diff --git a/patches/api/patches.api b/patches/api/patches.api index c8438af90..83f2197be 100644 --- a/patches/api/patches.api +++ b/patches/api/patches.api @@ -1188,6 +1188,10 @@ public final class app/revanced/patches/stocard/layout/HideStoryBubblesPatchKt { public static final fun getHideStoryBubblesPatch ()Lapp/revanced/patcher/patch/ResourcePatch; } +public final class app/revanced/patches/strava/password/EnablePasswordLoginPatchKt { + public static final fun getEnablePasswordLoginPatch ()Lapp/revanced/patcher/patch/BytecodePatch; +} + public final class app/revanced/patches/strava/subscription/UnlockSubscriptionPatchKt { public static final fun getUnlockSubscriptionPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } diff --git a/patches/src/main/kotlin/app/revanced/patches/strava/password/EnablePasswordLoginPatch.kt b/patches/src/main/kotlin/app/revanced/patches/strava/password/EnablePasswordLoginPatch.kt new file mode 100644 index 000000000..1d6a62569 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/strava/password/EnablePasswordLoginPatch.kt @@ -0,0 +1,21 @@ +package app.revanced.patches.strava.password + +import app.revanced.patcher.Fingerprint +import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction +import app.revanced.patcher.patch.bytecodePatch + +@Suppress("unused") +val enablePasswordLoginPatch = bytecodePatch( + name = "Enable password login", + description = "Re-enables password login after having used an OTP code.", +) { + compatibleWith("com.strava") + + execute { + fun Fingerprint.loadTrueInsteadOfField() = + method.replaceInstruction(patternMatch!!.startIndex, "const/4 v0, 0x1") + + logInGetUsePasswordFingerprint.loadTrueInsteadOfField() + emailChangeGetUsePasswordFingerprint.loadTrueInsteadOfField() + } +} diff --git a/patches/src/main/kotlin/app/revanced/patches/strava/password/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/strava/password/Fingerprints.kt new file mode 100644 index 000000000..f5ce86f18 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/strava/password/Fingerprints.kt @@ -0,0 +1,18 @@ +package app.revanced.patches.strava.password + +import app.revanced.patcher.fingerprint +import com.android.tools.smali.dexlib2.Opcode + +internal val logInGetUsePasswordFingerprint = fingerprint { + opcodes(Opcode.IGET_BOOLEAN) + custom { method, classDef -> + method.name == "getUsePassword" && classDef.endsWith("/RequestOtpLogInNetworkResponse;") + } +} + +internal val emailChangeGetUsePasswordFingerprint = fingerprint { + opcodes(Opcode.IGET_BOOLEAN) + custom { method, classDef -> + method.name == "getUsePassword" && classDef.endsWith("/RequestEmailChangeWithOtpOrPasswordResponse;") + } +}