【问题标题】:C# Obfuscation and XAMLC# 混淆和 XAML
【发布时间】:2017-09-07 20:08:26
【问题描述】:

我在 xaml 文件中有一个按钮,在某些情况下应该隐藏。

这里是:

<Button Visibility="{Binding Path=ShowMyButton}"/>

在混淆我的代码之前,绑定可以完美运行。

在 AssemblyInfo.cs 中,我添加了以下程序集注释:

[assembly: ObfuscateAssemblyAttribute(false, StripAfterObfuscation = false)]

顺便说一下,我用的是 Eazfuscator.NET

混淆代码后,按钮始终可见,即绑定不再起作用。

我在 ShowMyButton 属性中添加了以下注释:

[ObfuscationAttribute(Exclude=true)]
public bool ShowMyButton
{
     get
     {
         return _showMe;
     }
     set
     {
         _showMe= value;
         OnPropertyChanged("ShowMyButton");
     }
}

此排除工作正常,但我有 3 个问题:

  1. 为什么 xaml 在混淆方面会感到困惑。我可以告诉混淆器不要混淆引用 xaml 文件中绑定的方法吗?
  2. 根据 msdn ObfuscateAssemblyAttribute 仅区分公共方法和私有方法。手动排除所有在 xaml 文件中引用绑定的方法会非常令人沮丧(我的应用程序中有几十个)。有自动选项吗?

  3. 有没有办法告诉混淆器只对应用程序中的特定方法进行混淆,即默认情况下请不要混淆任何东西,直到我告诉你这样做。

【问题讨论】:

  • 个人意见,使用dotfuscator;效果很好

标签: c# xaml binding obfuscation


【解决方案1】:

这是 Eazfuscator.NET 最新版本中的一个已知问题和 it was fixed

【讨论】:

  • 谢谢,它解决了问题。
【解决方案2】:

这里的问题与 XAML 无关。问题在于您对INotifyPropertyChanged 的实施;强调为什么字符串类型是一个坏主意。混淆器正在重命名ShowMyButton 作为方法使用的任何地方,但它不会重命名出现在以下位置的字符串:

OnPropertyChanged("ShowMyButton");

经过混淆处理后,触发的更新事件将表明属性“ShowMyButton”已更新,但实际属性已重命名为混淆值,因此任何依赖此接口的代码,包括 XAML 的数据绑定都不会正确更新,始终显示布尔值的默认值:true。

一个对重构更友好的实现使用表达式而不是字符串类型,因此有问题的行可以重写为

OnPropertyChanged(() => this.ShowMyButton);

One possible implementation of this pattern.

【讨论】:

  • 该更改适用于非混淆代码。当涉及到混淆代码时,它不起作用。
【解决方案3】:

试用 Babel for .net 并在 http://babelfor.net/ 上查看 它对 XAML 有很好的混淆。 另请注意,Eazfuscator 很容易通过以下组合来反混淆 de4dot 和 ILSpy。而且它对变量和值的重命名非常 简单,ILSpy 可以揭示所有内容。

另一方面,Babel 添加循环、迭代、开关 可以迷惑破解者并使任何反混淆代码不可读 并且无法追踪。它还可以加密字符串和整个方法 使它们不可读。

【讨论】:

    【解决方案4】:

    如果混淆器混淆了 ShowMyButton 属性,但没有在编译的 XAML 中重命名它,则绑定没有目标,因为它仍然以 ShowMyButton 为目标,而不是混淆后的版本。

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 1970-01-01
      • 2014-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-07
      • 2012-03-03
      • 1970-01-01
      相关资源
      最近更新 更多