fix(Relay for Reddit - Spoof client): Prevent OAuth login being disabled remotely

This commit is contained in:
oSumAtrIX 2023-10-05 17:28:10 +02:00
parent a4145d20ff
commit a0aa2be86d
No known key found for this signature in database
GPG key ID: A9B3094ACDB604B4
2 changed files with 35 additions and 3 deletions

View file

@ -9,6 +9,9 @@ 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.relayforreddit.api.fingerprints.*
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction10t
import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction21t
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
@Patch(
@ -28,7 +31,10 @@ object SpoofClientPatch : AbstractSpoofClientPatch(
GetLoggedOutBearerTokenFingerprint,
GetRefreshTokenFingerprint
),
miscellaneousFingerprints = listOf(SetRemoteConfigFingerprint)
miscellaneousFingerprints = listOf(
SetRemoteConfigFingerprint,
RedditCheckDisableAPIFingerprint
)
) {
override fun List<MethodFingerprintResult>.patchClientId(context: BytecodeContext) {
forEach {
@ -44,7 +50,24 @@ object SpoofClientPatch : AbstractSpoofClientPatch(
}
}
override fun List<MethodFingerprintResult>.patchMiscellaneous(context: BytecodeContext) =
// Do not load remote config which disables OAuth login remotely
override fun List<MethodFingerprintResult>.patchMiscellaneous(context: BytecodeContext) {
// Do not load remote config which disables OAuth login remotely.
first().mutableMethod.addInstructions(0, "return-void")
// Prevent OAuth login being disabled remotely.
last().let {
val checkIsOAuthRequestIndex = it.scanResult.patternScanResult!!.startIndex
it.mutableMethod.apply {
val returnNextChain = getInstruction<BuilderInstruction21t>(checkIsOAuthRequestIndex).target
replaceInstruction(
checkIsOAuthRequestIndex,
BuilderInstruction10t(
Opcode.GOTO,
returnNextChain
)
)
}
}
}
}

View file

@ -0,0 +1,9 @@
package app.revanced.patches.reddit.customclients.relayforreddit.api.fingerprints
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import com.android.tools.smali.dexlib2.Opcode
object RedditCheckDisableAPIFingerprint : MethodFingerprint(
strings = listOf("Reddit Disabled"),
opcodes = listOf(Opcode.IF_EQZ)
)