From 42ae2ab20dcb8dff68340295b42ff212b6ba8a39 Mon Sep 17 00:00:00 2001 From: tehcneko Date: Sun, 18 Aug 2024 10:02:26 +0800 Subject: [PATCH] Disable screen record detection on Android 15 --- .../disableflagsecure/DisableFlagSecure.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/app/src/main/java/io/github/lsposed/disableflagsecure/DisableFlagSecure.java b/app/src/main/java/io/github/lsposed/disableflagsecure/DisableFlagSecure.java index 5152f9f..a32dd4b 100644 --- a/app/src/main/java/io/github/lsposed/disableflagsecure/DisableFlagSecure.java +++ b/app/src/main/java/io/github/lsposed/disableflagsecure/DisableFlagSecure.java @@ -46,6 +46,15 @@ public class DisableFlagSecure extends XposedModule { log("deoptimize system server failed", t); } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) { + // Screen record detection (V) + try { + hookWindowManagerService(classLoader); + } catch (Throwable t) { + log("hook WindowManagerService failed", t); + } + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { // Screenshot detection (U~V) try { @@ -259,6 +268,14 @@ public class DisableFlagSecure extends XposedModule { hook(method, ReturnNullHooker.class); } + @TargetApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) + private void hookWindowManagerService(ClassLoader classLoader) throws ClassNotFoundException, NoSuchMethodException { + var windowManagerServiceClazz = classLoader.loadClass("com.android.server.wm.WindowManagerService"); + var iScreenRecordingCallbackClazz = classLoader.loadClass("android.window.IScreenRecordingCallback"); + var method = windowManagerServiceClazz.getDeclaredMethod("registerScreenRecordingCallback", iScreenRecordingCallbackClazz); + hook(method, ReturnFalseHooker.class); + } + @TargetApi(Build.VERSION_CODES.S) private void hookActivityManagerService(ClassLoader classLoader) throws ClassNotFoundException, NoSuchMethodException { var activityTaskManagerServiceClazz = classLoader.loadClass("com.android.server.am.ActivityManagerService");