diff --git a/src/main/kotlin/app/revanced/patches/citra/misc/premium/annotations/PremiumUnlockCompatbility.kt b/src/main/kotlin/app/revanced/patches/citra/misc/premium/annotations/PremiumUnlockCompatbility.kt new file mode 100644 index 000000000..be23f1d38 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/citra/misc/premium/annotations/PremiumUnlockCompatbility.kt @@ -0,0 +1,7 @@ +package app.revanced.patches.citra.misc.premium.annotations + +import app.revanced.patcher.annotation.Compatibility +import app.revanced.patcher.annotation.Package + +@Compatibility([Package("org.citra.citra_emu")]) +internal annotation class PremiumUnlockCompatbility \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/citra/misc/premium/fingerprints/PremiumUnlockFingerprint.kt b/src/main/kotlin/app/revanced/patches/citra/misc/premium/fingerprints/PremiumUnlockFingerprint.kt new file mode 100644 index 000000000..347c31a2d --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/citra/misc/premium/fingerprints/PremiumUnlockFingerprint.kt @@ -0,0 +1,7 @@ +package app.revanced.patches.citra.misc.premium.fingerprints + +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint + +object PremiumUnlockFingerprint : MethodFingerprint( + customFingerprint = { it.definingClass == "Lorg/citra/citra_emu/ui/main/MainActivity;" && it.name == "isPremiumActive" } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/citra/misc/premium/patch/PremiumUnlockPatch.kt b/src/main/kotlin/app/revanced/patches/citra/misc/premium/patch/PremiumUnlockPatch.kt new file mode 100644 index 000000000..10d4eebea --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/citra/misc/premium/patch/PremiumUnlockPatch.kt @@ -0,0 +1,37 @@ +package app.revanced.patches.citra.misc.premium.patch + +import app.revanced.patcher.annotation.Description +import app.revanced.patcher.annotation.Name +import app.revanced.patcher.annotation.Version +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patcher.patch.annotations.Patch +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.MethodFingerprintExtensions.name +import app.revanced.patcher.extensions.addInstructions +import app.revanced.patcher.patch.PatchResult +import app.revanced.patcher.patch.PatchResultError +import app.revanced.patcher.patch.PatchResultSuccess +import app.revanced.patches.citra.misc.premium.annotations.PremiumUnlockCompatbility +import app.revanced.patches.citra.misc.premium.fingerprints.PremiumUnlockFingerprint + +@Patch +@Name("premium-unlock") +@Description("Unlocks premium functions.") +@PremiumUnlockCompatbility +@Version("0.0.1") +class PremiumUnlockPatch : BytecodePatch( + listOf(PremiumUnlockFingerprint) +) { + override fun execute(context: BytecodeContext): PatchResult { + val result = PremiumUnlockFingerprint.result ?: return PatchResultError("${PremiumUnlockFingerprint.name} not found") + + result.mutableMethod.addInstructions( + 0, + """ + const v0, 0x1 + return v0 + """ + ) + return PatchResultSuccess() + } +} \ No newline at end of file