diff --git a/src/main/kotlin/app/revanced/patches/irplus/ad/annotations/IrplusAdsCompatibility.kt b/src/main/kotlin/app/revanced/patches/irplus/ad/annotations/IrplusAdsCompatibility.kt new file mode 100644 index 0000000000..2db4e69e04 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/irplus/ad/annotations/IrplusAdsCompatibility.kt @@ -0,0 +1,9 @@ +package app.revanced.patches.irplus.ad.annotations + +import app.revanced.patcher.annotation.Compatibility +import app.revanced.patcher.annotation.Package + +@Compatibility([Package("net.binarymode.android.irplus")]) +@Target(AnnotationTarget.CLASS) +@Retention(AnnotationRetention.RUNTIME) +internal annotation class IrplusAdsCompatibility \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/irplus/ad/fingerprints/IrplusAdsFingerprint.kt b/src/main/kotlin/app/revanced/patches/irplus/ad/fingerprints/IrplusAdsFingerprint.kt new file mode 100644 index 0000000000..061606b1c4 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/irplus/ad/fingerprints/IrplusAdsFingerprint.kt @@ -0,0 +1,12 @@ +package app.revanced.patches.irplus.ad.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import org.jf.dexlib2.AccessFlags + +object IrplusAdsFingerprint : MethodFingerprint( + "V", + AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, + listOf("L", "Z"), + strings = listOf("TAGGED") +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/irplus/ad/patch/IrplusAdsPatch.kt b/src/main/kotlin/app/revanced/patches/irplus/ad/patch/IrplusAdsPatch.kt new file mode 100644 index 0000000000..9a7f0a66e2 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/irplus/ad/patch/IrplusAdsPatch.kt @@ -0,0 +1,33 @@ +package app.revanced.patches.irplus.ad.patch + +import app.revanced.patcher.annotation.Description +import app.revanced.patcher.annotation.Name +import app.revanced.patcher.annotation.Version +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.addInstruction +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.irplus.ad.annotations.IrplusAdsCompatibility +import app.revanced.patches.irplus.ad.fingerprints.IrplusAdsFingerprint + + +@Patch +@Name("remove-ads") +@Description("Removes all ads from the app.") +@IrplusAdsCompatibility +@Version("0.0.1") +class IrplusAdsPatch : BytecodePatch( + listOf(IrplusAdsFingerprint) +) { + override fun execute(context: BytecodeContext): PatchResult { + val method = IrplusAdsFingerprint.result!!.mutableMethod + + // By overwriting the second parameter of the method, + // the view which holds the advertisement is removed. + method.addInstruction(0, "const/4 p2, 0x0") + + return PatchResultSuccess() + } +} \ No newline at end of file