.NET:如何隔离反调试类库?

Posted

技术标签:

【中文标题】.NET:如何隔离反调试类库?【英文标题】:.NET: How to isolate an anti-debugging class library? 【发布时间】:2022-01-22 12:28:51 【问题描述】:

我构建了一个 .NET 类库并使用混淆器通过反调试对其进行混淆。

我使用我的混淆类库构建了一个测试项目。我本来希望反调试禁止调试器进入进入我的类库。但是当我在调试模式下启动项目时(通过在 Visual Studio 中按“F5”)调用我的类库时,它只是抛出异常“检测到调试器”。

这意味着如果一个项目使用我的库,那么开发人员根本无法调试。他们可能有数百万行与我的库无关的代码。无法在他们的项目中进行调试只意味着一件事:他们不会使用我的库。

开发人员是否可以“隔离”我的库,以便他们可以在其他地方进行调试?

【问题讨论】:

【参考方案1】:

自 exe 加壳器时代以来,反调试是一个众所周知的功能。不幸的是,这是一个过程范围的事情。通常,.NET 混淆器会检查特定于调试器的环境变量。

没有办法阻止调试器进入您的程序集。

我会说反调试是为那些想要保护他们的最终用户产品而不是库的人准备的。

你可以虚拟化你的代码(像 ArmDot 这样的现代混淆器提供了这个功能),所以调试它几乎没有意义。

另一个想法是将敏感代码隔离到使用启用的反调试功能运行的单独进程中。在客户端,您只需提供一个代理,将所有调用重定向到进程。

【讨论】:

以上是关于.NET:如何隔离反调试类库?的主要内容,如果未能解决你的问题,请参考以下文章

浅谈android反调试之 转发端口

反调试手法之CreateProcess反调试

反调试——6——附加进程反调试

Android 中的反调试技术

过反调试

修改Android手机内核,绕过反调试