XML-Map-Dateien
Babel Obfuscator verwendet XML-Map-Dateien, um die ursprünglichen, nicht verschleierten Namen von Klassen, Methoden, Eigenschaften, Ereignissen und Feldern ihren verschleierten Namen zuzuordnen. Babel Obfuscator kann diese Dateien bei der Verschleierung erzeugen und legt sie im selben Verzeichnis wie die verschleierte Assembly ab.
Die XML-Map-Dateien sind wichtig, weil sie Entwicklern Folgendes ermöglichen:
- Die Stacktraces von Ausnahmen decodieren.
- Die öffentliche Schnittstelle einer Assembly verschleiern.
Stacktrace decodieren
Wenn in einer verschleierten Anwendung eine Ausnahme ausgelöst wird, enthält der Stacktrace die Namen der verschleierten Symbole, die sich nicht ohne Weiteres lesen oder zuordnen lassen. Mit den XML-Map-Dateien lassen sich die verschleierten Namen jedoch auf die ursprünglichen Namen zurückführen, sodass Entwickler die Quelle der Ausnahme leichter finden und das Problem debuggen können. Das macht die XML-Map-Dateien zu einem wertvollen Hilfsmittel für Entwickler, die mit verschleierten Anwendungen arbeiten.
Mehr über das Decodieren von Stacktraces erfahren Sie unter Stacktraces decodieren.
Öffentliche Schnittstelle verschleiern
Weil .NET-Assemblys häufig andere Assemblys referenzieren, darunter Bibliotheken von Drittanbietern, werden die Namen von Objekten, Methoden und Eigenschaften einer Assembly oft in einer anderen verwendet. Werden diese Assemblys getrennt verschleiert, kann die Verschleierung die ursprünglichen Namen extern sichtbarer Objekte und Methoden einer Assembly ändern, sodass die anderen Assemblys, die sie referenzieren, nicht mehr richtig funktionieren. Die Verschleierung extern sichtbarer Member einer Assembly wird oft als assemblyübergreifende Umbenennung bezeichnet.
XML-Map-Dateien erhalten die Beziehungen zwischen den ursprünglichen und den verschleierten Namen über mehrere Assemblys hinweg. Werden mehrere Assemblys verschleiert, lassen sich ihre XML-Map-Dateien kombinieren, damit die ursprünglichen Beziehungen zwischen den Namen gewahrt bleiben. So funktioniert der verschleierte Code auch dann korrekt, wenn er von anderen Assemblys aufgerufen wird, die nicht verschleiert wurden.
Erzeugung der XML-Map-Datei konfigurieren
Die Erzeugung der XML-Map-Datei lässt sich auf der Befehlszeile, in Babel Desktop oder in Buildumgebungen über die MSBuild-Aufgabe Babel und das NuGet-Paket von Babel Obfuscator konfigurieren.
Befehlszeile
Das Befehlszeilentool von Babel Obfuscator akzeptiert die Option --mapout, die die Erzeugung der XML-Map-Datei einschaltet. Die grundlegende Syntax dafür lautet:
babel MyApp.exe --mapout [output file]Die Option nimmt den vollständigen Pfad der erzeugten XML-Map-Datei entgegen. Ist kein Pfad angegeben, erhält die XML-Map-Datei den Namen der ursprünglichen Zieldatei mit der Erweiterung „.map.xml“ und wird im selben Verzeichnis wie die verschleierte Assembly gespeichert.
Heißt die verschleierte Assembly zum Beispiel „MyApp.exe“, erhält die XML-Map-Datei den Namen „MyApp.exe.map.xml“.
Sie können auch zusätzliche Optionen angeben, um die Erzeugung der Map-Datei anzupassen, etwa ein anderes Codierungsformat für die Namen in der Map-Datei:
babel MyApp.exe --mapout encoding=base64Unterstützt werden die Formate „none“ und „base64“. Ist kein Codierungsformat angegeben, wählt Babel das Format base64, wenn Unicode Normalization eingeschaltet ist.
MSBuild-Aufgabe Babel
Um die Erzeugung von XML-Map-Dateien in der MSBuild-Aufgabe Babel einzuschalten, setzen Sie das Attribut GenerateMapOutFile der Aufgabe auf true. Optional geben Sie mit dem Attribut MapOutFile den Pfad der erzeugten Datei an:
<Babel GenerateMapOutFile="true" MapOutFile="MyAssembly.map.xml" />Wenn Sie in Ihrer Projektdatei das NuGet-Paket von Babel Obfuscator verwenden, fügen Sie der Projektdatei das folgende XML-Element hinzu, um die Erzeugung der XML-Map-Datei für die verschleierte Ziel-Assembly einzuschalten:
<PropertyGroup>
<GenerateMapOutFile>true</GenerateMapOutFile>
</PropertyGroup>Den Pfad der erzeugten XML-Map-Datei können Sie mit der folgenden Eigenschaft überschreiben:
<PropertyGroup>
<GenerateMapOutFile>true</GenerateMapOutFile>
<BabelMapOutFile>MyAssembly.map.xml</BabelMapOutFile>
</PropertyGroup>Babel Desktop
Um die Erzeugung der XML-Map-Datei in Babel Desktop einzuschalten, wählen Sie die Assembly auf der Zeichenfläche des Projekts aus und schalten Sie in der Gruppe Output & diagnostics des Eigenschaftenbereichs GenerateMapOutFile ein. Optional legen Sie mit MapOutFile fest, wohin die Map-Datei geschrieben wird. Speichern Sie dann das Projekt.
Nachdem die Erzeugung von XML-Map-Dateien eingeschaltet ist, erstellt Babel Obfuscator für die Eingabe-Assembly, die es verschleiert, eine Map-Datei mit dem Namen der verschleierten Assembly und der Erweiterung .map.xml. Die Map-Dateien werden in dem mit MapOutFile angegebenen Pfad oder neben der verschleierten Assembly gespeichert.