安全团队希望我使用预防技术来阻止调试器连接到应用程序。
对于 Android,可以使用 android.os.Debug 类的 isDebuggerConnected 方法来完成。
对于iOS,可以使用PT_DENY_ATTACH来实现,这确保没有调试器可以附加到名为“ptrace”的进程。
目的是在检测到应用程序附加了调试器时终止应用程序。
我已经尝试过,但我不确定这是否是正确的方法,如下:
至少对于 Android,在 MainActivity 文件中:
import io.flutter.embedding.android.FlutterActivity
import android.os.Debug
import android.util.Log
class MainActivity: FlutterActivity() {
override fun onResume() {
super.onResume()
Log.i("Kotlin lifeCycle", "onResume")
val isBeingDebugged: Boolean = android.os.Debug.isDebuggerConnected()
Log.i("Kotlin lifeCycle onResume", "isBeingDebugged: " + isBeingDebugged)
}
}
但是我总是得到: isBeingDebugged: false
我尝试过 onCreate、onResume、生命周期方法,但这些方法并不总是被执行。
有没有办法在 Dart 类中使用这个“android.os.Debug”类及其方法以更受控的方式进行此检查?
您的代码检查是否附加了本机和/或 Java 调试器,而不是检查是否附加了 Dart 调试器。
在撰写本文时,即 2024/10,Dart 和/或 Flutter 本身无法检查调试器是否已附加。
但是,您可以等待调试器附加,例如:
import 'dart:developer' as developer;
static void waitForDebugger() {
developer.debugger(
message: "waitForDebugger was called at:\n${StackTrace.current}");
}