From 2d7cf86bfd2dbc16f864ce37257f13ad3c08a35f Mon Sep 17 00:00:00 2001 From: obXfuse Date: Wed, 18 Mar 2026 21:00:20 -0400 Subject: [PATCH 1/2] feat(amznmusic): add prevent log upload patch --- .../misc/uploadlogs/PreventUploadLogsPatch.kt | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 patches/src/main/kotlin/app/revanced/patches/amznmusic/misc/uploadlogs/PreventUploadLogsPatch.kt diff --git a/patches/src/main/kotlin/app/revanced/patches/amznmusic/misc/uploadlogs/PreventUploadLogsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/amznmusic/misc/uploadlogs/PreventUploadLogsPatch.kt new file mode 100644 index 0000000000..0c60def2c8 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/amznmusic/misc/uploadlogs/PreventUploadLogsPatch.kt @@ -0,0 +1,20 @@ +package app.revanced.patches.amznmusic.misc.uploadlogs + +import app.revanced.patcher.firstClassDef +import app.revanced.patcher.firstMethod +import app.revanced.patcher.patch.bytecodePatch +import app.revanced.util.returnEarly + +@Suppress("unused") +val preventUploadLogsPatch = bytecodePatch( + name = "Prevent log upload", + description = "Avoid uploading logs when the application crashes.", +) { + compatibleWith("com.amazon.mp3") + + apply { + var pendingCrashLogsClass = firstClassDef { type == "Lcom/amazon/mp3/det/PendingCrashLogs;" } + pendingCrashLogsClass.firstMethod { name == "uploadLogAfterCrash" }.returnEarly() + pendingCrashLogsClass.firstMethod { name == "uploadPendingCrashLogsIfRequired" }.returnEarly() + } +} From dfdd86aa7ac08c3ce0fae20d07e21325bb496ed9 Mon Sep 17 00:00:00 2001 From: obXfuse Date: Sat, 21 Mar 2026 03:25:11 -0400 Subject: [PATCH 2/2] refactor(amazonmusic): use fingerprints.kt file for matching --- patches/api/patches.api | 4 ++++ .../amazonmusic/privacy/Fingerprints.kt | 19 ++++++++++++++++++ .../privacy/PreventUploadLogsPatch.kt | 18 +++++++++++++++++ .../misc/uploadlogs/PreventUploadLogsPatch.kt | 20 ------------------- 4 files changed, 41 insertions(+), 20 deletions(-) create mode 100644 patches/src/main/kotlin/app/revanced/patches/amazonmusic/privacy/Fingerprints.kt create mode 100644 patches/src/main/kotlin/app/revanced/patches/amazonmusic/privacy/PreventUploadLogsPatch.kt delete mode 100644 patches/src/main/kotlin/app/revanced/patches/amznmusic/misc/uploadlogs/PreventUploadLogsPatch.kt diff --git a/patches/api/patches.api b/patches/api/patches.api index be251e84a5..db332bd061 100644 --- a/patches/api/patches.api +++ b/patches/api/patches.api @@ -153,6 +153,10 @@ public final class app/revanced/patches/amazon/DeepLinkingPatchKt { public static final fun getAlwaysAllowDeepLinkingPatch ()Lapp/revanced/patcher/patch/Patch; } +public final class app/revanced/patches/amazonmusic/privacy/PreventUploadLogsPatchKt { + public static final fun getPreventUploadLogsPatch ()Lapp/revanced/patcher/patch/Patch; +} + public final class app/revanced/patches/angulus/ads/RemoveAdsPatchKt { public static final fun getHideAdsPatch ()Lapp/revanced/patcher/patch/Patch; } diff --git a/patches/src/main/kotlin/app/revanced/patches/amazonmusic/privacy/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/amazonmusic/privacy/Fingerprints.kt new file mode 100644 index 0000000000..f75bcef2f2 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/amazonmusic/privacy/Fingerprints.kt @@ -0,0 +1,19 @@ +package app.revanced.patches.amazonmusic.privacy + +import app.revanced.patcher.gettingFirstClassDefDeclaratively +import app.revanced.patcher.gettingFirstMethodDeclaratively +import app.revanced.patcher.patch.BytecodePatchContext +import app.revanced.patcher.name +import app.revanced.patcher.type + +internal val BytecodePatchContext.pendingCrashLogsClass by gettingFirstClassDefDeclaratively { + type("Lcom/amazon/mp3/det/PendingCrashLogs;") +} + +internal val BytecodePatchContext.uploadLogAfterCrashMethod by gettingFirstMethodDeclaratively { + name("uploadLogAfterCrash") +} + +internal val BytecodePatchContext.uploadPendingCrashLogsIfRequiredMethod by gettingFirstMethodDeclaratively { + name("uploadPendingCrashLogsIfRequired") +} diff --git a/patches/src/main/kotlin/app/revanced/patches/amazonmusic/privacy/PreventUploadLogsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/amazonmusic/privacy/PreventUploadLogsPatch.kt new file mode 100644 index 0000000000..fe2767c979 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/amazonmusic/privacy/PreventUploadLogsPatch.kt @@ -0,0 +1,18 @@ +package app.revanced.patches.amazonmusic.privacy + +import app.revanced.patcher.firstMethod +import app.revanced.patcher.patch.bytecodePatch +import app.revanced.util.returnEarly + +@Suppress("unused") +val preventUploadLogsPatch = bytecodePatch( + name = "Prevent log upload", + description = "Avoid uploading logs when the application crashes.", +) { + compatibleWith("com.amazon.mp3") + + apply { + pendingCrashLogsClass.firstMethod(uploadLogAfterCrashMethod).returnEarly() + pendingCrashLogsClass.firstMethod(uploadPendingCrashLogsIfRequiredMethod).returnEarly() + } +} diff --git a/patches/src/main/kotlin/app/revanced/patches/amznmusic/misc/uploadlogs/PreventUploadLogsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/amznmusic/misc/uploadlogs/PreventUploadLogsPatch.kt deleted file mode 100644 index 0c60def2c8..0000000000 --- a/patches/src/main/kotlin/app/revanced/patches/amznmusic/misc/uploadlogs/PreventUploadLogsPatch.kt +++ /dev/null @@ -1,20 +0,0 @@ -package app.revanced.patches.amznmusic.misc.uploadlogs - -import app.revanced.patcher.firstClassDef -import app.revanced.patcher.firstMethod -import app.revanced.patcher.patch.bytecodePatch -import app.revanced.util.returnEarly - -@Suppress("unused") -val preventUploadLogsPatch = bytecodePatch( - name = "Prevent log upload", - description = "Avoid uploading logs when the application crashes.", -) { - compatibleWith("com.amazon.mp3") - - apply { - var pendingCrashLogsClass = firstClassDef { type == "Lcom/amazon/mp3/det/PendingCrashLogs;" } - pendingCrashLogsClass.firstMethod { name == "uploadLogAfterCrash" }.returnEarly() - pendingCrashLogsClass.firstMethod { name == "uploadPendingCrashLogsIfRequired" }.returnEarly() - } -}