我已经知道如何Debugger.IsAttached
确定我的应用程序当前是否正在运行时进行调试。如何确定更多关于调试器本身的信息?
例如,如何区分从 Visual Studio 调试的应用程序和由 WinDbg 调试的应用程序?
在我的场景中,应用程序不是从 Visual Studio 启动的。调试器可以附加到已经运行的进程。
我已经知道如何Debugger.IsAttached
确定我的应用程序当前是否正在运行时进行调试。如何确定更多关于调试器本身的信息?
例如,如何区分从 Visual Studio 调试的应用程序和由 WinDbg 调试的应用程序?
在我的场景中,应用程序不是从 Visual Studio 启动的。调试器可以附加到已经运行的进程。
我能想到的一种方法是枚举机器上的现有进程,然后枚举每个进程的句柄。因此,如果您发现 WinDbg.exe 实例正在运行并且它具有您的进程的句柄,那么您很可能正在被 WinDbg.exe 调试。
请记住,尽管调试器可能已“非侵入式”附加,因此您实际上可能附加了多个调试器。或者您可能正在远程调试,或者通过串行端口或 USB 连接的内核调试器。
有关调试器的大量有用信息,您可以查看反调试技术。