14

有一段时间,我们使用了一个名为 CodeVeil 的工具。我只是想知道是否有更好的选择。

编辑:在更多人误解这个问题之前,我知道一个坚定的破解者可能能够击败任何这些工具。不过我并不太关心他们。这些工具只是为了阻止“休闲破解者”,阻止人们窃取我们公司的 IP。如果他们足够优秀,可以通过一个像样的工具,他们可能对窃取我们的蹩脚代码不感兴趣:-P

4

9 回答 9

5

我在 Xenocode Postbuild 方面取得了很大的成功。该工具可以混淆 .NET 程序集,防止 Reflector 反汇编,将 .NET 程序集组合成单个可执行文件(“虚拟化”),甚至可以将 .NET 应用程序编译为不需要安装 .NET 运行时的独立可执行文件。

于 2008-09-20T03:15:24.190 回答
4

我仍然不相信这些工具的价值。没有任何技术解决方案能比许可证、商标、专利、版权等法律保护更好地防止逆向工程......

.NET 确实是大型透明源代码运动。相反,您最好围绕您的 IP 制定使用条款,例如许可和版权。

于 2008-09-20T02:22:25.597 回答
4

编译 .NET 应用程序会生成包含大量元信息的输出程序集。这些信息使得重构非常接近原始代码的东西变得非常容易。一个名为 .NET Reflector 的优秀免费工具可用于完成此任务,并且是检查基类库如何工作的流行方法。下载并使用该工具查看重构的 C#/VB.NET 版本的程序集内容。

如果您是一个商业组织,那么您不希望人们很容易看到您制作代码的成本很高。一种流行的方法是使用混淆来打乱内容,这种方式不会改变其运行方式,但会使其难以理解。混淆使用重命名变量和方法等技术。找出方法 'a1'、'a2'、'a3' 的用途比原来的 'GetName'、'UpdateInterestRate' 和 'SetNewPassword' 困难得多。

因此,使用混淆会使人们更难理解你的代码在做什么以及它使用的算法。然而,它并没有使它成为不可能。就像愿意花时间处理二进制文件的汇编程序专家仍然可以理解 C++ 代码一样,MSIL 专家最终可以解决您的混淆代码。但它增加了障碍,以至于很少有人会费心去尝试。

于 2008-09-20T02:50:09.023 回答
3

老实说,除了使用您提到的工具进行一些混淆之外,您无能为力。.NET 只是比脚本语言高出一步,除了脚本命令是二进制的并且称为 IL。这有点过于简单化了,但离现实并不远。使用 Reflection 编写的任何好的程序都可以用来对 .NET 应用程序进行逆向工程,或者如果您有足够的知识,可以使用一个好的十六进制编辑器。

于 2008-09-20T02:20:12.060 回答
3

很抱歉恢复旧帖子,但我认为 Eziriz 的 .NET Reactor 工作得非常出色。

事实上,我自己将它用于我所有的 .net 应用程序,显然没有现有的工具可以反编译受 .net reactor 保护的程序。更多详细信息可以在信息页面http://www.eziriz.com/dotnet_reactor.htm上找到。使用试用版和 .net 反射器对其进行测试,您可以自己查看。

于 2008-12-08T09:39:27.133 回答
2

有几种流行的混淆工具,包括 Dotfuscation,它有一个随 Visual Studio 2005 和 2008 一起提供的“轻量级”版本。它们有一个 Pro 版本,它不仅可以重命名变量和函数名称。然而,代码仍然是可见的,只是被打乱了一点,使其更难阅读和理解软件的逻辑流程。

另一种技术是使用其他程序来加密程序,并在运行时解密。然而,这也不是一个完美的解决方案。事实上,我知道没有完美的解决方案可以阻止坚定的工程师对软件进行逆向工程,如果有足够的时间和精力的话。

它真正归结为确定保护级别,这将使劝阻临时黑客变得足够困难,并使逆向工程尽可能昂贵,因此至少逆向工程在任何时间或时间都是有代价的钱,或者理想情况下,两者兼而有之。逆向工程成本越高,愿意付出努力的人就越少。这就是混淆的重点。

一些人认为使用像 C++ 编译器这样编译为本机代码的编译器可以防止这种逆向工程,但事实并非如此。一个好的反汇编程序甚至可以对纯二进制可执行文件进行逆向工程,因此不存在完美的解决方案。如果计算机可以读取并执行它,那么计算机正在使用的内存就可以被扫描和跟踪,从而绕过所有加密、混淆或任何其他使代码不落入坚定工程师之手的尝试。

于 2008-09-20T02:33:41.170 回答
1

免责声明:我不为 SmartAssembly 的制造商 RedGate 工作。我只是一个非常高兴的客户,他找到了一个好的、负担得起的解决方案。

选择很简单,选择SmartAssembly!不要在市场上的其他混淆器上浪费您的时间或金钱。我在评估竞争产品的非计费时间方面花了更多的钱。它们都有致命的缺陷,几乎无法调试。SmartAssembly 是一个易于使用、文档齐全、完善的应用程序,具有出色的支持。在他们的论坛上发布一个问题,并期望实际开发人员相当快地给出答案。

SmartAssembly 不仅仅是一个混淆器。它具有一系列功能,包括内置的、高度可定制的崩溃报告生成器,您的客户可以自动通过电子邮件发送给您。您可以在自己的服务器或 red-gates 服务器上查看这些报告。当您进行 beta 测试或向客户发布产品时,我无法告诉您这有多大用处。它还生成调试器文件,因此您可以调试您可能遇到的混淆产品的任何发布后问题。

如果您正在交付一个商业应用程序,那么将钱花在一个像样的混淆器上是有意义的。此处的错误选择可能会损害您的知识产权,或者更糟的是导致您经历令人毛骨悚然的调试。与 SmartAssembly 的成本相比,这个成本是多少?

于 2011-07-27T19:15:04.930 回答
-2

我听说混淆器很好;它用于.Net Reflector。

于 2008-09-20T02:18:05.187 回答
-2

另一个是Crypto Obfuscator - 它比其他一些更实惠,并且具有各种混淆和保护方法来阻止因果和不那么随意的黑客。

于 2009-11-24T05:59:55.750 回答