如何在发布前混淆Web应用程序?

11

我有一个Visual Studio 2008的解决方案,其中包含多个DLL文件,网站应用程序使用它们作为主项目。这是一个商业银行和会计软件(轻客户端),我不希望客户在绕过我的情况下获取源代码。

我希望在通过“发布”菜单将所有生成的程序集发布到Web服务器之前,对它们进行混淆。

我应该如何做?如何在构建和发布之前插入混淆步骤?使用msbuild吗?

编辑:感谢大家的回答!但我的问题更多地关于具体任务(在VS中发布时混淆)而不是一般的混淆。


如果我理解正确的话,你是在混淆生成的程序集而不是源代码。 - Peter
@Petoj:好的,谢谢。我在我的帖子中进行了限定。但事实上,有一个现成的术语:混淆代码http://en.wikipedia.org/wiki/Obfuscated_code - abatishchev
你不会想要等到最后一刻才进行混淆(如果你决定这样做)... 你会想要在周期的早期开始混淆和测试结果。我曾经只是认为我可以在代码完成时再进行混淆的过程中走过了,但通常会破坏某些东西 - 现在我建议为此进行设计以获得最大效果。 - Jason Haley
6个回答

5

市面上有许多混淆产品。

Visual Studio甚至内置了一个 - DotFuscator,但是还有其他的选择

这里有一些DotFuscator的文档

然而,即使进行混淆,一个决心坚定的黑客仍然可以反向工程化你的代码。


6
+1 - 我想补充一点,不仅无法阻止决心强的黑客,而且只会稍微减缓他们的速度。我曾经不得不了解事情的运作方式才能真正修复第三方漏洞,一旦你习惯了观察它,混淆代码并不比变量/函数名非常糟糕的普通代码慢多少。 - Nick Craver

1
你认为劫持会来自哪里?用户还是主机?首先,不应该在网站上放置源代码,只需编译后的程序集即可;其次,应将程序集放置在用户无法访问的文件夹中。如果你担心主机,可以使用混淆器,只需在谷歌上搜索,市场上有很多选择。

@Andrey:因为我正在使用C#,即使编译的程序集也很容易被读取。因此,我希望以混淆的形式提供给客户(发布在他的服务器上)。 - abatishchev

1

永远不要向客户端发送您不信任他们的任何内容。如果您使用的语言需要将可信信息发送给不受信任的客户端,则这是愚蠢的。


1

请查看此帖子:如何保护 .NET 代码免受反向工程?

实际上,你无法完全保护你的代码免受反向工程。最好的方法是使用像 Dotfuscator 这样的工具。

如果你的代码能够正常工作,那么诚实的客户很少会尝试重新编写或篡改它。如果客户不诚实,你所能做的有效措施很少。

与其担心这个问题,不如关注生产高质量的产品,让诚实的客户为之买单。


1

我同意上述观点,即不应将代码发布给不受信任的方。混淆只是使您的代码难以理解,但有办法可以绕过它。

话虽如此,如果您真的想混淆您的代码,可以尝试Easfuscator.NET


1

一些混淆器支持将混淆作为构建过程的一部分来执行,以便发布的应用程序已经被混淆。

Crypto Obfuscator 是这样一个工具 - 它支持与 MSBuild 集成,从而使混淆步骤成为发布或 ClickOnce 的一部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接