From 8ecc4d1d8ec6cc21939304f5e08d6da1957d0510 Mon Sep 17 00:00:00 2001 From: 1fexd Date: Tue, 11 Mar 2025 07:13:29 +0100 Subject: [PATCH 01/10] feat: Settings spoof poc --- .../settings/spoof-settings/build.gradle.kts | 16 ++++++ .../src/main/AndroidManifest.xml | 1 + .../spoof/settings/SpoofSettingsPatch.java | 20 +++++++ patches/api/patches.api | 5 ++ .../all/misc/adb/SpoofAdbEnabledPatch.kt | 56 +++++++++++++++++++ 5 files changed, 98 insertions(+) create mode 100644 extensions/all/misc/settings/spoof-settings/build.gradle.kts create mode 100644 extensions/all/misc/settings/spoof-settings/src/main/AndroidManifest.xml create mode 100644 extensions/all/misc/settings/spoof-settings/src/main/java/app/revanced/extension/all/spoof/settings/SpoofSettingsPatch.java create mode 100644 patches/src/main/kotlin/app/revanced/patches/all/misc/adb/SpoofAdbEnabledPatch.kt diff --git a/extensions/all/misc/settings/spoof-settings/build.gradle.kts b/extensions/all/misc/settings/spoof-settings/build.gradle.kts new file mode 100644 index 0000000000..18568df5c5 --- /dev/null +++ b/extensions/all/misc/settings/spoof-settings/build.gradle.kts @@ -0,0 +1,16 @@ +android { + namespace = "app.revanced.extension" + + defaultConfig { + minSdk = 21 + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } +} + +dependencies { + compileOnly(libs.annotation) +} diff --git a/extensions/all/misc/settings/spoof-settings/src/main/AndroidManifest.xml b/extensions/all/misc/settings/spoof-settings/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..15e7c2ae67 --- /dev/null +++ b/extensions/all/misc/settings/spoof-settings/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/extensions/all/misc/settings/spoof-settings/src/main/java/app/revanced/extension/all/spoof/settings/SpoofSettingsPatch.java b/extensions/all/misc/settings/spoof-settings/src/main/java/app/revanced/extension/all/spoof/settings/SpoofSettingsPatch.java new file mode 100644 index 0000000000..f3bad2fdee --- /dev/null +++ b/extensions/all/misc/settings/spoof-settings/src/main/java/app/revanced/extension/all/spoof/settings/SpoofSettingsPatch.java @@ -0,0 +1,20 @@ +package app.revanced.extension.all.spoof.settings; + +import android.content.ContentResolver; + +import android.provider.Settings; + +@SuppressWarnings("unused") +public final class SpoofSettingsPatch { + public static int getInt(ContentResolver cr, String name, int def) { + if (name.equals("adb_enabled")) { + return 0; + } + + if(name.equals("development_settings_enabled")) { + return 0; + } + + return Settings.Global.getInt(cr, name, def); + } +} diff --git a/patches/api/patches.api b/patches/api/patches.api index 94aee7801e..46949adf75 100644 --- a/patches/api/patches.api +++ b/patches/api/patches.api @@ -2,6 +2,11 @@ public final class app/revanced/patches/all/misc/activity/exportall/ExportAllAct public static final fun getExportAllActivitiesPatch ()Lapp/revanced/patcher/patch/ResourcePatch; } +public final class app/revanced/patches/all/misc/adb/SpoofAdbEnabledPatchKt { + public static final fun getSETTINGS_GLOBAL_CLASS_DESCRIPTOR ()Ljava/lang/String; + public static final fun getSpoofAdbEnabledPatch ()Lapp/revanced/patcher/patch/BytecodePatch; +} + public final class app/revanced/patches/all/misc/build/BaseSpoofBuildInfoPatchKt { public static final fun baseSpoofBuildInfoPatch (Lkotlin/jvm/functions/Function0;)Lapp/revanced/patcher/patch/BytecodePatch; } diff --git a/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/SpoofAdbEnabledPatch.kt b/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/SpoofAdbEnabledPatch.kt new file mode 100644 index 0000000000..9db0398942 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/SpoofAdbEnabledPatch.kt @@ -0,0 +1,56 @@ +package app.revanced.patches.all.misc.adb + +import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction +import app.revanced.patcher.patch.booleanOption +import app.revanced.patcher.patch.bytecodePatch +import app.revanced.patches.all.misc.transformation.transformInstructionsPatch +import app.revanced.util.getReference +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c +import com.android.tools.smali.dexlib2.iface.reference.MethodReference + +internal const val EXTENSION_CLASS_DESCRIPTOR_PREFIX = + "Lapp/revanced/extension/all/spoof/settings/SpoofSettingsPatch" + + +val SETTINGS_GLOBAL_CLASS_DESCRIPTOR = "Landroid/provider/Settings\$Global;" + +//->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I + +@Suppress("unused") +val spoofAdbEnabledPatch = bytecodePatch( + name = "Spoof ADB enabled", + description = "Allows spoofing of the 'adb_enabled' setting.", + use = true, +) { + extendWith("extensions/all/misc/settings/spoof-settings.rve") + + val enabledOption by booleanOption( + key = "enabled", + default = false, + title = "Enabled", + description = "The status to spoof.", + ) + + dependsOn( + transformInstructionsPatch( + filterMap = filterMap@{ classDef, method, instruction, instructionIndex -> + if (instruction.opcode != Opcode.INVOKE_STATIC) return@filterMap null + + val reference = instruction.getReference() ?: return@filterMap null + if(reference.definingClass != SETTINGS_GLOBAL_CLASS_DESCRIPTOR) return@filterMap null + if(reference.name != "getInt") return@filterMap null + if(reference.parameterTypes != listOf("Landroid/content/ContentResolver;", "Ljava/lang/String;", "I")) return@filterMap null + if(reference.returnType != "I") return@filterMap null + + instructionIndex to instruction as Instruction35c + }, + transform = { method, entry -> + val (idx, instruction) = entry + + method.replaceInstruction(idx, + "invoke-static {v${instruction.registerC}, v${instruction.registerD}, v${instruction.registerE}}, $EXTENSION_CLASS_DESCRIPTOR_PREFIX;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I") + } + ) + ) +} From 1eb769c1a7cb3bad333516c12a70790208f1f14a Mon Sep 17 00:00:00 2001 From: 1fexd Date: Tue, 11 Mar 2025 17:55:04 +0100 Subject: [PATCH 02/10] chore: Rework spoofing --- .../spoof-adb}/build.gradle.kts | 0 .../spoof-adb}/src/main/AndroidManifest.xml | 0 .../all/spoof/adb/SpoofAdbPatch.java | 26 +++++++++ .../spoof/settings/SpoofSettingsPatch.java | 20 ------- patches/api/patches.api | 5 +- .../all/misc/adb/SpoofAdbEnabledPatch.kt | 56 ------------------- .../patches/all/misc/adb/SpoofAdbPatch.kt | 52 +++++++++++++++++ 7 files changed, 80 insertions(+), 79 deletions(-) rename extensions/all/misc/{settings/spoof-settings => adb/spoof-adb}/build.gradle.kts (100%) rename extensions/all/misc/{settings/spoof-settings => adb/spoof-adb}/src/main/AndroidManifest.xml (100%) create mode 100644 extensions/all/misc/adb/spoof-adb/src/main/java/app/revanced/extension/all/spoof/adb/SpoofAdbPatch.java delete mode 100644 extensions/all/misc/settings/spoof-settings/src/main/java/app/revanced/extension/all/spoof/settings/SpoofSettingsPatch.java delete mode 100644 patches/src/main/kotlin/app/revanced/patches/all/misc/adb/SpoofAdbEnabledPatch.kt create mode 100644 patches/src/main/kotlin/app/revanced/patches/all/misc/adb/SpoofAdbPatch.kt diff --git a/extensions/all/misc/settings/spoof-settings/build.gradle.kts b/extensions/all/misc/adb/spoof-adb/build.gradle.kts similarity index 100% rename from extensions/all/misc/settings/spoof-settings/build.gradle.kts rename to extensions/all/misc/adb/spoof-adb/build.gradle.kts diff --git a/extensions/all/misc/settings/spoof-settings/src/main/AndroidManifest.xml b/extensions/all/misc/adb/spoof-adb/src/main/AndroidManifest.xml similarity index 100% rename from extensions/all/misc/settings/spoof-settings/src/main/AndroidManifest.xml rename to extensions/all/misc/adb/spoof-adb/src/main/AndroidManifest.xml diff --git a/extensions/all/misc/adb/spoof-adb/src/main/java/app/revanced/extension/all/spoof/adb/SpoofAdbPatch.java b/extensions/all/misc/adb/spoof-adb/src/main/java/app/revanced/extension/all/spoof/adb/SpoofAdbPatch.java new file mode 100644 index 0000000000..0e8264130d --- /dev/null +++ b/extensions/all/misc/adb/spoof-adb/src/main/java/app/revanced/extension/all/spoof/adb/SpoofAdbPatch.java @@ -0,0 +1,26 @@ +package app.revanced.extension.all.spoof.adb; + +import android.content.ContentResolver; +import android.provider.Settings; +import java.util.Set; + +@SuppressWarnings("unused") +public final class SpoofAdbPatch { + private static final Set SPOOF_SETTINGS = Set.of("adb_enabled", "adb_wifi_enabled", "development_settings_enabled"); + + public static int getInt(ContentResolver cr, String name) throws Settings.SettingNotFoundException { + if (SPOOF_SETTINGS.contains(name)) { + return 0; + } + + return Settings.Global.getInt(cr, name); + } + + public static int getInt(ContentResolver cr, String name, int def) { + if (SPOOF_SETTINGS.contains(name)) { + return 0; + } + + return Settings.Global.getInt(cr, name, def); + } +} diff --git a/extensions/all/misc/settings/spoof-settings/src/main/java/app/revanced/extension/all/spoof/settings/SpoofSettingsPatch.java b/extensions/all/misc/settings/spoof-settings/src/main/java/app/revanced/extension/all/spoof/settings/SpoofSettingsPatch.java deleted file mode 100644 index f3bad2fdee..0000000000 --- a/extensions/all/misc/settings/spoof-settings/src/main/java/app/revanced/extension/all/spoof/settings/SpoofSettingsPatch.java +++ /dev/null @@ -1,20 +0,0 @@ -package app.revanced.extension.all.spoof.settings; - -import android.content.ContentResolver; - -import android.provider.Settings; - -@SuppressWarnings("unused") -public final class SpoofSettingsPatch { - public static int getInt(ContentResolver cr, String name, int def) { - if (name.equals("adb_enabled")) { - return 0; - } - - if(name.equals("development_settings_enabled")) { - return 0; - } - - return Settings.Global.getInt(cr, name, def); - } -} diff --git a/patches/api/patches.api b/patches/api/patches.api index 46949adf75..f3c9f93f50 100644 --- a/patches/api/patches.api +++ b/patches/api/patches.api @@ -2,9 +2,8 @@ public final class app/revanced/patches/all/misc/activity/exportall/ExportAllAct public static final fun getExportAllActivitiesPatch ()Lapp/revanced/patcher/patch/ResourcePatch; } -public final class app/revanced/patches/all/misc/adb/SpoofAdbEnabledPatchKt { - public static final fun getSETTINGS_GLOBAL_CLASS_DESCRIPTOR ()Ljava/lang/String; - public static final fun getSpoofAdbEnabledPatch ()Lapp/revanced/patcher/patch/BytecodePatch; +public final class app/revanced/patches/all/misc/adb/SpoofAdbPatchKt { + public static final fun getSpoofAdbStatusPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } public final class app/revanced/patches/all/misc/build/BaseSpoofBuildInfoPatchKt { diff --git a/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/SpoofAdbEnabledPatch.kt b/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/SpoofAdbEnabledPatch.kt deleted file mode 100644 index 9db0398942..0000000000 --- a/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/SpoofAdbEnabledPatch.kt +++ /dev/null @@ -1,56 +0,0 @@ -package app.revanced.patches.all.misc.adb - -import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction -import app.revanced.patcher.patch.booleanOption -import app.revanced.patcher.patch.bytecodePatch -import app.revanced.patches.all.misc.transformation.transformInstructionsPatch -import app.revanced.util.getReference -import com.android.tools.smali.dexlib2.Opcode -import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c -import com.android.tools.smali.dexlib2.iface.reference.MethodReference - -internal const val EXTENSION_CLASS_DESCRIPTOR_PREFIX = - "Lapp/revanced/extension/all/spoof/settings/SpoofSettingsPatch" - - -val SETTINGS_GLOBAL_CLASS_DESCRIPTOR = "Landroid/provider/Settings\$Global;" - -//->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I - -@Suppress("unused") -val spoofAdbEnabledPatch = bytecodePatch( - name = "Spoof ADB enabled", - description = "Allows spoofing of the 'adb_enabled' setting.", - use = true, -) { - extendWith("extensions/all/misc/settings/spoof-settings.rve") - - val enabledOption by booleanOption( - key = "enabled", - default = false, - title = "Enabled", - description = "The status to spoof.", - ) - - dependsOn( - transformInstructionsPatch( - filterMap = filterMap@{ classDef, method, instruction, instructionIndex -> - if (instruction.opcode != Opcode.INVOKE_STATIC) return@filterMap null - - val reference = instruction.getReference() ?: return@filterMap null - if(reference.definingClass != SETTINGS_GLOBAL_CLASS_DESCRIPTOR) return@filterMap null - if(reference.name != "getInt") return@filterMap null - if(reference.parameterTypes != listOf("Landroid/content/ContentResolver;", "Ljava/lang/String;", "I")) return@filterMap null - if(reference.returnType != "I") return@filterMap null - - instructionIndex to instruction as Instruction35c - }, - transform = { method, entry -> - val (idx, instruction) = entry - - method.replaceInstruction(idx, - "invoke-static {v${instruction.registerC}, v${instruction.registerD}, v${instruction.registerE}}, $EXTENSION_CLASS_DESCRIPTOR_PREFIX;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I") - } - ) - ) -} diff --git a/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/SpoofAdbPatch.kt b/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/SpoofAdbPatch.kt new file mode 100644 index 0000000000..42378b84bd --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/SpoofAdbPatch.kt @@ -0,0 +1,52 @@ +package app.revanced.patches.all.misc.adb + +import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction +import app.revanced.patcher.patch.bytecodePatch +import app.revanced.patches.all.misc.transformation.transformInstructionsPatch +import app.revanced.util.getReference +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c +import com.android.tools.smali.dexlib2.iface.reference.MethodReference + +internal const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/all/spoof/adb/SpoofAdbPatch;" +internal const val SETTINGS_GLOBAL_CLASS_DESCRIPTOR = "Landroid/provider/Settings\$Global;" + +@Suppress("unused") +val spoofAdbStatusPatch = bytecodePatch( + name = "Spoof ADB status", + description = "Allows spoofing ADB and development settings status to appear disabled to apps.", + use = false, +) { + extendWith("extensions/all/misc/adb/spoof-adb.rve") + + dependsOn( + transformInstructionsPatch( + filterMap = filterMap@{ classDef, method, instruction, instructionIndex -> + if (instruction.opcode != Opcode.INVOKE_STATIC) return@filterMap null + + val reference = instruction.getReference() ?: return@filterMap null + + if (reference.definingClass != SETTINGS_GLOBAL_CLASS_DESCRIPTOR + || reference.name != "getInt" + || reference.returnType != "I" + ) return@filterMap null + + Triple(instruction as Instruction35c, instructionIndex, reference.parameterTypes) + }, + transform = { method, entry -> + val (instruction, idx, parameterTypes) = entry + val parameterString = parameterTypes.joinToString(separator = "") + + val registerString = when (parameterTypes.size) { + 2 -> "v${instruction.registerC}, v${instruction.registerD}" + else -> "v${instruction.registerC}, v${instruction.registerD}, v${instruction.registerE}" + } + + method.replaceInstruction( + idx, + "invoke-static {$registerString}, $EXTENSION_CLASS_DESCRIPTOR->getInt($parameterString)I" + ) + } + ) + ) +} From bcfbdca8a6d5e629a707e0691e9930cebf42c433 Mon Sep 17 00:00:00 2001 From: 1fexd Date: Fri, 14 Mar 2025 14:31:40 +0100 Subject: [PATCH 03/10] chore: Rename patch --- .../{spoof-adb => hide-adb}/build.gradle.kts | 0 .../src/main/AndroidManifest.xml | 0 .../extension/all/hide/adb/HideAdbPatch.java | 40 +++++++++++++++++++ .../all/spoof/adb/SpoofAdbPatch.java | 26 ------------ patches/api/patches.api | 4 +- .../adb/{SpoofAdbPatch.kt => HideAdbPatch.kt} | 8 ++-- 6 files changed, 46 insertions(+), 32 deletions(-) rename extensions/all/misc/adb/{spoof-adb => hide-adb}/build.gradle.kts (100%) rename extensions/all/misc/adb/{spoof-adb => hide-adb}/src/main/AndroidManifest.xml (100%) create mode 100644 extensions/all/misc/adb/hide-adb/src/main/java/app/revanced/extension/all/hide/adb/HideAdbPatch.java delete mode 100644 extensions/all/misc/adb/spoof-adb/src/main/java/app/revanced/extension/all/spoof/adb/SpoofAdbPatch.java rename patches/src/main/kotlin/app/revanced/patches/all/misc/adb/{SpoofAdbPatch.kt => HideAdbPatch.kt} (90%) diff --git a/extensions/all/misc/adb/spoof-adb/build.gradle.kts b/extensions/all/misc/adb/hide-adb/build.gradle.kts similarity index 100% rename from extensions/all/misc/adb/spoof-adb/build.gradle.kts rename to extensions/all/misc/adb/hide-adb/build.gradle.kts diff --git a/extensions/all/misc/adb/spoof-adb/src/main/AndroidManifest.xml b/extensions/all/misc/adb/hide-adb/src/main/AndroidManifest.xml similarity index 100% rename from extensions/all/misc/adb/spoof-adb/src/main/AndroidManifest.xml rename to extensions/all/misc/adb/hide-adb/src/main/AndroidManifest.xml diff --git a/extensions/all/misc/adb/hide-adb/src/main/java/app/revanced/extension/all/hide/adb/HideAdbPatch.java b/extensions/all/misc/adb/hide-adb/src/main/java/app/revanced/extension/all/hide/adb/HideAdbPatch.java new file mode 100644 index 0000000000..d03fc3cf53 --- /dev/null +++ b/extensions/all/misc/adb/hide-adb/src/main/java/app/revanced/extension/all/hide/adb/HideAdbPatch.java @@ -0,0 +1,40 @@ +package app.revanced.extension.all.hide.adb; + +import android.content.ContentResolver; +import android.provider.Settings; + +import java.util.Set; + +@SuppressWarnings("unused") +public final class HideAdbPatch { + private static final String[] SPOOF_SETTINGS = new String[]{ + "adb_enabled", + "adb_wifi_enabled", + "development_settings_enabled" + }; + + private static boolean shouldSpoof(String name) { + for (String spoofSetting : SPOOF_SETTINGS) { + if (!spoofSetting.equals(name)) continue; + return true; + } + + return false; + } + + public static int getInt(ContentResolver cr, String name) throws Settings.SettingNotFoundException { + if (shouldSpoof(name)) { + return 0; + } + + return Settings.Global.getInt(cr, name); + } + + public static int getInt(ContentResolver cr, String name, int def) { + if (shouldSpoof(name)) { + return 0; + } + + return Settings.Global.getInt(cr, name, def); + } +} diff --git a/extensions/all/misc/adb/spoof-adb/src/main/java/app/revanced/extension/all/spoof/adb/SpoofAdbPatch.java b/extensions/all/misc/adb/spoof-adb/src/main/java/app/revanced/extension/all/spoof/adb/SpoofAdbPatch.java deleted file mode 100644 index 0e8264130d..0000000000 --- a/extensions/all/misc/adb/spoof-adb/src/main/java/app/revanced/extension/all/spoof/adb/SpoofAdbPatch.java +++ /dev/null @@ -1,26 +0,0 @@ -package app.revanced.extension.all.spoof.adb; - -import android.content.ContentResolver; -import android.provider.Settings; -import java.util.Set; - -@SuppressWarnings("unused") -public final class SpoofAdbPatch { - private static final Set SPOOF_SETTINGS = Set.of("adb_enabled", "adb_wifi_enabled", "development_settings_enabled"); - - public static int getInt(ContentResolver cr, String name) throws Settings.SettingNotFoundException { - if (SPOOF_SETTINGS.contains(name)) { - return 0; - } - - return Settings.Global.getInt(cr, name); - } - - public static int getInt(ContentResolver cr, String name, int def) { - if (SPOOF_SETTINGS.contains(name)) { - return 0; - } - - return Settings.Global.getInt(cr, name, def); - } -} diff --git a/patches/api/patches.api b/patches/api/patches.api index f3c9f93f50..fa8d68461f 100644 --- a/patches/api/patches.api +++ b/patches/api/patches.api @@ -2,8 +2,8 @@ public final class app/revanced/patches/all/misc/activity/exportall/ExportAllAct public static final fun getExportAllActivitiesPatch ()Lapp/revanced/patcher/patch/ResourcePatch; } -public final class app/revanced/patches/all/misc/adb/SpoofAdbPatchKt { - public static final fun getSpoofAdbStatusPatch ()Lapp/revanced/patcher/patch/BytecodePatch; +public final class app/revanced/patches/all/misc/adb/HideAdbPatchKt { + public static final fun getHideAdbStatusPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } public final class app/revanced/patches/all/misc/build/BaseSpoofBuildInfoPatchKt { diff --git a/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/SpoofAdbPatch.kt b/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/HideAdbPatch.kt similarity index 90% rename from patches/src/main/kotlin/app/revanced/patches/all/misc/adb/SpoofAdbPatch.kt rename to patches/src/main/kotlin/app/revanced/patches/all/misc/adb/HideAdbPatch.kt index 42378b84bd..06ead30ea5 100644 --- a/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/SpoofAdbPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/HideAdbPatch.kt @@ -12,12 +12,12 @@ internal const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/all/spo internal const val SETTINGS_GLOBAL_CLASS_DESCRIPTOR = "Landroid/provider/Settings\$Global;" @Suppress("unused") -val spoofAdbStatusPatch = bytecodePatch( - name = "Spoof ADB status", - description = "Allows spoofing ADB and development settings status to appear disabled to apps.", +val hideAdbStatusPatch = bytecodePatch( + name = "Hide ADB status", + description = "Hide enabled development settings and/or ADB", use = false, ) { - extendWith("extensions/all/misc/adb/spoof-adb.rve") + extendWith("extensions/all/misc/adb/hide-adb.rve") dependsOn( transformInstructionsPatch( From c4f1a5f3e8ffcfa4c5c99c84e0291ee116bcf924 Mon Sep 17 00:00:00 2001 From: 1fexd Date: Fri, 14 Mar 2025 15:09:57 +0100 Subject: [PATCH 04/10] chore: Slight cleanup --- .../app/revanced/extension/all/hide/adb/HideAdbPatch.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/extensions/all/misc/adb/hide-adb/src/main/java/app/revanced/extension/all/hide/adb/HideAdbPatch.java b/extensions/all/misc/adb/hide-adb/src/main/java/app/revanced/extension/all/hide/adb/HideAdbPatch.java index d03fc3cf53..35b13e5772 100644 --- a/extensions/all/misc/adb/hide-adb/src/main/java/app/revanced/extension/all/hide/adb/HideAdbPatch.java +++ b/extensions/all/misc/adb/hide-adb/src/main/java/app/revanced/extension/all/hide/adb/HideAdbPatch.java @@ -3,15 +3,9 @@ import android.content.ContentResolver; import android.provider.Settings; -import java.util.Set; - @SuppressWarnings("unused") public final class HideAdbPatch { - private static final String[] SPOOF_SETTINGS = new String[]{ - "adb_enabled", - "adb_wifi_enabled", - "development_settings_enabled" - }; + private static final String[] SPOOF_SETTINGS = new String[]{"adb_enabled", "adb_wifi_enabled", "development_settings_enabled"}; private static boolean shouldSpoof(String name) { for (String spoofSetting : SPOOF_SETTINGS) { From 99c1c5f77d0f10864fc1b95daa6f6f990acc71e9 Mon Sep 17 00:00:00 2001 From: 1fexd Date: Fri, 14 Mar 2025 20:03:38 +0100 Subject: [PATCH 05/10] chore: Slight cleanup (2) --- .../extension/all/hide/adb/HideAdbPatch.java | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/extensions/all/misc/adb/hide-adb/src/main/java/app/revanced/extension/all/hide/adb/HideAdbPatch.java b/extensions/all/misc/adb/hide-adb/src/main/java/app/revanced/extension/all/hide/adb/HideAdbPatch.java index 35b13e5772..b64cf28e42 100644 --- a/extensions/all/misc/adb/hide-adb/src/main/java/app/revanced/extension/all/hide/adb/HideAdbPatch.java +++ b/extensions/all/misc/adb/hide-adb/src/main/java/app/revanced/extension/all/hide/adb/HideAdbPatch.java @@ -3,21 +3,15 @@ import android.content.ContentResolver; import android.provider.Settings; +import java.util.Arrays; +import java.util.List; + @SuppressWarnings("unused") public final class HideAdbPatch { - private static final String[] SPOOF_SETTINGS = new String[]{"adb_enabled", "adb_wifi_enabled", "development_settings_enabled"}; - - private static boolean shouldSpoof(String name) { - for (String spoofSetting : SPOOF_SETTINGS) { - if (!spoofSetting.equals(name)) continue; - return true; - } - - return false; - } + private static final List SPOOF_SETTINGS = Arrays.asList("adb_enabled", "adb_wifi_enabled", "development_settings_enabled"); public static int getInt(ContentResolver cr, String name) throws Settings.SettingNotFoundException { - if (shouldSpoof(name)) { + if (SPOOF_SETTINGS.contains(name)) { return 0; } @@ -25,7 +19,7 @@ public static int getInt(ContentResolver cr, String name) throws Settings.Settin } public static int getInt(ContentResolver cr, String name, int def) { - if (shouldSpoof(name)) { + if (SPOOF_SETTINGS.contains(name)) { return 0; } From c71167988efbd43facb8ecbf8248b6750a2a329b Mon Sep 17 00:00:00 2001 From: 1fexd Date: Tue, 18 Mar 2025 05:18:27 +0100 Subject: [PATCH 06/10] chore: Set consts to private --- .../kotlin/app/revanced/patches/all/misc/adb/HideAdbPatch.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/HideAdbPatch.kt b/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/HideAdbPatch.kt index 06ead30ea5..2988c38108 100644 --- a/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/HideAdbPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/HideAdbPatch.kt @@ -8,8 +8,8 @@ import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c import com.android.tools.smali.dexlib2.iface.reference.MethodReference -internal const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/all/spoof/adb/SpoofAdbPatch;" -internal const val SETTINGS_GLOBAL_CLASS_DESCRIPTOR = "Landroid/provider/Settings\$Global;" +private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/all/spoof/adb/SpoofAdbPatch;" +private const val SETTINGS_GLOBAL_CLASS_DESCRIPTOR = "Landroid/provider/Settings\$Global;" @Suppress("unused") val hideAdbStatusPatch = bytecodePatch( From 9f6635b322232f138d8e4305622f6ccdc5734471 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Wed, 2 Apr 2025 00:34:25 +0200 Subject: [PATCH 07/10] Apply suggestions from code review --- .../kotlin/app/revanced/patches/all/misc/adb/HideAdbPatch.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/HideAdbPatch.kt b/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/HideAdbPatch.kt index 2988c38108..6af1f6dfd4 100644 --- a/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/HideAdbPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/HideAdbPatch.kt @@ -44,7 +44,7 @@ val hideAdbStatusPatch = bytecodePatch( method.replaceInstruction( idx, - "invoke-static {$registerString}, $EXTENSION_CLASS_DESCRIPTOR->getInt($parameterString)I" + "invoke-static { $registerString }, $EXTENSION_CLASS_DESCRIPTOR->getInt($parameterString)I" ) } ) From 1328847ca8d27036eb603b8a8b19de33af911002 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Wed, 2 Apr 2025 00:34:45 +0200 Subject: [PATCH 08/10] Apply suggestions from code review --- .../kotlin/app/revanced/patches/all/misc/adb/HideAdbPatch.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/HideAdbPatch.kt b/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/HideAdbPatch.kt index 6af1f6dfd4..23eab69a0e 100644 --- a/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/HideAdbPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/HideAdbPatch.kt @@ -34,7 +34,7 @@ val hideAdbStatusPatch = bytecodePatch( Triple(instruction as Instruction35c, instructionIndex, reference.parameterTypes) }, transform = { method, entry -> - val (instruction, idx, parameterTypes) = entry + val (instruction, index, parameterTypes) = entry val parameterString = parameterTypes.joinToString(separator = "") val registerString = when (parameterTypes.size) { @@ -43,7 +43,7 @@ val hideAdbStatusPatch = bytecodePatch( } method.replaceInstruction( - idx, + index, "invoke-static { $registerString }, $EXTENSION_CLASS_DESCRIPTOR->getInt($parameterString)I" ) } From 6f772fa4984e213928edacf98eb3679a2b88e8ea Mon Sep 17 00:00:00 2001 From: 1fexd Date: Sat, 12 Apr 2025 07:41:28 +0200 Subject: [PATCH 09/10] chore: Use MethodUtil to compare method references --- .../patches/all/misc/adb/HideAdbPatch.kt | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/HideAdbPatch.kt b/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/HideAdbPatch.kt index 2988c38108..55951067f4 100644 --- a/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/HideAdbPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/HideAdbPatch.kt @@ -7,9 +7,17 @@ import app.revanced.util.getReference import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c import com.android.tools.smali.dexlib2.iface.reference.MethodReference +import com.android.tools.smali.dexlib2.immutable.reference.ImmutableMethodReference +import com.android.tools.smali.dexlib2.util.MethodUtil private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/all/spoof/adb/SpoofAdbPatch;" -private const val SETTINGS_GLOBAL_CLASS_DESCRIPTOR = "Landroid/provider/Settings\$Global;" + +private val SETTINGS_GLOBAL_GET_INT_METHOD_REFERENCE = ImmutableMethodReference( + "Landroid/provider/Settings\$Global;", + "getInt", + emptyList(), + "I" +) @Suppress("unused") val hideAdbStatusPatch = bytecodePatch( @@ -22,14 +30,11 @@ val hideAdbStatusPatch = bytecodePatch( dependsOn( transformInstructionsPatch( filterMap = filterMap@{ classDef, method, instruction, instructionIndex -> - if (instruction.opcode != Opcode.INVOKE_STATIC) return@filterMap null - - val reference = instruction.getReference() ?: return@filterMap null - - if (reference.definingClass != SETTINGS_GLOBAL_CLASS_DESCRIPTOR - || reference.name != "getInt" - || reference.returnType != "I" - ) return@filterMap null + val reference = instruction + .takeIf { it.opcode == Opcode.INVOKE_STATIC } + ?.getReference() + ?.takeIf { MethodUtil.methodSignaturesMatch(SETTINGS_GLOBAL_GET_INT_METHOD_REFERENCE, it) } + ?: return@filterMap null Triple(instruction as Instruction35c, instructionIndex, reference.parameterTypes) }, From e9c215c4efe546deaa0933a0f7cd6db099f79033 Mon Sep 17 00:00:00 2001 From: 1fexd <58902674+1fexd@users.noreply.github.com> Date: Sat, 12 Apr 2025 05:44:20 +0000 Subject: [PATCH 10/10] Update patches/src/main/kotlin/app/revanced/patches/all/misc/adb/HideAdbPatch.kt Co-authored-by: oSumAtrIX --- .../kotlin/app/revanced/patches/all/misc/adb/HideAdbPatch.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/HideAdbPatch.kt b/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/HideAdbPatch.kt index d8892bb82a..61a7c9dfb9 100644 --- a/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/HideAdbPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/all/misc/adb/HideAdbPatch.kt @@ -22,7 +22,7 @@ private val SETTINGS_GLOBAL_GET_INT_METHOD_REFERENCE = ImmutableMethodReference( @Suppress("unused") val hideAdbStatusPatch = bytecodePatch( name = "Hide ADB status", - description = "Hide enabled development settings and/or ADB", + description = "Hides enabled development settings and/or ADB.", use = false, ) { extendWith("extensions/all/misc/adb/hide-adb.rve")