문제

이 양식을 난독 화하고 "디버그"

public partial class Form1 : Form
{
  public void Form1()
  {
    InitializeComponents();
  }

  protected override void OnShown(EventArgs e)
  {
      base.OnShown(e);
      Console.WriteLine("Name: "+this.Name);
      Console.WriteLine("FullName: "+this.GetType().FullName);
  }
}
.

출력은 다음과 같습니다.

이름 : Form1
FullName : # yab. # zab



질문


FullName는 난독 화 되었습니까?
Form1는 공개되어 SmartAssembly를 무시할 것으로 기대합니다.

추가 정보
Form1public partial이므로 Designer.cs입니다





내 SmartAssembly 설정은 다음과 같습니다.

    <ApplicationName />
    <Destination DestinationFileName=".\bin.obfuscated\MyProject.Form1.exe" />
    <Assemblies>
        <Assembly AssemblyName="MyProject.Form1, Culture=neutral, PublicKeyToken=omitted">
            <Merging>
                <ResourcesCompression Compress="0" />
                <MemberRefsProxy />
                <Pruning />
                <Obfuscation Obfuscate="1">
                  <Exclusions />
                </Obfuscation>
                <ControlFlow Obfuscate="1" />
            </Merging>
        </Assembly>
    </Assemblies>
    <Options>
      <Obfuscation FieldsNameMangling="2" NameMangling="1" />
      <ExceptionReporting />
      <FeatureUsageReporting Template="res:SmartUsageWithUIConsentFirstRun1033.dll" />
      <StrongNameSigning KeyFileName="PathToKeyFile" Sign="1" />
      <OtherProtections />
      <StringsEncoding />
      <OtherOptimizations />
      <Debugging />
    </Options>
.

도움이 되었습니까?

해결책

먼저, 공개 클래스는 응용 프로그램 프로젝트에서 SmartAssembly에서 무시되지 않습니다 (라이브러리 프로젝트에서 무시됩니다).

둘째, name 속성 폼의 속성은 런타임에 설정된 속성입니다.귀하의 경우에 귀하의 코드 어딘가에있는 "Form1"으로 초기화 될 수 있습니다.

이 값은 언제든지 변경할 수 있습니다. 예 :

public Form1()
{
    InitializeComponent();
    this.Name = "foo";
}
.

SmartAssembly이 값을 난독화할 수 없으므로 잘못 될 것이며 코드의 동작을 변경합니다.

SmartAssembly 코드를 음영시켜주는 경우 유형, 필드 및 메소드의 이름 만 변경합니다.유형의 이름을 얻으려고하면, 유형의 난독 화 된 이름을 얻으려면 논리적입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top