8

我有一个 .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 的替代品或购买合法副本的好地方有什么建议吗?我发现几个无名网站声称卖得便宜,但我认为那些是俄罗斯盗版版本。

4

2 回答 2

0

对于同一个问题,我尝试了几种解决方案。对于这个问题,没有一个很好的解决方案。 LibZ是 ILMerge 的不错替代品。只需将程序集打包到程序的资源中,然后从内存中加载所使用的程序集,您可能会变得很可爱。如果您混淆可执行文件,至少这会增加另一个级别的间接性。

于 2014-01-05T01:47:39.497 回答
-1

我使用 {smartassembly} 将 SlimDX 和 DirectShow.Net 与我的 .net 程序合并在一起。这两者都是使用 C++/CLI 编写的。他们在我这边融合得很好。您从哪里得知它不支持混合程序集?

编辑:我不是 100% 确定,因为我自己以前从未使用过 C++\CLI,但我以前写过纯 C++ 应用程序。这是我收集的,在 SlimDX 的 AssemblyInfo.cpp 文件中,有一行配置程序集,如:

[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)];

所以,我假设它包含非托管代码。或者,也许您可​​以告诉我应该寻找什么指示来表明它包含非托管代码。

顺便说一句,我正在使用 {smartassembly} 的 3.0.3063 版

于 2008-12-16T04:03:04.550 回答