dotfuscator(.NET混淆器)会在没有安装混淆器的机器上引起问题吗?

时间:2011-03-09 13:57:04

标签: c# .net security

因此。这是一个基本问题我猜:如果我用一些.net混淆器'加密'代码 - 那么这个代码不会在另一台机器上运行的可能性是什么(...没有安装任何ob *软件的机器......) ?

更新

感谢到目前为止的回复...我看到它的方式,exe / dll仍然可以被拆解,你还需要额外的保护来对抗这个吗?此外,dotfuscator在目录中使用混淆的exe生成一些奇怪的xml文件...现在我明白了。这个xml文件被称为“Map”,它存储了我的类的名称 - 我想知道如果我重命名/删除它会发生什么,我猜:没有。

7 个答案:

答案 0 :(得分:5)

Dotfuscator正在改变您的CIL,使人们更难以遵循,但对于机器仍然“合法”。代码可能不再有效,但这将取决于Dotfuscator对您的代码(我确信不应该发生)的错误,而不是在目标机器上没有安装某些东西。

(我想知道Dotfuscator如何处理使用反射来调用在编译版本中更改了名称的方法......)

有关其工作原理的详情,请参阅this article

答案 1 :(得分:2)

混淆器重命名类,方法等的名称,您可以将其视为在实际编译器之后运行的一种后编译器。它可以防止用户反编译程序集并访问您的源代码。因为它是在程序集上执行的一次性操作,所以不需要在目标计算机上安装它。

负面影响是,如果您的应用程序中存在异常,您将获得带有乱码方法名称的堆栈跟踪。这可能使您很难找到生产代码中的错误。创建的Map.xml文件对于此目的非常有用,并且可以与工具一起使用(应该从您的混淆器公司可以获得...)来反转堆栈跟踪中的乱码并显示无框格版本。

答案 2 :(得分:1)

我不是专家,但是如果它被反编译,那么混淆器会使C#代码不可读,并且不应该改变程序的工作方式。

答案 3 :(得分:1)

混淆与加密的不同之处在于混淆的代码必须保持合法的IL。这意味着只需付出足够的努力,就可以破解任何混淆的应用程序。然而,一些原始信息无法恢复(例如,重命名是有损的 - 没有办法获得原始名称 - 但是,即使没有原始名称,您仍然可以学习很多关于应用程序的信息)。重命名只是一个混淆变换 - 有很多。控制流程(重新组织指令堆栈)与重命名无关 - 因此 - 例如,当使用反射时,它不会中断。控制流程适用于破碎机逆向工程(如反射器)重命名有利于击败人体检查(并且都不是防弹)。

以下链接指向有关变换及其副作用的更全面的文章,为什么要使用一个或多个(以及为什么不使用)。 Java和.NET 2009独有的风险[PDF] http://www.preemptive.com/images/stories/white_papers/Risks_Unique_to_Java_and_NET_ISSA1109.pdf

答案 4 :(得分:0)

您不需要在要运行程序的计算机上安装混淆器!

答案 5 :(得分:0)

模糊代码应该在没有安装混淆器的机器上正常运行。

答案 6 :(得分:0)

它会正常工作。据我所知,混淆器的工作方式是将MSIL与不易翻译的方式混合到更高级别的语言(C#),但CLR仍然可以理解。