2010-09-18 81 views
6

我的雇主在我们所有.Net制作软件上使用Dotfuscator。因为这个原因,我们绝对禁止使用任何内置数据绑定或任何反映属性/函数名称的东西 - 因为dotfuscator会改变它们,因此任何绑定都会立即发生并且无法挽回。数据绑定和代码混淆

我一直在思考这个逻辑,它开始受到伤害。有必须是避免这种僵局的一种方式,它是太广泛和根本性的问题,没有一个明显的解决方案逃脱了我们。

那么,如何做一个反思与混淆?有什么诀窍?据推测,必须有足够聪明的商业混淆器来解决这个问题。我们的版本有什么选择(这相当愚蠢)?

回答

3

我们对Dotfuscator进行了一些改进,以帮助缓解与数据绑定相关的问题。智能混淆功能在2008年3月的4.3.100版本中添加,以静态分析程序集并自动从重命名/删除中排除已知会导致运行时错误的项目。我们一直在扩展和增强这个功能,今天的Dotfuscator可以在标准的数据绑定场景中工作,通常不需要额外的配置。

即使Smart Conffuscation没有捕获到您的每个场景,通过使用自定义排除规则(包括RegEx模式的匹配类型),定义自定义规则以排除某些类型或继承层次结构的属性非常容易。您还可以使用System.Reflection.ObfuscationAttribute属性修饰项目,以确保它们在通过Dotfuscator运行时不会被重命名或删除。

如果您从XAML标记绑定到代码隐藏类型,则最后几个版本支持重命名XAML/BAML以匹配隐藏的代码。这可以提高整体强化效果,并消除标记中的符号与代码定义不匹配时的所有问题。

我会建议工作了使用数据绑定类似于你想要的东西在你的应用程序中使用和运行这些通过Dotfuscator的,看看它如何处理它们的概念应用一些简单的证明。如果您发现智能混淆未自动排除数据绑定目标的任何情况,请将它们发送到[email protected]。我们一直在寻找明确的方案来改进产品。

+0

谢谢Joe,这真的很有帮助。我现在觉得有点不好意思以下几个原因:1)我在战后初期,我后悔在包括Dotfuscator的未成年人刷卡;二)我们似乎可以用一个很老的版本(我忘了,但它不会做你所提到的事情)和iii)虽然我在抱怨,这不是我的电话,和我至今还未能说服我的同事负责这一领域采取任何新的或以任何方式改变他的策略。 – 2010-09-22 17:03:04

+0

作为附录;我可以肯定地认为4.3 Community Edition包含这个功能,而且它不是付费功能吗?说服管理层参与现金决不是直截了当的。 – 2010-09-22 17:06:11

+0

即使没有智能模糊处理您可以创建自定义的排除规则(包括正则表达式匹配)从1.0版本。这是一些手工工作,但肯定是可能的。在Dotfuscator的免费版本的智能模糊处理是在版本5.0中使用Visual Studio附带提供2010 – 2010-09-22 19:51:00

0

混淆器的工作是分解源代码中可见的关系,以使它们在生成的可执行代码中不再显而易见。反射依赖于诸如“这段代码所要求的属性是由那段代码定义的属性”之类的关系。所以混淆和反思并不能很好地相互配合,这并不奇怪。

重命名属性只是混淆的零度。一个非平凡的混淆器也会做两件事情,比如将属性分成两部分,这样在源代码只提到属性P的地方,一些运行时代码将使用P1,一些运行时代码将使用P2,并且会有足够的空间它们之间的分配使得这些属性在需要时具有正确的值,但也包括寄生分配,以便在不需要时它们不具有正确的值。这不仅仅是P被重新命名:不再是属性P.

我不知道你为什么认为反射和混淆是“广泛和基本的”:反射和混淆都是公平的在编程的宏伟计划中很少见,并且它们的使用之间没有相关性,所以我不认为很多人都试图兼得。

缺乏反思仅仅是迷惑成本的长列表中的一个项目。如果决定使用模糊处理的人不是一名安全工程师,请尝试将其纳入其中,这种模糊处理的成本非常高,因此他们肯定会对其进行低估。

+0

我想我是相当的.Net为中心 - 这对我们的业务,因为我们开发.Net的工作。首席开发人员坚持认为我们必须混淆一切;他很难在最好的时候去说服,特别是这个观点是他坚持像一个帽子的东西。正如我所看到的那样,每当你想使用MVC架构时,绑定是不可或缺的,这就妨碍了它的使用。我觉得我们在脚下自嘲,但我认识到混淆的论点。这需要改变商业文化,以接受其他人反编译我们的应用程序的必然性。 – 2010-09-18 12:55:43