durgesh0505/chiggi_morphe_patches

41

stars

64

commits

Kotlin

primary language

Sep 8, 2026

updated

README

🧩 Chiggi Morphe Patches

Third-party Morphe patches for SonyLIV, Nutrilio, Threads, Arrow Puzzle, CrazyGames, JioHotstar (TV), Vi Movies and TV (TV) and JioTV+ (TV).

❓ About

A set of patches that modify these apps at the bytecode/resource level, applied with Morphe (a fork of ReVanced). These patches are an independent project and are not affiliated with Sony, SonyLIV, Nutrilio, Meta, Threads, Instagram, ReVanced, or the Morphe project.

AppPackageTested versionNotes
SonyLIVcom.sonyliv6.23.1 (Android TV / leanback)Media3 (ExoPlayer)
Nutrilionet.nutrilio1.20.2 (phone)split APKS bundle
Threadscom.instagram.barcelona434.0.0.41.74 (phone)Instagram codebase; split APKS bundle
Arrow Puzzlecom.easybrain.arrow.puzzle.game1.7.0 (phone)Easybrain Unity game; single universal APK
CrazyGamescom.crazygames.crazygamesapp1.6.7 (phone)Capacitor (Ionic) WebView portal; single universal APK
JioHotstarin.startv.hotstar26.06.22.3 (Android TV)leanback split bundle (.apkm); heavily R8-obfuscated
Vi Movies and TVcom.vimtv10.8 (Android TV)YuppTV OTT; leanback split bundle
JioTV+com.jio.media.jiotvplus2.6.4_2076 (Android TV)PatchWall UI; leanback split bundle

🩹 SonyLIV patches

PatchWhat it doesStatus
Remove video adsForces PlayerUtil.isAdEnable() to false so the player neither requests nor plays ads. Removes client-side (Google IMA) ads.✅ Applies cleanly; pending on-device confirmation
Auto skip intro and recapAutomatically skips intro, recap and song segments as soon as the "Skip" button would appear, without waiting for a tap.✅ Applies cleanly; pending on-device confirmation
Auto-skip Up NextPlays the next episode immediately when the "Up Next" card appears, skipping the auto-play countdown.✅ Applies cleanly; pending on-device confirmation
Hide promo bannersHides the CleverTap-driven subscribe/premium promo banners and promo trays on the home screen. Content rows and CleverTap pop-ups/overlays are unaffected.✅ Applies cleanly; pending on-device confirmation
Suppress geo / VPN blockDowngrades the geo / "VPN detected" block to a generic error so the dedicated block screens aren't shown. Does not grant access — geoblocking is server-side by IP; a valid in-region (India) connection is still required.✅ Applies cleanly; pending on-device confirmation
Disable AppsFlyer trackingDisables AppsFlyer attribution and event tracking by forcing isAppsFlyerSupported() to false.✅ Applies cleanly
Disable Firebase trackingDisables Firebase Analytics, Crashlytics and Performance collection via manifest flags. Push notifications are unaffected.✅ Applies cleanly
Disable forced updateRemoves the forced ("immediate") and optional ("flexi") "update available" popup shown on the home screen.✅ Applies cleanly
Change app name (opt-in)Renames the app shown under the launcher icon. Editable in patch options (App name, pre-filled Sony LIV).✅ Verified
Change package name (opt-in)Renames the package so the patched app installs alongside the original, rewriting provider authorities. Editable in patch options (Package name, pre-filled com.sonyliv.chiggi).✅ Verified

All patches are verified to resolve and apply against com.sonyliv 6.23.1 using morphe-cli. Runtime behaviour should still be confirmed on a device.

Notes & limitations

  • Ads on live content — "Remove video ads" disables the client-side (Google IMA) ad path. SonyLIV also uses server-side ad insertion (AWS MediaTailor / VisualOn SSAI) for some live streams; ads stitched into the video server-side cannot be removed by a client patch and may still appear on live content.
  • CleverTap is intentionally not disabled. It is dependency-injected and drives in-app overlays / native-display UI, so disabling it would crash parts of the app. "Disable analytics" here covers AppsFlyer and the Firebase stack only.

🩹 Nutrilio patches

PatchWhat it doesStatus
Unlock PlusForces the premium gate (PremiumModule.t2()) to true, unlocking all Nutrilio PLUS+ features (custom colors, all charts, app lock, all tracking options). Client-side only; does not grant a real Google Play subscription.✅ Applies cleanly; pending on-device confirmation
Disable analyticsDisables Firebase/Google Analytics, Crashlytics and Performance via manifest flags and removes the advertising-id (AD_ID) permissions. Push notifications are unaffected.✅ Applies cleanly
Add food search bar (opt-in)Adds a live search box below each meal-time header in the day/meal form; typing filters that meal's food chips. Filtering only hides chips, so already-added items stay added.✅ Applies cleanly; pending on-device confirmation
Local backup & restore (on by default)Adds a native Local backup & restore row to the Backup screen (above Restore Backup) that opens Nutrilio's built-in (normally hidden) local file backup/restore. There you can export everything — all entries, images and settings — to a portable .nutrilio file (a ZIP) via the share sheet, and restore one from a file you pick. No Google account or premium needed.✅ Applies cleanly; pending on-device confirmation
Change app name (on by default)Renames the app to Nutrilio Morphe (editable in patch options).✅ Verified
Change package name (on by default)Renames the package to net.nutrilio.morphe so it installs alongside the original (editable in patch options).✅ Verified

Notes & limitations

  • Version — pinned to 1.20.2. A null ("any") version is rejected by Morphe Manager (it makes the whole source fail to load), and Nutrilio is R8-obfuscated, so the two bytecode patches (Unlock Plus, Add food search bar) only verifiably resolve on 1.20.2. They are hardened (Unlock Plus anchors on a stable backend string instead of the obfuscated method name; the search bar resolves resource ids by name at runtime) to tolerate minor drift, but a different version may need re-fingerprinting.
  • Add food search bar is the most update-fragile patch (it hooks the obfuscated form adapter) and is off by default so it can never block the other patches.
  • Local backup & restore reuses Nutrilio's own backup engine, so the file it produces keeps the .nutrilio extension (it is a ZIP internally) — keep that extension or restore won't recognise it. This is a local file backup; Google Drive auto-backup is separate and needs Google Sign-In, which does not work on a re-signed/renamed build (the OAuth client is bound to the original signature and package), so Drive backup is effectively unavailable on the patched app.

🩹 Threads patches

PatchWhat it doesStatus
Hide adsHides sponsored posts and injected "suggested"/netego units from the feed via two hooks: marks every media as organic (Media.DED() → false, covers server-inline ads) and blocks the feed ad-injection scheduler (BarcelonaSpoolFeedCacheHandler → no inject, covers injected ads). Client-side only.✅ Applies cleanly; pending on-device confirmation
Remove AD_ID permissionRemoves the advertising-id (AD_ID / ACCESS_ADSERVICES_AD_ID) permissions so the device ad id can't be read. Does not disable Meta's core analytics.✅ Applies cleanly
Change app name (on by default)Renames the app to Threads Morphe (editable in patch options).✅ Verified
Change package name (on by default)Renames the package to com.instagram.barcelona.morphe so it installs alongside the original (editable in patch options).✅ Verified

Notes & limitations

  • Version — pinned to 434.0.0.41.74. Threads is built from the heavily R8-obfuscated Instagram codebase, whose class/method names shift on nearly every Meta release; the Hide ads hooks are anchored on stable named classes but a different version may still need re-fingerprinting.
  • Account / integrity risk — Threads is a Meta account app. Re-signing and renaming the package can trip Play Integrity / Meta app-attestation, which may cause feed-refresh failures, forced logout, or account action. Test on a secondary account first. If login breaks, disable Change package name.
  • Analytics — Threads uses Meta's own telemetry (analytics2 / OneFabric), not Firebase, so there is no manifest flag to flip; only the AD_ID permission is removed.
  • ScopeHide ads forces the global isAd predicate false, so it also suppresses ad treatment on non-feed surfaces (e.g. reels). Server-side fetching of ads is unchanged; the patch only refuses to surface them.

🩹 Arrow Puzzle patches

PatchWhat it doesStatus
Remove adsRemoves all ads (banner + interstitial + rewarded) by neutering the Unity↔Android ad facade (com.easybrain.ads.unity.AdsPlugin): availability/show booleans return false, banner shows are no-ops, banner height is 0. One named chokepoint covers every mediation network (ironSource/AppLovin/AdMob/Pangle).✅ Applies cleanly; pending on-device confirmation
Disable analyticsNo-ops Easybrain analytics event upload (AnalyticsPlugin.AnalyticsSendEvent + the central AnalyticsController collector). SDK init is left intact so ad removal stays stable.✅ Applies cleanly
Remove AD_ID permissionRemoves the advertising-id + Ad Services (Privacy Sandbox) permissions.✅ Applies cleanly
Change app name (on by default)Renames the app to Arrow Puzzle Morphe (editable in patch options).✅ Verified
Change package name (on by default)Renames the package to com.easybrain.arrow.puzzle.game.morphe so it installs alongside the original (editable in patch options).✅ Verified

Notes & limitations

  • Unity game — gameplay is native (IL2CPP), but ads + analytics run on the Android/DEX side via the Easybrain SDK, which is where these patches apply.
  • Removing all ads removes rewarded ads too — watch-to-earn rewards (coins/hints) no longer work, by design.
  • Native anti-tamper — the game ships libsigner.so / libpglarmor.so; a re-signed + renamed package may trip a native integrity check. If the app crashes or closes on launch, disable Change package name (and test the unrenamed build).
  • Version — pinned to 1.7.0. The ad/analytics JNI facades (AdsPlugin/AnalyticsPlugin) keep stable names, but the central analytics collector is obfuscated and may need re-fingerprinting on updates.

🩹 CrazyGames patches

PatchWhat it doesStatus
Bypass Play license check (on by default)Neuters Google Play's Automatic Integrity Protection (PairIP) license check (com.pairip.licensecheck.LicenseClient) that, on a re-signed/sideloaded build, redirects the app to the Play Store ("get it on Google Play"). Required for the patched app to open.✅ Applies cleanly; pending on-device confirmation
Remove adsNeuters the native Capacitor AdMob plugin (com.getcapacitor.community.admob.AdMob): no video plays for interstitial or rewarded ads — the show methods instead fire the ad's lifecycle events (Showed/Dismissed, or Reward/Dismissed) so the game's loading overlay dismisses and rewarded ads still credit their reward; banners never display. One named chokepoint covers AdMob and its Pangle / Audience Network mediation.✅ Applies cleanly; pending on-device confirmation
Disable analyticsStops native Sentry crash/telemetry upload by neutering the Capacitor Sentry plugin's native init (SentryCapacitor.initNativeSdk). Firebase auth, ConfigCat and push are unaffected.✅ Applies cleanly
Remove AD_ID permissionRemoves the advertising-id + Ad Services (Privacy Sandbox) permissions (AD_ID, ACCESS_ADSERVICES_*).✅ Applies cleanly
Change app name (on by default)Renames the app to CrazyGames Morphe (editable in patch options).✅ Verified

Notes & limitations

  • Play Automatic Integrity Protection (PairIP) — CrazyGames ships with Google Play's PairIP licensing guard, which redirects any non-Play / re-signed install to the store. Bypass Play license check is required and on by default; without it the patched app won't open. This build has no PairIP code-virtualization (VMRunner), so neutering the license check is safe.
  • Capacitor WebView app — most of CrazyGames is the remote Next.js portal (app.crazygames.com) rendered in a WebView. These patches only touch the native ad/telemetry shell.
  • In-page web video ads remain — the pre/mid-roll ads shown inside a game come from CrazyGames' servers as web content, not the native ad SDK, so they are not in the app bytecode and cannot be removed here. "Remove ads" kills the native interstitial/banner/rewarded layer only.
  • Auto-reward is client-side — the rewarded bypass fires the reward listener event the web grants on. If CrazyGames adds server-side reward verification, the reward simply won't be granted (no crash).
  • Package kept — the package is not renamed, so Google/Facebook/Apple sign-in keeps working. The patched app installs over / conflicts with the Play Store version rather than alongside it.
  • Native anti-tamper — the app ships ByteDance Pangle's libpglarmor.so / libsigner.so; a re-signed APK may trip a native integrity check (best case Pangle silently no-fills, worst case a launch crash — untested).
  • Version — pinned to 1.6.7. The AdMob/Sentry plugin classes and method names are stable, but the Capacitor helper classes (PluginCall/JSObject/resolve) are R8-obfuscated, so the injected bytecode is version-specific.

🩹 JioHotstar patches

Android TV build (in.startv.hotstar, leanback), supplied as the .apkm split bundle.

PatchWhat it doesStatus
Bypass proxy/VPN security block (on by default)Defeats the "Something is interfering with your secure connection" (NET_201) screen shown on a VPN. The app self-enforces a server-sent proxy verdict (X-Hs-SetProxyState) via the ProxyStateInterceptor; this neuters the handler that stores that verdict (client stays "unblocked") and the periodic proxy-state refresh coroutines that otherwise re-fetch endlessly and make the app lag.✅ Device-confirmed (India VPN works, playback OK)
Remove adsClears the SSAI ssaiTag in the AdMetadata constructor so the client requests a clean, non-ad-stitched stream (removes mid/pre-roll), and hides the home masthead banner render.✅ Applies cleanly
Spoof device-integrity self-reportForces the securityLib checks (VPN/proxy/root/debugger/ports/files) false so the attestation the app sends looks clean.✅ Applies cleanly
Spoof device attestationForces all 8 security flags in the attestation blob (Kg/b) — including IsTampered (from the native tamper checker, which the self-report patch above does NOT cover) — to false at the constructor. The re-signed build otherwise sends IsTampered=true, which flags the account and locks it 24h (error NM-4290). ⚠️ Only removes a client-sent signal; the server still sees the VPN IP.✅ Applies cleanly
Disable analytics / Remove AD_IDFirebase flags off (CleverTap left intact) + strips AD_ID/AdServices perms.✅ Applies cleanly
Premium unlock (UI)MyPageData.getIsSubscribed→true, DownloadInfo.getIsPremium→false, subscription nudge suppressed. UI only — real content stays server + Widevine gated.✅ Applies cleanly
Enable screenshots / screen mirroring / all codecs+4K / HDR10FLAG_SECURE off (UI only), multi-display block relaxed, codec/HDR capability checks forced on.✅ Applies cleanly
Change app name (on by default)Renames to JioHotstar Morphe (package kept).✅ Verified

Notes & limitations

  • ⚠️ Account-ban risk — JioHotstar does server-side fraud analysis. Re-signing + VPN + these client patches got a real account locked 24h for "suspicious activity" (NM-4290) because the attestation blob was sending IsTampered=true. The Spoof device attestation patch fixes that client-sent signal, but the server still sees your VPN exit IP and an already-flagged account stays on their radar. Do not run this on an account you cannot afford to lose — test on a throwaway Jio number first. For a real/paid subscription, use the official app.
  • VPN bypass is novel — it is not in any public reference set; the block is client-enforced off a server verdict, so neutering the client store defeats it. If JioHotstar adds pure server-side IP playback enforcement in future, this could stop working.
  • Flagged VPN exit IP — if the security error or a lock appears, the specific VPN server's IP is likely blocklisted; switching to a different (ideally residential/dedicated) India IP clears it. Multiple apps breaking at once on the same VPN = flagged IP, not a patch fault.
  • Corner brand watermark cannot be removed — it is forensic/stream-baked (server-side), not a client render.
  • Signature bypass not needed / not ported — the re-signed build already plays, and the reference getSignFromJNI tamper hook does not exist in this version.
  • Ad approach credited to Paresh-Maheshwari (GPL-3.0) for the premium/screenshot/mirroring/codecs/HDR hooks.

🩹 Vi Movies and TV patches

Android TV build (com.vimtv, YuppTV OTT). No anti-tamper/VPN — clean re-sign.

PatchWhat it doesStatus
Remove adsForces AdUrlResponse.getAdUrlTypes()→null and TorcAiAdConfig.isAdEnabled()→false, so the player builds no IMA/SSAI ad-tag URL and no pre/mid-roll ad loads.✅ Applies cleanly
Disable analytics / Remove AD_IDFirebase flags off (CleverTap left) + strips AD_ID/AdServices perms.✅ Applies cleanly
Change app name (on by default)Renames to Vi Movies and TV Morphe (package kept).✅ Verified
Premium unlock (UI)Forces client isSubscribed flags true. UI only — content stays server + Widevine gated (may show items as available that the server still refuses).✅ Applies cleanly

🩹 JioTV+ patches

Android TV build (com.jio.media.jiotvplus, PatchWall UI). No anti-tamper/VPN — clean re-sign.

PatchWhat it doesStatus
Remove adsNeuters JioAds display/banner ads (JioAdView.loadAd/cacheAd) and all player video ads — pre/mid/post-roll + SSAI stitch — by no-oping VMAPAdsHelper.fetchAds.✅ Applies cleanly
Disable analytics / Remove AD_IDFirebase flags off (CleverTap left) + strips AD_ID/AdServices perms.✅ Applies cleanly
Change app name (on by default)Renames to JioTV+ Morphe (package kept).✅ Verified

Notes & limitations

  • No premium patch — JioTV+ has no client paywall flag (the isPremium field is ad-request telemetry). Content is server-entitlement + Widevine gated, so there is nothing client-side to unlock.

📲 How to use

These patches are distributed as a .mpp bundle for Morphe Manager.

  • In Morphe Manager → Patch bundles → Add → Enter URL, paste the raw patches-bundle.json URL (this is the source URL the Manager expects — not the repository URL): https://raw.githubusercontent.com/durgesh0505/chiggi_morphe_patches/refs/heads/main/patches-bundle.json
  • Or download the bundle directly: patches-1.15.1.mpp

Patch the SonyLIV Android TV APK or the Nutrilio bundle with Morphe, then sideload the result onto your device (both ship as split APKs; Morphe handles merging and signing).

Re-patching an APKM locally (helper script)

scripts/repatch_sonyliv.sh patches a SonyLIV Android TV .apkm with this patch set (merging splits into one universal APK), applies the app-name / package-name options, and signs it with a keystore:

./scripts/repatch_sonyliv.sh path/to/sonyliv.apkm
# or run with no argument to pick the .apkm interactively

Override the defaults with environment variables, e.g. APP_NAME="My LIV" PACKAGE_NAME=com.sonyliv.custom KEYSTORE=./my.keystore ./scripts/repatch_sonyliv.sh app.apkm.

scripts/repatch_nutrilio.sh does the same for the Nutrilio split bundle (accepts the .zip download, copies it to .apks, enables the rename + food-search-bar patches, and signs):

./scripts/repatch_nutrilio.sh net.nutrilio.zip
# defaults: APP_NAME="Nutrilio Morphe" PACKAGE_NAME=net.nutrilio.morphe SEARCH_BAR=1

Both scripts use a locally built bundle if present, otherwise download the latest release. Requires JDK 17+, the Android SDK, and morphe-cli.

🛠️ Building from source

Requirements: JDK 17+ and the Android SDK (compileSdk 36).

A GitHub Personal Access Token with the read:packages scope is required to resolve morphe-patcher from the Morphe GitHub Packages registry. Add it to ~/.gradle/gradle.properties:

gpr.user=YOUR_GITHUB_USERNAME
gpr.key=YOUR_GITHUB_TOKEN

Then build the patch bundle:

./gradlew buildAndroid
# Output: patches/build/libs/patches-<version>.mpp

List or apply the patches with morphe-cli:

java -jar morphe-cli.jar list-patches --patches=patches/build/libs/patches-1.15.1.mpp -v
java -jar morphe-cli.jar patch -p patches/build/libs/patches-1.15.1.mpp -o out.apk base.apk

📜 License

Licensed under the GNU General Public License v3.0, with the additional GPL Section 7 terms described in NOTICE. These patches are based on the prior work of Morphe and ReVanced; the NOTICE file is preserved as required. This project uses its own identity and is not associated with the Morphe project name.

Contributors

durgesh0505/chiggi_morphe_patches

41

stars

64

commits

Kotlin

primary language

Sep 8, 2026

updated

README

🧩 Chiggi Morphe Patches

Third-party Morphe patches for SonyLIV, Nutrilio, Threads, Arrow Puzzle, CrazyGames, JioHotstar (TV), Vi Movies and TV (TV) and JioTV+ (TV).

❓ About

A set of patches that modify these apps at the bytecode/resource level, applied with Morphe (a fork of ReVanced). These patches are an independent project and are not affiliated with Sony, SonyLIV, Nutrilio, Meta, Threads, Instagram, ReVanced, or the Morphe project.

AppPackageTested versionNotes
SonyLIVcom.sonyliv6.23.1 (Android TV / leanback)Media3 (ExoPlayer)
Nutrilionet.nutrilio1.20.2 (phone)split APKS bundle
Threadscom.instagram.barcelona434.0.0.41.74 (phone)Instagram codebase; split APKS bundle
Arrow Puzzlecom.easybrain.arrow.puzzle.game1.7.0 (phone)Easybrain Unity game; single universal APK
CrazyGamescom.crazygames.crazygamesapp1.6.7 (phone)Capacitor (Ionic) WebView portal; single universal APK
JioHotstarin.startv.hotstar26.06.22.3 (Android TV)leanback split bundle (.apkm); heavily R8-obfuscated
Vi Movies and TVcom.vimtv10.8 (Android TV)YuppTV OTT; leanback split bundle
JioTV+com.jio.media.jiotvplus2.6.4_2076 (Android TV)PatchWall UI; leanback split bundle

🩹 SonyLIV patches

PatchWhat it doesStatus
Remove video adsForces PlayerUtil.isAdEnable() to false so the player neither requests nor plays ads. Removes client-side (Google IMA) ads.✅ Applies cleanly; pending on-device confirmation
Auto skip intro and recapAutomatically skips intro, recap and song segments as soon as the "Skip" button would appear, without waiting for a tap.✅ Applies cleanly; pending on-device confirmation
Auto-skip Up NextPlays the next episode immediately when the "Up Next" card appears, skipping the auto-play countdown.✅ Applies cleanly; pending on-device confirmation
Hide promo bannersHides the CleverTap-driven subscribe/premium promo banners and promo trays on the home screen. Content rows and CleverTap pop-ups/overlays are unaffected.✅ Applies cleanly; pending on-device confirmation
Suppress geo / VPN blockDowngrades the geo / "VPN detected" block to a generic error so the dedicated block screens aren't shown. Does not grant access — geoblocking is server-side by IP; a valid in-region (India) connection is still required.✅ Applies cleanly; pending on-device confirmation
Disable AppsFlyer trackingDisables AppsFlyer attribution and event tracking by forcing isAppsFlyerSupported() to false.✅ Applies cleanly
Disable Firebase trackingDisables Firebase Analytics, Crashlytics and Performance collection via manifest flags. Push notifications are unaffected.✅ Applies cleanly
Disable forced updateRemoves the forced ("immediate") and optional ("flexi") "update available" popup shown on the home screen.✅ Applies cleanly
Change app name (opt-in)Renames the app shown under the launcher icon. Editable in patch options (App name, pre-filled Sony LIV).✅ Verified
Change package name (opt-in)Renames the package so the patched app installs alongside the original, rewriting provider authorities. Editable in patch options (Package name, pre-filled com.sonyliv.chiggi).✅ Verified

All patches are verified to resolve and apply against com.sonyliv 6.23.1 using morphe-cli. Runtime behaviour should still be confirmed on a device.

Notes & limitations

  • Ads on live content — "Remove video ads" disables the client-side (Google IMA) ad path. SonyLIV also uses server-side ad insertion (AWS MediaTailor / VisualOn SSAI) for some live streams; ads stitched into the video server-side cannot be removed by a client patch and may still appear on live content.
  • CleverTap is intentionally not disabled. It is dependency-injected and drives in-app overlays / native-display UI, so disabling it would crash parts of the app. "Disable analytics" here covers AppsFlyer and the Firebase stack only.

🩹 Nutrilio patches

PatchWhat it doesStatus
Unlock PlusForces the premium gate (PremiumModule.t2()) to true, unlocking all Nutrilio PLUS+ features (custom colors, all charts, app lock, all tracking options). Client-side only; does not grant a real Google Play subscription.✅ Applies cleanly; pending on-device confirmation
Disable analyticsDisables Firebase/Google Analytics, Crashlytics and Performance via manifest flags and removes the advertising-id (AD_ID) permissions. Push notifications are unaffected.✅ Applies cleanly
Add food search bar (opt-in)Adds a live search box below each meal-time header in the day/meal form; typing filters that meal's food chips. Filtering only hides chips, so already-added items stay added.✅ Applies cleanly; pending on-device confirmation
Local backup & restore (on by default)Adds a native Local backup & restore row to the Backup screen (above Restore Backup) that opens Nutrilio's built-in (normally hidden) local file backup/restore. There you can export everything — all entries, images and settings — to a portable .nutrilio file (a ZIP) via the share sheet, and restore one from a file you pick. No Google account or premium needed.✅ Applies cleanly; pending on-device confirmation
Change app name (on by default)Renames the app to Nutrilio Morphe (editable in patch options).✅ Verified
Change package name (on by default)Renames the package to net.nutrilio.morphe so it installs alongside the original (editable in patch options).✅ Verified

Notes & limitations

  • Version — pinned to 1.20.2. A null ("any") version is rejected by Morphe Manager (it makes the whole source fail to load), and Nutrilio is R8-obfuscated, so the two bytecode patches (Unlock Plus, Add food search bar) only verifiably resolve on 1.20.2. They are hardened (Unlock Plus anchors on a stable backend string instead of the obfuscated method name; the search bar resolves resource ids by name at runtime) to tolerate minor drift, but a different version may need re-fingerprinting.
  • Add food search bar is the most update-fragile patch (it hooks the obfuscated form adapter) and is off by default so it can never block the other patches.
  • Local backup & restore reuses Nutrilio's own backup engine, so the file it produces keeps the .nutrilio extension (it is a ZIP internally) — keep that extension or restore won't recognise it. This is a local file backup; Google Drive auto-backup is separate and needs Google Sign-In, which does not work on a re-signed/renamed build (the OAuth client is bound to the original signature and package), so Drive backup is effectively unavailable on the patched app.

🩹 Threads patches

PatchWhat it doesStatus
Hide adsHides sponsored posts and injected "suggested"/netego units from the feed via two hooks: marks every media as organic (Media.DED() → false, covers server-inline ads) and blocks the feed ad-injection scheduler (BarcelonaSpoolFeedCacheHandler → no inject, covers injected ads). Client-side only.✅ Applies cleanly; pending on-device confirmation
Remove AD_ID permissionRemoves the advertising-id (AD_ID / ACCESS_ADSERVICES_AD_ID) permissions so the device ad id can't be read. Does not disable Meta's core analytics.✅ Applies cleanly
Change app name (on by default)Renames the app to Threads Morphe (editable in patch options).✅ Verified
Change package name (on by default)Renames the package to com.instagram.barcelona.morphe so it installs alongside the original (editable in patch options).✅ Verified

Notes & limitations

  • Version — pinned to 434.0.0.41.74. Threads is built from the heavily R8-obfuscated Instagram codebase, whose class/method names shift on nearly every Meta release; the Hide ads hooks are anchored on stable named classes but a different version may still need re-fingerprinting.
  • Account / integrity risk — Threads is a Meta account app. Re-signing and renaming the package can trip Play Integrity / Meta app-attestation, which may cause feed-refresh failures, forced logout, or account action. Test on a secondary account first. If login breaks, disable Change package name.
  • Analytics — Threads uses Meta's own telemetry (analytics2 / OneFabric), not Firebase, so there is no manifest flag to flip; only the AD_ID permission is removed.
  • ScopeHide ads forces the global isAd predicate false, so it also suppresses ad treatment on non-feed surfaces (e.g. reels). Server-side fetching of ads is unchanged; the patch only refuses to surface them.

🩹 Arrow Puzzle patches

PatchWhat it doesStatus
Remove adsRemoves all ads (banner + interstitial + rewarded) by neutering the Unity↔Android ad facade (com.easybrain.ads.unity.AdsPlugin): availability/show booleans return false, banner shows are no-ops, banner height is 0. One named chokepoint covers every mediation network (ironSource/AppLovin/AdMob/Pangle).✅ Applies cleanly; pending on-device confirmation
Disable analyticsNo-ops Easybrain analytics event upload (AnalyticsPlugin.AnalyticsSendEvent + the central AnalyticsController collector). SDK init is left intact so ad removal stays stable.✅ Applies cleanly
Remove AD_ID permissionRemoves the advertising-id + Ad Services (Privacy Sandbox) permissions.✅ Applies cleanly
Change app name (on by default)Renames the app to Arrow Puzzle Morphe (editable in patch options).✅ Verified
Change package name (on by default)Renames the package to com.easybrain.arrow.puzzle.game.morphe so it installs alongside the original (editable in patch options).✅ Verified

Notes & limitations

  • Unity game — gameplay is native (IL2CPP), but ads + analytics run on the Android/DEX side via the Easybrain SDK, which is where these patches apply.
  • Removing all ads removes rewarded ads too — watch-to-earn rewards (coins/hints) no longer work, by design.
  • Native anti-tamper — the game ships libsigner.so / libpglarmor.so; a re-signed + renamed package may trip a native integrity check. If the app crashes or closes on launch, disable Change package name (and test the unrenamed build).
  • Version — pinned to 1.7.0. The ad/analytics JNI facades (AdsPlugin/AnalyticsPlugin) keep stable names, but the central analytics collector is obfuscated and may need re-fingerprinting on updates.

🩹 CrazyGames patches

PatchWhat it doesStatus
Bypass Play license check (on by default)Neuters Google Play's Automatic Integrity Protection (PairIP) license check (com.pairip.licensecheck.LicenseClient) that, on a re-signed/sideloaded build, redirects the app to the Play Store ("get it on Google Play"). Required for the patched app to open.✅ Applies cleanly; pending on-device confirmation
Remove adsNeuters the native Capacitor AdMob plugin (com.getcapacitor.community.admob.AdMob): no video plays for interstitial or rewarded ads — the show methods instead fire the ad's lifecycle events (Showed/Dismissed, or Reward/Dismissed) so the game's loading overlay dismisses and rewarded ads still credit their reward; banners never display. One named chokepoint covers AdMob and its Pangle / Audience Network mediation.✅ Applies cleanly; pending on-device confirmation
Disable analyticsStops native Sentry crash/telemetry upload by neutering the Capacitor Sentry plugin's native init (SentryCapacitor.initNativeSdk). Firebase auth, ConfigCat and push are unaffected.✅ Applies cleanly
Remove AD_ID permissionRemoves the advertising-id + Ad Services (Privacy Sandbox) permissions (AD_ID, ACCESS_ADSERVICES_*).✅ Applies cleanly
Change app name (on by default)Renames the app to CrazyGames Morphe (editable in patch options).✅ Verified

Notes & limitations

  • Play Automatic Integrity Protection (PairIP) — CrazyGames ships with Google Play's PairIP licensing guard, which redirects any non-Play / re-signed install to the store. Bypass Play license check is required and on by default; without it the patched app won't open. This build has no PairIP code-virtualization (VMRunner), so neutering the license check is safe.
  • Capacitor WebView app — most of CrazyGames is the remote Next.js portal (app.crazygames.com) rendered in a WebView. These patches only touch the native ad/telemetry shell.
  • In-page web video ads remain — the pre/mid-roll ads shown inside a game come from CrazyGames' servers as web content, not the native ad SDK, so they are not in the app bytecode and cannot be removed here. "Remove ads" kills the native interstitial/banner/rewarded layer only.
  • Auto-reward is client-side — the rewarded bypass fires the reward listener event the web grants on. If CrazyGames adds server-side reward verification, the reward simply won't be granted (no crash).
  • Package kept — the package is not renamed, so Google/Facebook/Apple sign-in keeps working. The patched app installs over / conflicts with the Play Store version rather than alongside it.
  • Native anti-tamper — the app ships ByteDance Pangle's libpglarmor.so / libsigner.so; a re-signed APK may trip a native integrity check (best case Pangle silently no-fills, worst case a launch crash — untested).
  • Version — pinned to 1.6.7. The AdMob/Sentry plugin classes and method names are stable, but the Capacitor helper classes (PluginCall/JSObject/resolve) are R8-obfuscated, so the injected bytecode is version-specific.

🩹 JioHotstar patches

Android TV build (in.startv.hotstar, leanback), supplied as the .apkm split bundle.

PatchWhat it doesStatus
Bypass proxy/VPN security block (on by default)Defeats the "Something is interfering with your secure connection" (NET_201) screen shown on a VPN. The app self-enforces a server-sent proxy verdict (X-Hs-SetProxyState) via the ProxyStateInterceptor; this neuters the handler that stores that verdict (client stays "unblocked") and the periodic proxy-state refresh coroutines that otherwise re-fetch endlessly and make the app lag.✅ Device-confirmed (India VPN works, playback OK)
Remove adsClears the SSAI ssaiTag in the AdMetadata constructor so the client requests a clean, non-ad-stitched stream (removes mid/pre-roll), and hides the home masthead banner render.✅ Applies cleanly
Spoof device-integrity self-reportForces the securityLib checks (VPN/proxy/root/debugger/ports/files) false so the attestation the app sends looks clean.✅ Applies cleanly
Spoof device attestationForces all 8 security flags in the attestation blob (Kg/b) — including IsTampered (from the native tamper checker, which the self-report patch above does NOT cover) — to false at the constructor. The re-signed build otherwise sends IsTampered=true, which flags the account and locks it 24h (error NM-4290). ⚠️ Only removes a client-sent signal; the server still sees the VPN IP.✅ Applies cleanly
Disable analytics / Remove AD_IDFirebase flags off (CleverTap left intact) + strips AD_ID/AdServices perms.✅ Applies cleanly
Premium unlock (UI)MyPageData.getIsSubscribed→true, DownloadInfo.getIsPremium→false, subscription nudge suppressed. UI only — real content stays server + Widevine gated.✅ Applies cleanly
Enable screenshots / screen mirroring / all codecs+4K / HDR10FLAG_SECURE off (UI only), multi-display block relaxed, codec/HDR capability checks forced on.✅ Applies cleanly
Change app name (on by default)Renames to JioHotstar Morphe (package kept).✅ Verified

Notes & limitations

  • ⚠️ Account-ban risk — JioHotstar does server-side fraud analysis. Re-signing + VPN + these client patches got a real account locked 24h for "suspicious activity" (NM-4290) because the attestation blob was sending IsTampered=true. The Spoof device attestation patch fixes that client-sent signal, but the server still sees your VPN exit IP and an already-flagged account stays on their radar. Do not run this on an account you cannot afford to lose — test on a throwaway Jio number first. For a real/paid subscription, use the official app.
  • VPN bypass is novel — it is not in any public reference set; the block is client-enforced off a server verdict, so neutering the client store defeats it. If JioHotstar adds pure server-side IP playback enforcement in future, this could stop working.
  • Flagged VPN exit IP — if the security error or a lock appears, the specific VPN server's IP is likely blocklisted; switching to a different (ideally residential/dedicated) India IP clears it. Multiple apps breaking at once on the same VPN = flagged IP, not a patch fault.
  • Corner brand watermark cannot be removed — it is forensic/stream-baked (server-side), not a client render.
  • Signature bypass not needed / not ported — the re-signed build already plays, and the reference getSignFromJNI tamper hook does not exist in this version.
  • Ad approach credited to Paresh-Maheshwari (GPL-3.0) for the premium/screenshot/mirroring/codecs/HDR hooks.

🩹 Vi Movies and TV patches

Android TV build (com.vimtv, YuppTV OTT). No anti-tamper/VPN — clean re-sign.

PatchWhat it doesStatus
Remove adsForces AdUrlResponse.getAdUrlTypes()→null and TorcAiAdConfig.isAdEnabled()→false, so the player builds no IMA/SSAI ad-tag URL and no pre/mid-roll ad loads.✅ Applies cleanly
Disable analytics / Remove AD_IDFirebase flags off (CleverTap left) + strips AD_ID/AdServices perms.✅ Applies cleanly
Change app name (on by default)Renames to Vi Movies and TV Morphe (package kept).✅ Verified
Premium unlock (UI)Forces client isSubscribed flags true. UI only — content stays server + Widevine gated (may show items as available that the server still refuses).✅ Applies cleanly

🩹 JioTV+ patches

Android TV build (com.jio.media.jiotvplus, PatchWall UI). No anti-tamper/VPN — clean re-sign.

PatchWhat it doesStatus
Remove adsNeuters JioAds display/banner ads (JioAdView.loadAd/cacheAd) and all player video ads — pre/mid/post-roll + SSAI stitch — by no-oping VMAPAdsHelper.fetchAds.✅ Applies cleanly
Disable analytics / Remove AD_IDFirebase flags off (CleverTap left) + strips AD_ID/AdServices perms.✅ Applies cleanly
Change app name (on by default)Renames to JioTV+ Morphe (package kept).✅ Verified

Notes & limitations

  • No premium patch — JioTV+ has no client paywall flag (the isPremium field is ad-request telemetry). Content is server-entitlement + Widevine gated, so there is nothing client-side to unlock.

📲 How to use

These patches are distributed as a .mpp bundle for Morphe Manager.

  • In Morphe Manager → Patch bundles → Add → Enter URL, paste the raw patches-bundle.json URL (this is the source URL the Manager expects — not the repository URL): https://raw.githubusercontent.com/durgesh0505/chiggi_morphe_patches/refs/heads/main/patches-bundle.json
  • Or download the bundle directly: patches-1.15.1.mpp

Patch the SonyLIV Android TV APK or the Nutrilio bundle with Morphe, then sideload the result onto your device (both ship as split APKs; Morphe handles merging and signing).

Re-patching an APKM locally (helper script)

scripts/repatch_sonyliv.sh patches a SonyLIV Android TV .apkm with this patch set (merging splits into one universal APK), applies the app-name / package-name options, and signs it with a keystore:

./scripts/repatch_sonyliv.sh path/to/sonyliv.apkm
# or run with no argument to pick the .apkm interactively

Override the defaults with environment variables, e.g. APP_NAME="My LIV" PACKAGE_NAME=com.sonyliv.custom KEYSTORE=./my.keystore ./scripts/repatch_sonyliv.sh app.apkm.

scripts/repatch_nutrilio.sh does the same for the Nutrilio split bundle (accepts the .zip download, copies it to .apks, enables the rename + food-search-bar patches, and signs):

./scripts/repatch_nutrilio.sh net.nutrilio.zip
# defaults: APP_NAME="Nutrilio Morphe" PACKAGE_NAME=net.nutrilio.morphe SEARCH_BAR=1

Both scripts use a locally built bundle if present, otherwise download the latest release. Requires JDK 17+, the Android SDK, and morphe-cli.

🛠️ Building from source

Requirements: JDK 17+ and the Android SDK (compileSdk 36).

A GitHub Personal Access Token with the read:packages scope is required to resolve morphe-patcher from the Morphe GitHub Packages registry. Add it to ~/.gradle/gradle.properties:

gpr.user=YOUR_GITHUB_USERNAME
gpr.key=YOUR_GITHUB_TOKEN

Then build the patch bundle:

./gradlew buildAndroid
# Output: patches/build/libs/patches-<version>.mpp

List or apply the patches with morphe-cli:

java -jar morphe-cli.jar list-patches --patches=patches/build/libs/patches-1.15.1.mpp -v
java -jar morphe-cli.jar patch -p patches/build/libs/patches-1.15.1.mpp -o out.apk base.apk

📜 License

Licensed under the GNU General Public License v3.0, with the additional GPL Section 7 terms described in NOTICE. These patches are based on the prior work of Morphe and ReVanced; the NOTICE file is preserved as required. This project uses its own identity and is not associated with the Morphe project name.

Contributors

Languages

Kotlin

85.2%

Java

10.3%

Shell

4.5%