2013-01-11 3 views
2

일부 경우에는 숨겨져 있어야하는 xaml 파일에 단추가 있습니다. 여기C# 난독 화 및 XAML

그것이 :

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

바인딩 작품 완벽하게 내 코드를 난독에 올 때까지. 바인드가하는 즉, 버튼이 항상 볼 수있는 코드를 난독 후, 나는

Eazfuscator.NET

사용하는 방법에 의해

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

다음의 AssemblyInfo.cs에서

나는하여 다음 주석을 추가 더 이상 일하지 않아.

은 내가 ShowMyButton 속성에 다음과 같은 주석을 추가 :

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

이 배제 잘 작동하지만 내가 3 개 질문이 있습니다

  1. 이 난처에 올 때 XAML 혼란 가지고 왜. 난 obfuscator xaml 파일에서 바인딩을 참조하는 방법을 혼란시키지 말라고 할 수 있습니까?
  2. 에 따르면 msdn ObfuscateAssemblyAttribute는 공개 메서드와 개인 메서드 사이에서만 구분됩니다. xaml 파일에서 바인딩을 참조하는 모든 메소드를 수동으로 제외하는 것은 매우 실망 스럽습니다 (내 응용 프로그램에는 수십 가지가 있습니다). 자동 옵션이 ​​있습니까?

  3. obfuscator에게 애플리케이션의 특정 메소드 만 난독 화하도록 지시하는 방법이 있습니까? 즉, 그렇게 할 때까지는 기본적으로 아무 것도 난독 화하지 마십시오. 난독이 ShowMyButton 속성을 모호하게하지만, 컴파일 된 XAML에서 이름을 변경하지 않는 경우

+0

내 개인 의견 dotfuscator; 그것은 실제로 잘 작동합니다. – Ramie

답변

2

이로 다시 작성할 수 있습니다 친화적 인 구현이 아니라 문자열 입력보다 표현식을 사용

더 리팩토링은 Eazfuscator.NET의 최신 버전에서 알려진 문제 및 it was fixed입니다 .

+0

감사합니다. 문제가 해결되었습니다. –

1

는 여전히 ShowMyButton 아닌 난독 버전을 대상으로, 대상이없는 바인딩.

2

여기의 문제는 XAML과 관련이 없습니다. 문제는 INotifyPropertyChanged의 구현에 있습니다. stringly-typed가 왜 나쁜 생각인지 강조합니다. 이 방법으로 사용되는 모든 곳에서 난독이 ShowMyButton 이름을 바꾸는되어 있지만에서 문자열의 발생의 이름을 변경하지 않습니다 난독 후

OnPropertyChanged("ShowMyButton"); 

을 발사하는 업데이트 이벤트는 재산 "ShowMyButton는"이 말 것 실제 속성의 값이 변경되어 obfuscated 값으로 변경되었으므로 XAML의 데이터 바인딩을 포함하여이 인터페이스를 사용하는 모든 코드가 올바르게 업데이트되지 않고 항상 부울 값의 기본값 인 true가 표시됩니다. 따라서 문제가되는 라인이

OnPropertyChanged(() => this.ShowMyButton); 

One possible implementation of this pattern.

+0

변경 사항은 모호하지 않은 코드에서 잘 작동합니다. 언제 난독 화 된 코드가 오면 작동하지 않습니다. –

0

Babel을 사용해보세요.그물을 확인해보십시오. http://babelfor.net/ XAML에는 매우 난독 화가 있습니다. 또한 Eazfuscator는 de4dot와 ILSpy의 조합으로 쉽게 해독 해제됩니다. 변수와 값의 이름 변경은 매우 간단하여 ILSpy가 모두를 나타낼 수있는 입니다.

바벨 한편, 은 크래커를 혼동시킬 수있는 루프, 반복, 스위치를 추가하고 코드 해석이 불가능한 코드를 읽을 수 없게합니다. 및 추적 할 수 없습니다. 또한 문자열과 전체 메서드 을 읽을 수 없도록 암호화 할 수 있습니다.