diff --git a/src/main/kotlin/app/revanced/patches/lightroom/misc/premium/annotations/UnlockPremiumCompatibility.kt b/src/main/kotlin/app/revanced/patches/lightroom/misc/premium/annotations/UnlockPremiumCompatibility.kt new file mode 100644 index 000000000..1c03bff62 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/lightroom/misc/premium/annotations/UnlockPremiumCompatibility.kt @@ -0,0 +1,8 @@ +package app.revanced.patches.lightroom.misc.premium.annotations + +import app.revanced.patcher.annotation.Compatibility +import app.revanced.patcher.annotation.Package + +@Compatibility([Package("com.adobe.lrmobile")]) +@Target(AnnotationTarget.CLASS) +internal annotation class UnlockPremiumCompatibility diff --git a/src/main/kotlin/app/revanced/patches/lightroom/misc/premium/fingerprint/HasPurchasedFingerprint.kt b/src/main/kotlin/app/revanced/patches/lightroom/misc/premium/fingerprint/HasPurchasedFingerprint.kt new file mode 100644 index 000000000..a56881fd0 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/lightroom/misc/premium/fingerprint/HasPurchasedFingerprint.kt @@ -0,0 +1,18 @@ +package app.revanced.patches.lightroom.misc.premium.fingerprint + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import org.jf.dexlib2.AccessFlags +import org.jf.dexlib2.Opcode + +object HasPurchasedFingerprint : MethodFingerprint( + returnType = "Z", + accessFlags = AccessFlags.PRIVATE or AccessFlags.FINAL, + strings = listOf("isPurchaseDoneRecently = true, access platform profile present? = "), + opcodes = listOf( + Opcode.SGET_OBJECT, + Opcode.CONST_4, + Opcode.CONST_4, + Opcode.CONST_4, + ) +) diff --git a/src/main/kotlin/app/revanced/patches/lightroom/misc/premium/patch/UnlockPremiumPatch.kt b/src/main/kotlin/app/revanced/patches/lightroom/misc/premium/patch/UnlockPremiumPatch.kt new file mode 100644 index 000000000..ccd59536b --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/lightroom/misc/premium/patch/UnlockPremiumPatch.kt @@ -0,0 +1,27 @@ +package app.revanced.patches.lightroom.misc.premium.patch + +import app.revanced.extensions.toErrorResult +import app.revanced.patcher.annotation.Description +import app.revanced.patcher.annotation.Name +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction +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.lightroom.misc.premium.annotations.UnlockPremiumCompatibility +import app.revanced.patches.lightroom.misc.premium.fingerprint.HasPurchasedFingerprint + +@Patch +@Name("Unlock premium") +@Description("Unlocks premium features.") +@UnlockPremiumCompatibility +class UnlockPremiumPatch : BytecodePatch(listOf(HasPurchasedFingerprint)) { + override fun execute(context: BytecodeContext): PatchResult { + // Set hasPremium = true. + HasPurchasedFingerprint.result?.mutableMethod?.replaceInstruction(2, "const/4 v2, 0x1") + ?: throw HasPurchasedFingerprint.toErrorResult() + + return PatchResultSuccess() + } +} \ No newline at end of file