Disable screenshot detection on Android 14

This commit is contained in:
tehcneko 2023-12-06 09:59:15 +08:00
parent 7ace25f613
commit add84ff217
3 changed files with 32 additions and 11 deletions

View File

@ -21,6 +21,7 @@ public class DisableFlagSecure implements IXposedHookLoadPackage {
static { static {
Method m = null; Method m = null;
try { try {
//noinspection JavaReflectionMemberAccess
m = XposedBridge.class.getDeclaredMethod("deoptimizeMethod", Member.class); m = XposedBridge.class.getDeclaredMethod("deoptimizeMethod", Member.class);
} catch (Throwable t) { } catch (Throwable t) {
XposedBridge.log(t); XposedBridge.log(t);
@ -40,17 +41,6 @@ public class DisableFlagSecure implements IXposedHookLoadPackage {
@Override @Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) { public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) {
if (loadPackageParam.packageName.equals("android")) { if (loadPackageParam.packageName.equals("android")) {
try {
Class<?> windowsManagerServiceImpl = XposedHelpers.findClass("com.android.server.wm.WindowManagerServiceImpl", loadPackageParam.classLoader);
if (windowsManagerServiceImpl != null) {
XposedBridge.hookAllMethods(
windowsManagerServiceImpl,
"notAllowCaptureDisplay",
XC_MethodReplacement.returnConstant(false));
}
} catch (Throwable t) {
XposedBridge.log(t);
}
try { try {
Class<?> windowsState = XposedHelpers.findClass("com.android.server.wm.WindowState", loadPackageParam.classLoader); Class<?> windowsState = XposedHelpers.findClass("com.android.server.wm.WindowState", loadPackageParam.classLoader);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
@ -69,6 +59,19 @@ public class DisableFlagSecure implements IXposedHookLoadPackage {
} catch (Throwable t) { } catch (Throwable t) {
XposedBridge.log(t); XposedBridge.log(t);
} }
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
try {
XposedHelpers.findAndHookMethod(
"com.android.server.wm.WindowManagerService",
loadPackageParam.classLoader,
"registerScreenCaptureObserver",
"android.os.IBinder",
"android.app.IScreenCaptureObserver",
XC_MethodReplacement.DO_NOTHING);
} catch (Throwable t) {
XposedBridge.log(t);
}
}
try { try {
deoptimizeMethod(XposedHelpers.findClass("com.android.server.wm.WindowStateAnimator", loadPackageParam.classLoader), "createSurfaceLocked"); deoptimizeMethod(XposedHelpers.findClass("com.android.server.wm.WindowStateAnimator", loadPackageParam.classLoader), "createSurfaceLocked");
var c = XposedHelpers.findClass("com.android.server.display.DisplayManagerService", loadPackageParam.classLoader); var c = XposedHelpers.findClass("com.android.server.display.DisplayManagerService", loadPackageParam.classLoader);
@ -98,6 +101,17 @@ public class DisableFlagSecure implements IXposedHookLoadPackage {
} catch (Throwable t) { } catch (Throwable t) {
XposedBridge.log(t); XposedBridge.log(t);
} }
try {
Class<?> windowsManagerServiceImpl = XposedHelpers.findClass("com.android.server.wm.WindowManagerServiceImpl", loadPackageParam.classLoader);
if (windowsManagerServiceImpl != null) {
XposedBridge.hookAllMethods(
windowsManagerServiceImpl,
"notAllowCaptureDisplay",
XC_MethodReplacement.returnConstant(false));
}
} catch (Throwable t) {
XposedBridge.log(t);
}
} else if (loadPackageParam.packageName.equals("com.flyme.systemuiex")) { } else if (loadPackageParam.packageName.equals("com.flyme.systemuiex")) {
try { try {
XposedHelpers.findAndHookMethod("android.view.SurfaceControl$ScreenshotHardwareBuffer", loadPackageParam.classLoader, "containsSecureLayers", XC_MethodReplacement.returnConstant(false)); XposedHelpers.findAndHookMethod("android.view.SurfaceControl$ScreenshotHardwareBuffer", loadPackageParam.classLoader, "containsSecureLayers", XC_MethodReplacement.returnConstant(false));

View File

@ -0,0 +1,3 @@
<resources>
<string name="xposed_description">Disable FLAG_SECURE on all windows, enabling screenshots in apps that normally wouldn\'t allow it and disabling screenshot detection.</string>
</resources>

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="xposed_description">对所有 Window 禁用 FLAG_SECURE在通常不允许截图的应用中启用屏幕截图并禁用截图检测。</string>
</resources>