2008-08-15 53 views
24

我确定很多读者都使用Lutz Roeder的.NET反射器来反编译他们的.NET代码。 我很惊讶我们的源代码可以从我们编译的程序集中重建得有多准确。我应该担心混淆我的.NET代码吗?

我很想听听你们中有多少人使用模糊处理以及什么类型的产品?

我确定这是一个更重要的问题,例如,您提供的通过互联网下载的.NET应用程序,而不是为特定客户端定制的东西。

回答

19

我不会担心太多。我宁愿专注于推出令人敬畏的产品,获得良好的用户基础,并对待客户,而不是担心盗用您的代码或查看源代码的最低用户百分比。

+0

除非软件包含**应受**保护的敏感数据(如私钥和密码) – marcolopes 2014-03-09 17:08:38

+2

@marcolopes:私钥永远不应随应用程序一起提供......您可能意味着公钥......而且密码应该被散列,反正也不清楚文字... – 2014-12-30 10:22:05

+1

你还有什么其他解决方案可以存储私有密钥?服务器访问?如果没有互联网连接? – marcolopes 2015-01-03 03:17:52

3

容易我 - 如果你需要保护知识产权 - obfuicate - 如果不是。

易于使用正确的工具。

2

我认为在一定程度上,我们都应该担心我们的IP :)

好问题,虽然它的东西,我很希望更多地了解(我目前做模糊处理)。

经过与我的经理在工作中的一些讨论,他说他没有模糊,但NGEN安装,显然这应该足以阻止Reflector在你的组件上工作,但我不知道这是否属实到什么程度,所以请不要把它当作福音:)

问得好:) +1

+4

NGen不会以任何方式影响Reflector。使用NGen工具不会从系统中删除原始组件。 – 2008-09-17 13:51:25

7

尽管我们是一家向少数客户销售专业软件的小型服装,但我们目前对所有产品进行了混淆。

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

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

5

没有新的困惑,但是很多编译器的技巧,因为1.1

每次使用匿名类型你IL,编译背部采用了漂亮的晦涩的名字时

例如。每次使用yield时,都会得到一个全新的类,它实现了IEnumerable和IEnumerator(巧妙的优化,不可读的代码)。每当你使用匿名委托时,你会得到一个新的方法,其名称在我知道的每一种.Net语言中都是无效的,但在IL中没有问题。

4

@Rob库珀

曾与我在工作 经理一些讨论,他说,他不 模糊处理,但确实NGEN上安装, apparantly应该足以 停止工作反射您 组件,但我不知道,如果这 是真实的,到什么程度,所以请 不要把它当作福音:)

做这没有提供任何形式的反汇编保护。首先我想像它很可能从任何安装包(如MSI或CAB文件)中提取原始文件。

但更重要的是,Ngen在安装程序集后运行在客户机上。 Ngen只是迫使程序集现在编译而不是稍后使用JIT。原始组件保持不变,并且未经修改,因为Ngen可能无法编译整个组件,所以它必须保持不变。

Ngen是为了性能,而不是安全性,并没有做任何事情来防止反汇编或使其更加困难。

+0

“我想它很可能从任何安装包中提取原始文件,如MSI或CAB文件。” - 是:http://superuser.com/questions/307678/how-to-extract-files-from-msi-package – 2013-05-30 03:28:03

10

请记住,混淆不是加密。恕我直言,如果有人认为逆向工程代码的价值,他们会做到这一点。对于托管代码或本地代码而言,这是真实的,不管是否混淆。当然,混淆阻碍了偶然的观察者,但是你的生意是否真的受到了这些人的威胁?我见过的每种.NET混淆方法都让你的开发人员变得更加艰难。

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

0

模糊效果受到限制,它可能会让随便的人远离。最有效的晦涩难题是只能为用户提供最少量的代码。如果可以的话,让你的应用程序在很大程度上依赖胖服务器运行。

2

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

0

同意,大多数知道如何编码甚至一点点的人都不需要窃取您的代码!

相关问题