From 40ef51c3c46b5ab963dde47e3fc07ef5fedba6e9 Mon Sep 17 00:00:00 2001 From: aliveoutside <53598473+aliveoutside@users.noreply.github.com> Date: Thu, 1 Dec 2022 20:18:43 +0300 Subject: [PATCH] feat(sleepasandroid): `unlock-premium` patch (#1172) Co-authored-by: oSumAtrIX --- .../annotations/UnlockPremiumCompatibility.kt | 9 +++++ .../fingerprints/IsTrialFingerprint.kt | 8 +++++ .../patch/UnlockPremiumPatch.kt | 36 +++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 src/main/kotlin/app/revanced/patches/sleepasandroid/annotations/UnlockPremiumCompatibility.kt create mode 100644 src/main/kotlin/app/revanced/patches/sleepasandroid/fingerprints/IsTrialFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/sleepasandroid/patch/UnlockPremiumPatch.kt diff --git a/src/main/kotlin/app/revanced/patches/sleepasandroid/annotations/UnlockPremiumCompatibility.kt b/src/main/kotlin/app/revanced/patches/sleepasandroid/annotations/UnlockPremiumCompatibility.kt new file mode 100644 index 00000000..577c232f --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/sleepasandroid/annotations/UnlockPremiumCompatibility.kt @@ -0,0 +1,9 @@ +package app.revanced.patches.sleepasandroid.annotations + +import app.revanced.patcher.annotation.Compatibility +import app.revanced.patcher.annotation.Package + +@Compatibility([Package("com.urbandroid.sleep")]) +@Target(AnnotationTarget.CLASS) +@Retention(AnnotationRetention.RUNTIME) +internal annotation class UnlockPremiumCompatibility diff --git a/src/main/kotlin/app/revanced/patches/sleepasandroid/fingerprints/IsTrialFingerprint.kt b/src/main/kotlin/app/revanced/patches/sleepasandroid/fingerprints/IsTrialFingerprint.kt new file mode 100644 index 00000000..73099b07 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/sleepasandroid/fingerprints/IsTrialFingerprint.kt @@ -0,0 +1,8 @@ +package app.revanced.patches.sleepasandroid.fingerprints + +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint + +object IsTrialFingerprint : MethodFingerprint( + "Z", + customFingerprint = { it.name == "isTrial" } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/sleepasandroid/patch/UnlockPremiumPatch.kt b/src/main/kotlin/app/revanced/patches/sleepasandroid/patch/UnlockPremiumPatch.kt new file mode 100644 index 00000000..45ffbd04 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/sleepasandroid/patch/UnlockPremiumPatch.kt @@ -0,0 +1,36 @@ +package app.revanced.patches.sleepasandroid.patch + +import app.revanced.patcher.annotation.Description +import app.revanced.patcher.annotation.Name +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.addInstructions +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patcher.patch.PatchResult +import app.revanced.patcher.patch.PatchResultSuccess +import app.revanced.patcher.patch.annotations.Patch +import app.revanced.patches.sleepasandroid.annotations.UnlockPremiumCompatibility +import app.revanced.patches.sleepasandroid.fingerprints.IsTrialFingerprint + +@Patch +@Name("unlock-premium") +@Description("Unlocks all premium features.") +@UnlockPremiumCompatibility +class UnlockPremiumPatch : BytecodePatch( + listOf( + IsTrialFingerprint + ) +) { + override fun execute(context: BytecodeContext): PatchResult { + val method = IsTrialFingerprint.result!!.mutableMethod + + method.addInstructions( + 0, + """ + const/4 v0, 0x0 + return v0 + """ + ) + + return PatchResultSuccess() + } +} \ No newline at end of file