我有一个 .NET DLL 和应用程序。DLL 是用 C++/CLI 编写的,它是“混合的”,即部分托管代码和部分本地代码。
我有两个目标:
1. 混淆所有托管代码,使其无法被反汇编
2. 混淆混合 DLL 的公共方法/类,以便没有人可以在自己的应用程序中使用 DLL,即打乱公共名称。
是的,我知道混淆并不完美,人们仍然可以弄清楚并等等。这两个目标是管理要求。我发现的唯一可以处理这个问题的应用似乎是 Dotfuscator Professional Edition。不幸的是,它是那些非常烦人的应用程序之一,您必须乞求推销员告诉您价格。有谁知道另一种解决方案,或者知道购买便宜的合法副本的好地方吗?
不要告诉我用托管代码重写 DLL,这需要一个月的工作,而且我永远不会得到批准。:-)
请注意,我对混淆的效果并不特别偏执。任何打乱应用程序中所有方法和类的名称的东西都可能足够好。
以下是我尝试过的其他混淆器:
Dotfuscator 社区版随 Visual Studio 2008 提供,但不支持混合程序集。
Eazfuscator .NET 简单且免费,但不支持混合程序集。
{smartassembly} 的单个许可证为 500 美元。它有一些有趣的特性,但不支持混合程序集。
蝾螈是800美元。声称完全支持混合程序集,但每当我尝试使用混淆的 dll 时,应用程序就会崩溃
.NET Reactor 的单个开发人员许可证价格为 180 美元。它支持混合 DLL 的“部分”混淆。不幸的是,如果你混淆了DLL 上的公共类型,它就不起作用,.exe 找不到类。它具有将 DLL 合并/打包到 .exe 中的能力,但是当您使用混合 DLL 执行此操作时,它不起作用(exe 找不到 DLL 的程序集,即使它是 .exe 的一部分)
Skater 是 300 美元的单张执照。我在他们的网站上没有看到任何声称它支持混合程序集的东西,而且我厌倦了尝试应用程序却只是感到失望,所以我假设它不支持。
我还尝试过 Microsoft 的 ILMerge,看看我是否可以将 DLL 与 .exe 合并,然后进行混淆,但似乎混合 DLL 也会窒息。
对于 Dotfuscator 的替代品或购买合法副本的好地方有什么建议吗?我发现几个无名网站声称卖得便宜,但我认为那些是俄罗斯盗版版本。