.NET 的一个好的混淆器工具有哪些选项可以正确支持 .NET 4.0 中的 WPF?
具体来说,哪些混淆工具可以处理 WPF 程序集中的 BAML 重写,以及处理 BAML 中的跨程序集引用?
虽然大多数混淆器列出了“WPF”和“.NET 3.5”或“.NET 4”支持,但实际上,它们无法重写嵌入的 BAML 引用,从而导致使用 WPF 的跨程序集调用处理不当。这可以防止它们在大型 WPF 应用程序中的使用。
.NET 的一个好的混淆器工具有哪些选项可以正确支持 .NET 4.0 中的 WPF?
具体来说,哪些混淆工具可以处理 WPF 程序集中的 BAML 重写,以及处理 BAML 中的跨程序集引用?
虽然大多数混淆器列出了“WPF”和“.NET 3.5”或“.NET 4”支持,但实际上,它们无法重写嵌入的 BAML 引用,从而导致使用 WPF 的跨程序集调用处理不当。这可以防止它们在大型 WPF 应用程序中的使用。
Eazfuscator.NET自 3.5 版起进行了正确的 WPF 重命名。我们投入了大量的研发努力来创建一个行之有效的解决方案。XAML 重命名由专用分析器提供支持,该分析器将 XAML 的绑定、命令和所有其他方面都考虑在内,以提供精确的结果。你可以试一试。
免责声明:我为 PreEmptive Solutions(Dotfuscator 的制造商)工作。
如果您之前尝试过 Dotfuscator,您可能应该再试一次。我们不断改进我们的 XAML/BAML 解析和重写功能。您应该能够从 PreEmptive 网站(或联系销售人员)轻松获得新的免费评估版本。
我们的大多数客户都能够混淆他们的大多数 WPF/Silverlight/WP7 应用程序,而没有明显的排除。即使 BAML 混淆破坏了应用程序中的某些内容,您也应该能够选择性地仅排除那些不应重命名的项目。
如果您确实有我们在混淆过程中破坏的特定场景,请继续发送它,我们一直在寻求使我们的产品更好。
目前唯一声称能够修改 XAML 或 BAML 的其他 .NET 混淆器(据我所知)是 CodeFort。我显然有偏见,所以我会让你调查产品并做出自己的判断:)
WPF 很大程度上依赖于反射,并且更改属性名称可能无法正常工作,因为绑定将无法正常工作。混淆器工具不会检测代码中可能存在于 ViewModel 等中的字符串引用。不管你做什么。Blend之类的工具无论如何都可以从BAML创建模板和样式的副本,这就是引入BAML而不是从xaml创建可执行代码的原因。
由于 BAML 只是一种图形表示,因此在运行时人们还可以使用 Snoop 工具来识别控件的运行时视图。
但是,有一个免费工具可以生成 WPF 代码隐藏文件作为纯 CLR 对象图表示而不是 BAML,http ://xamlgenerator.codeplex.com/(免责声明:这个 xamlgenerator 是我公司创建的免费工具)
ConfuserEx是一个开源混淆器,它在使代码难以理解方面做得很好。
如果 WPF exe 在使用其中一种预设后无法正常工作,请尝试手动添加保护(我发现在我的情况下,“名称保护”(重命名)正在破坏事件处理):
我在多组件 Silverlight 4 应用程序中尝试了CodeFort ,并取得了部分成功。参考加扰和字符串加密效果很好,并带来了一定程度的保护。
CodeFort 中的重命名功能虽然是一团糟。在我的所有程序集中启用重命名(使用 XAML 支持)破坏了应用程序。然后我尝试从重命名中排除所有类型(包括所有成员),由于糟糕的用户体验,这非常耗时。这并没有使应用程序栩栩如生。
调试和故障排除也不能很好地工作。CodeFort 不尊重 PDB 文件。调试问题的唯一方法是让调试器在所有抛出的异常时中断。现在我看到 XAML 解析器抱怨 app.xaml,它看起来不错。
至于现在,我只是坚持参考加扰和字符串加密。
在我们公司,我们使用Agile.NET Obfuscator - 它支持 WPF 应用程序并可以保护/加密托管资源,包括 BAML 文件。
使用 ILSpy 反编译:
之前(只有代码加密)
之后(使用资源加密)