.NET:如何隔离反调试 class 库?
.NET: How to isolate an anti-debugging class library?
我构建了一个 .NET class 库并使用混淆器通过反调试对其进行混淆。
我使用混淆后的 class 库构建了一个测试项目。我本来希望反调试禁止调试器进入 进入 我的 class 库。但是,当我在调试模式下启动项目(通过在 Visual Studio 中按“F5”)调用我的 class 库时,它只是抛出异常“检测到调试器”。
这意味着如果项目使用我的库,那么开发人员根本无法调试。他们可能有数百万行与我的库无关的代码。在他们的项目中完全无法调试只意味着一件事:他们不会使用我的库。
开发人员是否可以“隔离”我的库,以便他们可以在别处调试?
自exe加壳时代以来,反调试就是众所周知的功能。不幸的是,这是一个进程范围的事情。通常,.NET 混淆器会检查特定于调试器的环境变量。
无法阻止调试器进入您的程序集。
我会说反调试是为那些想要保护其最终用户产品而不是库的人准备的。
您可以虚拟化您的代码(像 ArmDot 这样的现代混淆器提供此功能),因此调试它几乎没有任何意义。
另一个想法是将敏感代码隔离到一个单独的进程中,该进程使用启用的反调试功能运行。在客户端,您只需提供一个代理,将所有调用重定向到进程。
我构建了一个 .NET class 库并使用混淆器通过反调试对其进行混淆。
我使用混淆后的 class 库构建了一个测试项目。我本来希望反调试禁止调试器进入 进入 我的 class 库。但是,当我在调试模式下启动项目(通过在 Visual Studio 中按“F5”)调用我的 class 库时,它只是抛出异常“检测到调试器”。
这意味着如果项目使用我的库,那么开发人员根本无法调试。他们可能有数百万行与我的库无关的代码。在他们的项目中完全无法调试只意味着一件事:他们不会使用我的库。
开发人员是否可以“隔离”我的库,以便他们可以在别处调试?
自exe加壳时代以来,反调试就是众所周知的功能。不幸的是,这是一个进程范围的事情。通常,.NET 混淆器会检查特定于调试器的环境变量。
无法阻止调试器进入您的程序集。
我会说反调试是为那些想要保护其最终用户产品而不是库的人准备的。
您可以虚拟化您的代码(像 ArmDot 这样的现代混淆器提供此功能),因此调试它几乎没有任何意义。
另一个想法是将敏感代码隔离到一个单独的进程中,该进程使用启用的反调试功能运行。在客户端,您只需提供一个代理,将所有调用重定向到进程。