2008-08-28 121 views
8

在我看来,混淆是一个落在“隐晦安全”或“虚假保护感”阵营中的想法。为保护知识产权,有版权;为防止安全问题被发现,有修复了这些问题。简而言之,我认为这是解决社会问题的技术方案。 Those almost never work.(为什么)我应该使用混淆?

但是,我似乎是我们开发团队中唯一一个这样认为的人,所以我没有错,或者只是需要有说服力的论点。我们的产品使用.NET,一位开发人员建议使用.NET Reactor(顺便说一句,was suggested in this SO thread as well)。

.NET反应堆通过混合任何纯.NET组件(用C#,VB.NET,Delphi.NET,J#,MSIL编写)与本机机器代码完全停止反编译。

那么,基本上,你把字节码的所有优点都带走了吗?

有没有好的工程好处混淆?

回答

4

如果您坚持使用纯托管代码模糊处理,则可以削减相当大的程序集大小,而混淆的类/函数名称(折叠为单个字母)意味着较小的内存占用量。这几乎总是可以忽略不计,但对某些移动/嵌入式设备(尽管大部分是在Java中)有影响(并且被使用)。

3

一个潜在的工程好处是,在某些情况下,模糊处理可以创建更小的可执行文件或其他工件 - 例如,混淆javascript导致更小的文件(因为所有的变量被命名为“a”和“b”而不是“descriptiveNameOne”,并且所有的空白被剥离等)。这会为使用混淆javascript的网页加载更快的时间。显然这并不适用于.NET世界,但它是一个直接工程优势的例子。

6

如果一个庞大的程序员团队真的想要得到您的源代码,并且有时间,金钱和精力,那么他们就会成功。

混淆,因此,应该阻止那些没有时间,金钱或努力获取源代码的人,路人可能会给你打电话。

2

尽管与.net无关,但我会考虑Javascript中的混淆,以及其他可能的其他Interwoven语言。 Javascript受益于混淆,因为它减少了需要的带宽,解析器必须读取令牌。

但混淆编译的字节码对我来说并不真正有用。我的意思是你会尝试和实现什么?我只能看到混淆在许可证检查代码中略微有用,以避免它容易被绕过。

2

使用模糊处理的主要原因是为了保护知识产权,正如您所指出的那样。对于一个企业来说,购买像.NET Reactor这样的迷惑产品通常要比试图合法执行你的版权更具成本效益。

混淆还可以提供其他更多附带的好处,如性能改进和装配尺寸缩小。这些将是你正在寻找的engineering好处。

13

你问工程的原因,所以这不是严格的问题的答案。但我认为这是一个有效的澄清。

正如你所说,混淆意在解决社会问题。社交(或商业)问题与技术问题不同,很少有完整的解决方案。解决或最大限度地减少问题只有一定程度的成功。

在这种情况下,模糊处理将会给反编译和盗取代码的人带来障碍。它会阻止偶然的攻击,并且由于惯性,可能会使您的知识产权被盗用的可能性降低。要做一个令人厌烦的比喻,防盗装置并不能防止你的车被盗,但它会使它不太可能。

当然,在可维护性(可能)性能方面存在成本,最重要的是使用户难以准确提交错误报告。根据GateKiller的说法,混淆并不能阻止一个有决心的团队进行反编译,但是(并且这取决于你的产品是什么)团队如何确定你可能会攻击你?

因此,这不是一个社会问题的技术解决方案,而是一个技术决策,它为复杂的社会结构增加了一个影响力。

1

使用加密来保护途中的信息。

使用模糊处理来保护信息,同时您的程序还有它。

相关问题