From 1d65887e015a067196f5a84db486fff355c96596 Mon Sep 17 00:00:00 2001 From: brosssh <44944126+brosssh@users.noreply.github.com> Date: Mon, 15 Sep 2025 21:28:01 +0200 Subject: [PATCH] feat(Instagram): Add `Hide explore feed` patch (#5856) --- patches/api/patches.api | 4 +++ .../instagram/hide/explore/Fingerprints.kt | 9 +++++ .../instagram/hide/explore/HideExploreFeed.kt | 33 +++++++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 patches/src/main/kotlin/app/revanced/patches/instagram/hide/explore/Fingerprints.kt create mode 100644 patches/src/main/kotlin/app/revanced/patches/instagram/hide/explore/HideExploreFeed.kt diff --git a/patches/api/patches.api b/patches/api/patches.api index 6d4c6e065..70df3fdcc 100644 --- a/patches/api/patches.api +++ b/patches/api/patches.api @@ -264,6 +264,10 @@ public final class app/revanced/patches/instagram/ads/HideAdsPatchKt { public static final fun getHideAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } +public final class app/revanced/patches/instagram/hide/explore/HideExploreFeedKt { + public static final fun getHideExportFeedPatch ()Lapp/revanced/patcher/patch/BytecodePatch; +} + public final class app/revanced/patches/instagram/hide/navigation/HideNavigationButtonsKt { public static final fun getHideNavigationButtonsPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } diff --git a/patches/src/main/kotlin/app/revanced/patches/instagram/hide/explore/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/instagram/hide/explore/Fingerprints.kt new file mode 100644 index 000000000..63402788b --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/instagram/hide/explore/Fingerprints.kt @@ -0,0 +1,9 @@ + +package app.revanced.patches.instagram.hide.explore + +import app.revanced.patcher.fingerprint + +internal val exploreResponseJsonParserFingerprint = fingerprint { + strings("sectional_items", "ExploreTopicalFeedResponse") + custom { method, _ -> method.name == "parseFromJson" } +} diff --git a/patches/src/main/kotlin/app/revanced/patches/instagram/hide/explore/HideExploreFeed.kt b/patches/src/main/kotlin/app/revanced/patches/instagram/hide/explore/HideExploreFeed.kt new file mode 100644 index 000000000..25ff17907 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/instagram/hide/explore/HideExploreFeed.kt @@ -0,0 +1,33 @@ +package app.revanced.patches.instagram.hide.explore + +import app.revanced.patcher.extensions.InstructionExtensions.getInstruction +import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction +import app.revanced.patcher.patch.bytecodePatch +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction + +@Suppress("unused") +val hideExportFeedPatch = bytecodePatch( + name = "Hide explore feed", + description = "Hides posts and reels from the explore/search page.", + use = false +) { + compatibleWith("com.instagram.android") + + execute { + exploreResponseJsonParserFingerprint.method.apply { + val sectionalItemStringIndex = exploreResponseJsonParserFingerprint.stringMatches!!.first().index + val sectionalItemStringRegister = getInstruction(sectionalItemStringIndex).registerA + + /** + * Replacing the JSON key we want to skip with a random string that is not a valid JSON key. + * This way the feeds array will never be populated. + * Received JSON keys that are not handled are simply ignored, so there are no side effects. + */ + replaceInstruction( + sectionalItemStringIndex, + "const-string v$sectionalItemStringRegister, \"BOGUS\"" + ) + } + } +} +