Skip to content

Commit 46af709

Browse files
committed
Fix#106
1 parent ada5662 commit 46af709

1 file changed

Lines changed: 21 additions & 29 deletions

File tree

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

Lines changed: 21 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import androidx.annotation.NonNull;
1212
import androidx.annotation.RequiresApi;
1313

14-
import java.lang.reflect.Field;
1514
import java.util.Arrays;
1615
import java.util.function.BiConsumer;
1716
import java.util.function.BiPredicate;
@@ -229,13 +228,13 @@ private void hookWindowState(ClassLoader classLoader) throws ClassNotFoundExcept
229228
var walker = StackWalker.getInstance();
230229
var match = walker.walk(frames -> frames
231230
.map(StackWalker.StackFrame::getMethodName)
232-
.limit(6)
233-
.skip(2)
231+
.limit(10)
232+
.skip(6)
234233
.anyMatch(s -> s.equals("setInitialSurfaceControlProperties") || s.equals("createSurfaceLocked")));
235234
if (match) return chain.proceed();
236235
} else {
237236
var stackTrace = new Throwable().getStackTrace();
238-
for (int i = 4; i < stackTrace.length && i < 8; i++) {
237+
for (int i = 8; i < stackTrace.length && i < 12; i++) {
239238
var name = stackTrace[i].getMethodName();
240239
if (name.equals("setInitialSurfaceControlProperties") ||
241240
name.equals("createSurfaceLocked")) {
@@ -247,8 +246,6 @@ private void hookWindowState(ClassLoader classLoader) throws ClassNotFoundExcept
247246
});
248247
}
249248

250-
private static Field captureSecureLayersField;
251-
252249
private void hookScreenCapture(ClassLoader classLoader) throws ClassNotFoundException, NoSuchFieldException {
253250
Class<?> screenCaptureClazz;
254251
Class<?> captureArgsClazz;
@@ -262,11 +259,25 @@ private void hookScreenCapture(ClassLoader classLoader) throws ClassNotFoundExce
262259
screenCaptureClazz = SurfaceControl.class;
263260
captureArgsClazz = classLoader.loadClass("android.view.SurfaceControl$CaptureArgs");
264261
}
265-
captureSecureLayersField = captureArgsClazz.getDeclaredField(Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA &&
262+
var captureSecureLayersField = captureArgsClazz.getDeclaredField(Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA &&
266263
Build.VERSION.SDK_INT_FULL >= Build.VERSION_CODES_FULL.BAKLAVA_1 ? "mSecureContentPolicy" : "mCaptureSecureLayers");
267264
captureSecureLayersField.setAccessible(true);
268-
hookMethods(screenCaptureClazz, new ScreenCaptureHooker(), "nativeCaptureDisplay");
269-
hookMethods(screenCaptureClazz, new ScreenCaptureHooker(), "nativeCaptureLayers");
265+
Hooker hooker = chain -> {
266+
var captureArgs = chain.getArg(0);
267+
try {
268+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA &&
269+
Build.VERSION.SDK_INT_FULL >= Build.VERSION_CODES_FULL.BAKLAVA_1) {
270+
captureSecureLayersField.set(captureArgs, 1);
271+
} else {
272+
captureSecureLayersField.set(captureArgs, true);
273+
}
274+
} catch (IllegalAccessException t) {
275+
module.log(Log.ERROR, TAG, "ScreenCaptureHooker failed", t);
276+
}
277+
return chain.proceed();
278+
};
279+
hookMethods(screenCaptureClazz, hooker, "nativeCaptureDisplay");
280+
hookMethods(screenCaptureClazz, hooker, "nativeCaptureLayers");
270281
}
271282

272283
private void hookDisplayControl(ClassLoader classLoader) throws ClassNotFoundException, NoSuchMethodException {
@@ -280,7 +291,7 @@ private void hookDisplayControl(ClassLoader classLoader) throws ClassNotFoundExc
280291
hook(method).intercept(chain -> {
281292
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
282293
var stackTrace = new Throwable().getStackTrace();
283-
for (int i = 4; i < stackTrace.length && i < 8; i++) {
294+
for (int i = 8; i < stackTrace.length && i < 12; i++) {
284295
var name = stackTrace[i].getMethodName();
285296
if (name.equals("createVirtualDisplayLocked")) {
286297
return chain.proceed();
@@ -403,23 +414,4 @@ private void hookOnResume() throws NoSuchMethodException {
403414
return chain.proceed();
404415
});
405416
}
406-
407-
private static class ScreenCaptureHooker implements Hooker {
408-
409-
@Override
410-
public Object intercept(@NonNull Chain chain) throws Throwable {
411-
var captureArgs = chain.getArg(0);
412-
try {
413-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA &&
414-
Build.VERSION.SDK_INT_FULL >= Build.VERSION_CODES_FULL.BAKLAVA_1) {
415-
captureSecureLayersField.set(captureArgs, 1);
416-
} else {
417-
captureSecureLayersField.set(captureArgs, true);
418-
}
419-
} catch (IllegalAccessException t) {
420-
module.log(Log.ERROR, TAG, "ScreenCaptureHooker failed", t);
421-
}
422-
return chain.proceed();
423-
}
424-
}
425417
}

0 commit comments

Comments
 (0)