Frage

Wenn ich dieses Formular verschleiere und es "debugge"

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);
  }
}

Die Ausgabe ist wie folgt:

Name:Formblatt 1
Vollständiger Name:#Jab.#Zab


Frage
Warum ist FullName verschleiert?
Form1 ist öffentlich, also würde ich erwarten, dass SmartAssembly es ignoriert.

Zusätzliche Informationen
Form1 is public partial und der Designer auch.ks

Mein SmartAssembly-Setup ist wie folgt:

    <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>
War es hilfreich?

Lösung

Erstens wird eine öffentliche Klasse von SmartAssembly in einem Anwendungsprojekt nicht ignoriert (sie wird in einem Bibliotheksprojekt ignoriert).

Zweitens, die Name Eigenschaft ihres Formulars ist eine Eigenschaft, die zur Laufzeit festgelegt wird.In Ihrem Fall kann es irgendwo in Ihrem Code, möglicherweise im Designer, mit "Form1" initialisiert werden.

Dieser Wert kann jederzeit geändert werden, Beispiel :

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

SmartAssembly kann diesen Wert also nicht verschleiern, er wäre falsch und würde das Verhalten Ihres Codes ändern.

Wenn SmartAssembly Ihren Code verschleiert, werden nur die Namen der Typen, Felder und Methoden geändert.Wenn Sie versuchen, den Namen Ihres Typs zu ermitteln, ist es logisch, den verschleierten Namen Ihres Typs zu ermitteln.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top