2013-01-11 559 views
2

我在某些情況下應該隱藏的xaml文件中有一個按鈕。C#混淆和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. 有沒有辦法告訴obfucator在應用程序中只對特定的方法進行混淆,即,請不要默認混淆任何東西,直到我告訴你這樣做。

+0

我個人認爲,使用dotfuscator;它工作得很好 – Ramie

回答

2

這是在最近版本的Eazfuscator.NET的已知問題和it was fixed

+0

謝謝,它解決了這個問題。 –

1

如果混淆混淆了ShowMyButton屬性,但不會在編譯的XAML將其重命名,綁定不有一個目標,因爲它仍然針對ShowMyButton,而不是模糊的版本。

2

這裏的問題與XAML無關。問題在於你的實現INotifyPropertyChanged;強調爲什麼stringly-typed是一個壞主意。混淆器被重新命名ShowMyButton無處不在它被用來作爲一種方法,但它不會重命名該字符串的發生:

OnPropertyChanged("ShowMyButton"); 

混淆後,被解僱的更新事件會說屬性「ShowMyButton」有已更新,但實際屬性已重命名爲混淆值,因此任何依賴此接口的代碼(包括XAML的數據綁定)都不會正確更新,始終顯示布爾值true的默認值。

更重構友好的實現使用表達式而不是字符串類型,所以出錯的行可以改寫到

OnPropertyChanged(() => this.ShowMyButton); 

One possible implementation of this pattern.

+0

這個改變在非模糊代碼上正常工作。當涉及到混淆代碼時,它不起作用。 –

0

嘗試Babel for。並檢查出它在http://babelfor.net/ 它對XAML有很好的混淆。 另請注意,Eazfuscator很容易被 de4dot和ILSpy混合使用。其變量和值的重命名非常簡單,其中ILSpy可以顯示所有內容。

巴貝爾另一方面,添加循環,迭代,開關哪些 可以混淆餅乾,並使任何deobfuscated代碼不可讀 和無法追蹤。它也可以加密字符串和整個方法 使它們不可讀。