26

我相信 SO 上的许多读者都使用Lutz Roeder.NET 反射器来反编译他们的 .NET 代码。我很惊讶我们的源代码可以多么准确地从我们编译的程序集中重建。

我很想知道你们中有多少人使用混淆技术,以及用于什么类型的产品?

我敢肯定,对于您提供通过 Internet 下载的 .NET 应用程序来说,这是一个更重要的问题,而不是为特定客户端定制的应用程序。

4

10 回答 10

21

我不会担心太多。我宁愿专注于推出一个很棒的产品,获得良好的用户群,并正确对待你的客户,而不是担心担心窃取你的代码或查看源代码的用户比例最低。

于 2008-08-15T08:39:57.140 回答
10

请记住,混淆不是加密。恕我直言,如果有人认为对您的代码进行逆向工程的价值,他们就会这样做。无论是否经过混淆,托管代码或本机代码都是如此。当然,混淆会阻止不经意的观察者,但您的业务真的受到这些人的威胁吗?我见过的每一种 .NET 混淆方法都会让您作为开发人员的生活更加艰难。

有些服务可以提供真正的加密,例如 Microsoft 的 SLPS。请参阅http://www.microsoft.com/slps/default.aspx

于 2008-08-15T16:46:02.810 回答
7

我们目前混淆了我们所有的输出,尽管我们是一家向少数客户销售专业软件的小公司。

我们做出这个决定的原因很简单——我们发现一位心怀不满的前雇员正在积极接近我们的客户请求二进制文件——有人担心他打算对更新的功能进行逆向工程以提供竞争功能。

当然,如果他使用该软件,他仍然可以做到这一点,但没有理由让他轻松。

于 2008-08-15T09:00:43.463 回答
5

没有新的混淆,但自 1.1 以来有很多编译器技巧

例如,每次你使用匿名类型时,你都会得到一个用相当晦涩的名字编译回来的 IL。每次使用 yield 时,您都会得到一个实现 IEnumerable 和 IEnumerator 的全新类(巧妙的优化,不可读的代码)。每次使用匿名委托时,都会得到一个新方法,其名称在我所知道的每种 .Net 语言中都是无效的,但在 IL 中这很好。

于 2008-08-15T09:14:09.270 回答
4

@罗伯·库珀

在工作中与我的经理进行了一些讨论后,他说他不会混淆,但会在安装时使用 NGEN,显然这应该足以阻止 Reflector 处理您的程序集,但我不知道这是否属实以及在多大程度上,所以请不要把它当作福音:)

这不提供任何形式的反拆卸保护。首先,我想从任何安装包(如 MSI 或 CAB 文件)中提取原始文件是很可能的。

但更重要的是,Ngen 在安装程序集后在客户端计算机上运行。Ngen 只是强制程序集现在编译,而不是稍后使用 JIT。原始程序集保留且未修改,它必须保留,因为 Ngen 可能无法编译整个程序集。

Ngen 是为了性能,而不是安全性,并且不会阻止拆卸或使其更加困难。

于 2008-08-15T12:54:55.680 回答
3

对我来说很容易——如果你需要保护知识产权——混淆——如果不是的话。

使用正确的工具很容易做到。

于 2008-08-15T08:38:23.787 回答
2

我认为在某种程度上我们都应该担心我们的 IP :)

很好的问题,尽管我很想了解更多(我目前混淆)。

在工作中与我的经理进行了一些讨论后,他说他不会混淆,但会在安装时使用 NGEN,显然这应该足以阻止 Reflector 处理您的程序集,但我不知道这是否属实以及在多大程度上,所以请不要把它当作福音:)

好问题:) +1

于 2008-08-15T08:39:54.330 回答
2

我们不对“非公开”应用程序使用混淆,但我们将其用于公开可用的应用程序。混淆的应用程序包含大量高度复杂的代码,这花费了我们大量的时间来编写,这就是让我认为混淆是必须的原因——至少在这种情况下是这样。

于 2008-09-15T16:59:42.077 回答
0

迷惑的有效性是有限的,它可能会使随便的人远离。最有效的混淆是只向用户提供最少量的代码。如果可以的话,让你的应用程序在很大程度上依赖于胖服务器。

于 2008-08-15T17:07:25.250 回答
0

同意,大多数懂一点代码的人都不需要窃取你的代码!

于 2010-01-22T19:41:36.013 回答