mirror of
https://github.com/LSPosed/DisableFlagSecure.git
synced 2025-05-05 01:59:43 +08:00
check caller method with stack walker
This commit is contained in:
parent
bf5cdb513d
commit
401f196e2e
@ -5,7 +5,6 @@ import android.app.Activity;
|
|||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.hardware.display.DisplayManager;
|
import android.hardware.display.DisplayManager;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.util.Log;
|
|
||||||
import android.view.SurfaceControl;
|
import android.view.SurfaceControl;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
@ -334,11 +333,14 @@ public class DisableFlagSecure extends XposedModule {
|
|||||||
@BeforeInvocation
|
@BeforeInvocation
|
||||||
public static void before(@NonNull BeforeHookCallback callback) {
|
public static void before(@NonNull BeforeHookCallback callback) {
|
||||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
|
||||||
String stack = Log.getStackTraceString(new Throwable());
|
var stackTrace = new Throwable().getStackTrace();
|
||||||
if (stack.contains("createVirtualDisplayLocked")) {
|
for (int i = 4; i < stackTrace.length && i < 8; i++) {
|
||||||
|
var name = stackTrace[i].getMethodName();
|
||||||
|
if (name.equals("createVirtualDisplayLocked")) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
callback.getArgs()[1] = true;
|
callback.getArgs()[1] = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -406,12 +408,24 @@ public class DisableFlagSecure extends XposedModule {
|
|||||||
|
|
||||||
@BeforeInvocation
|
@BeforeInvocation
|
||||||
public static void before(@NonNull BeforeHookCallback callback) {
|
public static void before(@NonNull BeforeHookCallback callback) {
|
||||||
String stack = Log.getStackTraceString(new Throwable());
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
|
||||||
// don't change surface flags, but passing other checks
|
var walker = StackWalker.getInstance();
|
||||||
if (stack.contains("setInitialSurfaceControlProperties")
|
var match = walker.walk(frames -> frames
|
||||||
|| stack.contains("createSurfaceLocked")) {
|
.map(StackWalker.StackFrame::getMethodName)
|
||||||
|
.limit(6)
|
||||||
|
.skip(2)
|
||||||
|
.anyMatch(s -> s.equals("setInitialSurfaceControlProperties") || s.equals("createSurfaceLocked")));
|
||||||
|
if (match) return;
|
||||||
|
} else {
|
||||||
|
var stackTrace = new Throwable().getStackTrace();
|
||||||
|
for (int i = 4; i < stackTrace.length && i < 8; i++) {
|
||||||
|
var name = stackTrace[i].getMethodName();
|
||||||
|
if (name.equals("setInitialSurfaceControlProperties") ||
|
||||||
|
name.equals("createSurfaceLocked")) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
callback.returnAndSkip(false);
|
callback.returnAndSkip(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user