Skip to content

Commit 3d53448

Browse files
committed
Hook SurfaceControl setSecure
1 parent 079c882 commit 3d53448

1 file changed

Lines changed: 27 additions & 1 deletion

File tree

app/src/main/java/io/github/lsposed/disableflagsecure/DisableFlagSecure.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,14 @@ public void onSystemServerLoaded(@NonNull SystemServerLoadedParam param) {
126126
log("hook WindowState failed", t);
127127
}
128128

129+
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
130+
try {
131+
hookSurfaceControl(classLoader);
132+
} catch (Throwable t) {
133+
log("hook SurfaceControl failed", t);
134+
}
135+
}
136+
129137
// oplus dumpsys
130138
// dumpsys window screenshot systemQuickTileScreenshotOut display_id=0
131139
try {
@@ -228,6 +236,13 @@ private void hookWindowState(ClassLoader classLoader) throws ClassNotFoundExcept
228236
hook(isSecureLockedMethod, SecureLockedHooker.class);
229237
}
230238

239+
private void hookSurfaceControl(ClassLoader classLoader) throws ClassNotFoundException, NoSuchMethodException {
240+
var windowStateClazz = classLoader.loadClass("android.view.SurfaceControl$Transaction");
241+
@SuppressLint("SoonBlockedPrivateApi")
242+
var setSecureMethod = windowStateClazz.getDeclaredMethod("setSecure", SurfaceControl.class, boolean.class);
243+
hook(setSecureMethod, SetSecureHooker.class);
244+
}
245+
231246
private static Field captureSecureLayersField;
232247

233248
private void hookScreenCapture(ClassLoader classLoader) throws ClassNotFoundException, NoSuchFieldException {
@@ -381,7 +396,7 @@ public static void before(@NonNull BeforeHookCallback callback) {
381396
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
382397
var uid = android.os.Process.myUid();
383398
// cannot bypass hasCaptureBlackoutContentPermission() in SurfaceFlinger.cpp
384-
// skipping this hook for S~T before implement native hook
399+
// skipping this hook for S~T
385400
if (uid != 1000 && uid != 1003) {
386401
return;
387402
}
@@ -450,6 +465,17 @@ public static void before(@NonNull BeforeHookCallback callback) {
450465
}
451466
}
452467

468+
@XposedHooker
469+
private static class SetSecureHooker implements Hooker {
470+
@BeforeInvocation
471+
public static void before(@NonNull BeforeHookCallback callback) {
472+
var isSecure = callback.getArgs()[1];
473+
if (isSecure instanceof Boolean) {
474+
callback.getArgs()[1] = false;
475+
}
476+
}
477+
}
478+
453479
@XposedHooker
454480
private static class ReturnTrueHooker implements Hooker {
455481
@BeforeInvocation

0 commit comments

Comments
 (0)