Skip to Content
Neue Version 12 verfügbar 🎉
DesktopVerschleierungsprojekte

Verschleierungsprojekte

Ein Verschleierungsprojekt fasst die zu schützenden Assemblys, ihre Abhängigkeiten und die Einstellungen jeder einzelnen zusammen. Babel Desktop stellt es als Graph auf einer Zeichenfläche dar und führt es mit der Engine von Babel Obfuscator aus.

Babel Desktop speichert Projekte als .babel-Dateien, dem MSBuild-Projektformat, das auch die MSBuild-Aufgabe verwendet. Ein in Babel Desktop gespeichertes Projekt können Sie mit MSBuild ausführen, und ein vorhandenes .babel-Projekt können Sie in Babel Desktop öffnen.

Ein Projekt anlegen

Assemblys hinzufügen

Klicken Sie auf dem Startbildschirm auf Assemblys hinzufügen oder in der Symbolleiste der Zeichenfläche auf + Assembly hinzufügen (Ctrl+Shift+A, Cmd+Shift+A unter macOS), oder ziehen Sie .NET-Assemblys aus dem Dateimanager auf die Zeichenfläche. Jede Assembly wird zu einem primären Ziel: einem Knoten auf der Zeichenfläche, den die Engine verschleiert.

Abhängigkeiten verbinden

Fügen Sie die Assemblys hinzu, die mit einem Ziel zusammengeführt, in ein Ziel eingebettet oder von ihm referenziert werden, wie unter Abhängigkeiten beschrieben.

Jedes Ziel konfigurieren

Wählen Sie einen Knoten aus und öffnen Sie den Eigenschaftenbereich, um seine Einstellungen und XML-Regeln zu bearbeiten. Siehe Zieleinstellungen.

Speichern und ausführen

Speichern Sie das Projekt mit Datei > Speichern (Ctrl+S, Cmd+S unter macOS) und klicken Sie dann auf Projekt ausführen (Ctrl+Enter, Cmd+Enter unter macOS). Speichern schreibt die geöffnete .babel-Datei und fragt nur bei einem neuen Projekt nach einem Dateinamen. Um eine Kopie unter anderem Namen zu speichern, verwenden Sie Datei > Speichern unter… (Ctrl+Shift+S, Cmd+Shift+S unter macOS).

Um neu zu beginnen, verwenden Sie Projekt: Neu (Ctrl+N) oder die Schaltfläche Neues Projekt auf der Zeichenfläche. Projekt: Zuletzt verwendete öffnen… in der Befehlspalette öffnet ein kürzlich verwendetes Projekt erneut, und der Dialog Projekt öffnen beginnt im Ordner des zuletzt geöffneten Projekts. Hat das aktuelle Projekt ungespeicherte Änderungen, fragt Babel Desktop, ob sie verworfen werden sollen, bevor es ein anderes Projekt anlegt oder öffnet. Warten Sie vorher, bis ein laufender Auftrag abgeschlossen ist.

Die Zeichenfläche des Projekts

Die Zeichenfläche zeigt jede Assembly als Knoten. Um den Ausschnitt zu verschieben, ziehen Sie den Hintergrund, drehen Sie das Mausrad oder wischen Sie mit zwei Fingern. Um an der Zeigerposition zu zoomen, verwenden Sie die Zwei-Finger-Geste zum Aufziehen und Zusammenziehen oder halten Sie beim Scrollen Ctrl (Cmd unter macOS) gedrückt. Die Zoom-Schaltflächen und Ansicht einpassen bringen den Graphen ins Bild. Ordnen Sie die Knoten durch Ziehen an, oder lassen Sie Ansicht > Graph automatisch anordnen (Ctrl+Shift+L, Cmd+Shift+L unter macOS) die Ziele in der Ausführungsreihenfolge von links nach rechts platzieren, wobei die Abhängigkeiten jedes Ziels links von ihm gestapelt werden. Die Positionen der Knoten werden in der Projektdatei gespeichert.

Zeichenfläche des Projekts FullMerge.babel: rechts das primäre Ziel BubbleBurst.exe, links vier Zusammenführungseingaben, BubbleBurst.View.dll, BubbleBurst.ViewModel.dll, MvvmFoundation.Wpf.dll und Thriple.dll, jede über eine Linie mit der Beschriftung „MERGE“ mit dem Ziel verbundenZeichenfläche des Projekts FullMerge.babel: rechts das primäre Ziel BubbleBurst.exe, links vier Zusammenführungseingaben, BubbleBurst.View.dll, BubbleBurst.ViewModel.dll, MvvmFoundation.Wpf.dll und Thriple.dll, jede über eine Linie mit der Beschriftung „MERGE“ mit dem Ziel verbundenZeichenfläche des Projekts FullMerge.babel: rechts das primäre Ziel BubbleBurst.exe, links vier Zusammenführungseingaben, BubbleBurst.View.dll, BubbleBurst.ViewModel.dll, MvvmFoundation.Wpf.dll und Thriple.dll, jede über eine Linie mit der Beschriftung „MERGE“ mit dem Ziel verbunden

Ein primäres Ziel mit vier zusammengeführten Assemblys

Lassen Sie den Zeiger eine halbe Sekunde auf einem Knoten ruhen oder steuern Sie den Knoten mit der Tastatur an, um seine Karte zu öffnen. Die Karte eines primären Ziels zeigt seinen Zustand, seine Ausführungsreihenfolge, die Anzahl der Assemblys, die es zusammenführt, einbettet und referenziert, seine Map-Verknüpfungen und den Pfad der Eingabedatei. Nach einem Lauf zeigt sie außerdem den Verschleierungswert.

Abhängigkeiten

Über den oberen und den unteren Anker eines Knotens verbinden Sie Abhängigkeiten. Ziehen Sie vom unteren Anker der Quell-Assembly zum oberen Anker des Ziels, oder klicken Sie die beiden Anker nacheinander an. Eine neue Abhängigkeit erhält einen von drei Typen:

TypWirkung
ZusammenführenDie Quell-Assembly wird in das Ziel integriert und mit ihm zusammen verschleiert, sodass eine einzige Ausgabe-Assembly entsteht. Siehe Assembly-Zusammenführung.
EinbettenDie Quell-Assembly wird als Ressource im Ziel abgelegt und zur Laufzeit geladen. Siehe Assembly-Einbettung.
ReferenzDie Quell-Assembly dient nur dazu, die Referenzen des Ziels aufzulösen.

Babel Desktop wählt den Typ für Sie. Wenn das Ziel genau die Identität der Quell-Assembly referenziert (Name, Version, Gebietsschema und Token des öffentlichen Schlüssels), erhält die neue Abhängigkeit den Typ „Zusammenführen“, andernfalls den Typ „Referenz“. Um den Typ zu ändern, klicken Sie auf die Linie der Abhängigkeit, wählen Sie im Popover „Zusammenführen“, „Einbetten“ oder „Referenz“ und klicken Sie auf Anwenden. Der Befehl Assembly: Abhängigkeit automatisch hinzufügen… und die Befehle Assembly: Zusammenführungseingabe hinzufügen…, Assembly: eingebettete Assembly hinzufügen… und Assembly: Referenz hinzufügen… in der Befehlspalette fügen Abhängigkeiten über einen Dateiauswahldialog hinzu.

Eine Assembly, die als Zusammenführungseingabe dient, bleibt auf der Zeichenfläche, wird aber nicht eigens verschleiert, weil sie Teil ihres Ziels wird.

Ausführungsreihenfolge und Map-Dateien

Der linke und der rechte Anker verbinden zwei Ziele so, dass das eine vor dem anderen läuft. Ziehen Sie vom rechten Anker des ersten Ziels zum linken Anker des zweiten. Babel Desktop fragt dann, wozu die Verbindung dient:

AuswahlWirkung
Nur AusführungsreihenfolgeEine Ablaufkante: Ziel A läuft vor Ziel B. Von A nach B wird nichts weitergegeben.
Map-Datei weitergebenEine Map-Verknüpfung, gezeichnet mit der Beschriftung MAP: A schreibt seine XML-Umbenennungs-Map und B liest sie, sodass B die neuen Namen der öffentlichen Symbole von A verwendet. A läuft vor B. Siehe Assemblyübergreifende Umbenennung.

Eine Map-Verknüpfung schaltet beim ersten Ziel Generate Map Out File ein und nimmt dessen Map in die Map In Files des zweiten Ziels auf. Legt das erste Ziel weder einen Ausgabepfad noch einen Map-Pfad fest, wird seine Map an einem festen Ort neben seiner Eingabe abgelegt, zum Beispiel BabelOut/Library2.dll.map.xml, damit das zweite Ziel sie immer findet. Map-Verknüpfungen werden nicht gesondert gespeichert: Babel Desktop liest sie aus diesen beiden Einstellungen. Deshalb zeigt auch ein von Hand oder mit Babel UI geschriebenes Projekt seine Map-Verknüpfungen.

Jeder Knoten zeigt seinen Schritt, also die Position, an der er in seinem Ablauf ausgeführt wird. Ein Ablauf ist eine Gruppe von Zielen, die durch Ablaufkanten, Map-Verknüpfungen oder Abhängigkeiten der Typen „Zusammenführen“, „Einbetten“ und „Referenz“ miteinander verbunden sind. Ziele ohne Verbindung zueinander bilden getrennte Abläufe. Innerhalb eines Ablaufs laufen die Ziele in der Reihenfolge der Schritte und dort, wo nichts die Reihenfolge festlegt, in der Reihenfolge des Projekts. Ablaufkanten werden im Projekt als gewöhnliche Abhängigkeiten zwischen MSBuild-Zielen gespeichert.

Babel Desktop weist Verbindungen eines Ziels mit sich selbst und doppelte Kanten zurück und lehnt jede Verbindung ab, durch die Ziele gegenseitig aufeinander warten würden. Warten in einem von der Festplatte geöffneten Projekt Ziele gegenseitig auf ihre Map-Dateien, wird das Projekt trotzdem geöffnet. Babel Desktop zeigt einen Fehler an, der den Kreis benennt, zum Beispiel Library1.dll → Library2.dll → Library1.dll, und das Projekt läuft erst, wenn Sie eine der Verknüpfungen entfernen. Um eine Kante oder eine Map-Verknüpfung zu entfernen, klicken Sie darauf und drücken Sie Delete oder Backspace. Esc bricht eine begonnene Verbindung ab oder hebt die Auswahl auf.

Eine Eingabe ersetzen

Um ein Ziel auf einen neuen Build seiner Assembly umzustellen, ohne seine Einstellungen zu verlieren, wählen Sie den Knoten aus und führen Sie in der Befehlspalette Assembly: Eingabe ersetzen und Einstellungen beibehalten… aus. Assembly: Ausgewähltes Ziel entfernen entfernt ein Ziel samt seinen Kanten.

Einrichtungsbefehle

Drei Befehle der Befehlspalette konfigurieren ein Projekt in einem einzigen Schritt. Fügen Sie zuerst die Assemblys hinzu und führen Sie dann den Befehl aus, der zur Anwendung passt.

Befehlspalette, gefiltert nach „Obfuscation: Set“, mit den Einträgen „Obfuscation: Setup public obfuscation (all assemblies)“, „Obfuscation: Setup merge into main assembly“ und „Obfuscation: Set level...“Befehlspalette, gefiltert nach „Obfuscation: Set“, mit den Einträgen „Obfuscation: Setup public obfuscation (all assemblies)“, „Obfuscation: Setup merge into main assembly“ und „Obfuscation: Set level...“Befehlspalette, gefiltert nach „Obfuscation: Set“, mit den Einträgen „Obfuscation: Setup public obfuscation (all assemblies)“, „Obfuscation: Setup merge into main assembly“ und „Obfuscation: Set level...“

Die Einrichtungsbefehle in der Befehlspalette

BefehlWirkung
Verschleierung: Zusammenführung in die Hauptassembly einrichtenFührt alle anderen Ziele mit der Hauptassembly zusammen, sodass das Projekt eine einzige Ausgabedatei erzeugt. Die Hauptassembly ist die einzige .exe des Projekts oder, wenn es keine oder mehrere gibt, das erste Ziel. Eine Assembly, die die Engine nicht zusammenführen kann, bleibt unverändert.
Verschleierung: Öffentliche Verschleierung einrichten (alle Assemblys)Bereitet eine Gruppe von Assemblys, die gemeinsam ausgeliefert werden, darauf vor, dass ihre öffentlichen Symbole umbenannt werden. Jedes Ziel erhält eine XML-Regel namens obfuscate public und schreibt seine Umbenennungs-Map, und ein Ziel, das von einem anderen abhängt, liest dessen Map über eine Map-Verknüpfung.
Verschleierung: Stufe festlegen…Wendet eine von drei Schutzstufen auf das ausgewählte Ziel an.

Die Stufen setzen die folgenden Optionen und lassen alle anderen unverändert:

StufeSchutz
LeichtUmbenennung von Typen, Methoden, Feldern, Eigenschaften und Ereignissen. Der Kontrollfluss, die Verschlüsselungsfunktionen und die Schutzmaßnahmen gegen Analyse sind ausgeschaltet.
AusgewogenUmbenennung, Kontrollflussverschleierung mit dem Algorithmus goto, Zeichenfolgenverschlüsselung und ILDASM-Unterdrückung.
MaximalUmbenennung, Kontrollflussverschleierung mit goto, switch, case, if und Chained State, Zeichenfolgenverschlüsselung mit dem Algorithmus „stream“, Wertverschlüsselung, MSIL-Verschlüsselung, Manipulationserkennung, Debugging-Schutz und ILDASM-Unterdrückung. Wenn die Lizenz den Algorithmus „stream“ nicht einschließt, wird die Standard-Zeichenfolgenverschlüsselung verwendet.

Die beiden Einrichtungsbefehle überspringen Paketziele (.apk, .appx und .xap). Keiner der drei Befehle wird ausgeführt, solange ein Auftrag läuft oder eine Änderung noch nicht übernommen ist. Sie ändern das geöffnete Projekt, speichern es aber nicht. So können Sie das Ergebnis zuerst auf der Zeichenfläche und im Eigenschaftenbereich prüfen. Wenden Sie nach einer höheren Stufe eine niedrigere an, werden die zusätzlichen Schutzmaßnahmen wieder ausgeschaltet.

Zieleinstellungen

Wählen Sie einen Knoten aus und klicken Sie oben rechts auf der Zeichenfläche auf die Schaltfläche Eigenschaften, oder drücken Sie bei ausgewähltem Knoten Enter, um den Eigenschaftenbereich zu öffnen. Die Registerkarte Einstellungen führt alle Optionen von Babel Obfuscator für das ausgewählte Ziel auf, gegliedert in die Gruppen Umbenennung, Kontrollfluss, Codeverschlüsselung, Optimierung, Signierung und Schutz, Dateien und Abhängigkeiten, Output & diagnostics und Advanced. Tippen Sie in das Feld Einstellung suchen, um die Liste zu filtern.

Eigenschaftenbereich des Ziels BubbleBurst.exe, neben der Zeichenfläche auf der Registerkarte „Settings“ geöffnet, mit dem Suchfeld „Find a setting“, der Gruppe „Map files“ mit aktiviertem „Writes its rename map“ und der Gruppe „Renaming“ mit „Flatten Namespaces“, „Unicode Normalization“ und „Detect If Obfuscated“Eigenschaftenbereich des Ziels BubbleBurst.exe, neben der Zeichenfläche auf der Registerkarte „Settings“ geöffnet, mit dem Suchfeld „Find a setting“, der Gruppe „Map files“ mit aktiviertem „Writes its rename map“ und der Gruppe „Renaming“ mit „Flatten Namespaces“, „Unicode Normalization“ und „Detect If Obfuscated“Eigenschaftenbereich des Ziels BubbleBurst.exe, neben der Zeichenfläche auf der Registerkarte „Settings“ geöffnet, mit dem Suchfeld „Find a setting“, der Gruppe „Map files“ mit aktiviertem „Writes its rename map“ und der Gruppe „Renaming“ mit „Flatten Namespaces“, „Unicode Normalization“ und „Detect If Obfuscated“

Der Eigenschaftenbereich des ausgewählten Ziels

Die Einstellungen tragen die Optionsnamen der MSBuild-Aufgabe. Was sie bewirken, beschreiben daher die Referenz der Babel-Aufgabe und die Seiten der einzelnen Schutzfunktionen. Jede Option erhält ein Steuerelement, das zu ihrem Typ passt: Kontrollkästchen für Schalter, Listen für Algorithmen, Datei- und Ordnerauswahl für Pfade sowie Editoren für Filter und Eigenschaftszuordnungen.

Eigenschaftenbereich mit der Gruppe „Code encryption“: „String Encryption“ eingeschaltet, „Msil Encryption“ eingeschaltet mit dem Filter .*, „Dynamic Proxy Call Filters“ auf ICollection.* gesetzt und „Value Encryption“ mit int32, int64, single, double und array eingeschaltetEigenschaftenbereich mit der Gruppe „Code encryption“: „String Encryption“ eingeschaltet, „Msil Encryption“ eingeschaltet mit dem Filter .*, „Dynamic Proxy Call Filters“ auf ICollection.* gesetzt und „Value Encryption“ mit int32, int64, single, double und array eingeschaltetEigenschaftenbereich mit der Gruppe „Code encryption“: „String Encryption“ eingeschaltet, „Msil Encryption“ eingeschaltet mit dem Filter .*, „Dynamic Proxy Call Filters“ auf ICollection.* gesetzt und „Value Encryption“ mit int32, int64, single, double und array eingeschaltet

Einstellungen der Codeverschlüsselung: Zeichenfolgen-, MSIL- und Wertverschlüsselung

Zusammengesetzte Optionen wie Control Flow Obfuscation zeigen ein Steuerelement je Eigenschaft. Das nächste Bild zeigt die Schalter für den Kontrollfluss. Der letzte, chain, schaltet den Algorithmus Chained State der Ultimate-Edition ein.

Eigenschaftenbereich, gefiltert nach „ControlFlow“: die Zuordnung „Control Flow Obfuscation“ mit eingeschaltetem enable, goto, switch, case, if, call und value, ausgeschaltetem token und underflow und chain auf dem StandardwertEigenschaftenbereich, gefiltert nach „ControlFlow“: die Zuordnung „Control Flow Obfuscation“ mit eingeschaltetem enable, goto, switch, case, if, call und value, ausgeschaltetem token und underflow und chain auf dem StandardwertEigenschaftenbereich, gefiltert nach „ControlFlow“: die Zuordnung „Control Flow Obfuscation“ mit eingeschaltetem enable, goto, switch, case, if, call und value, ausgeschaltetem token und underflow und chain auf dem Standardwert

Eigenschaften von Control Flow Obfuscation

Passwörter, etwa für einen Signaturschlüssel oder eine Map-Datei, werden nur für die laufende Sitzung behalten. Sie werden nie in die Projektdatei geschrieben, nach einem Neustart geben Sie sie daher erneut ein. Braucht die Engine während eines Laufs ein Passwort, fragt Babel Desktop danach.

Babel Desktop erhält die Teile einer .babel-Datei, die es nicht bearbeitet, etwa Kommentare, benutzerdefinierte Eigenschaften und benutzerdefinierte MSBuild-Aufgaben. MSBuild-Importe, Bedingungen und benutzerdefinierte Aufgaben wertet es nicht aus: Ein Projekt, das davon abhängt, muss mit MSBuild ausgeführt werden.

Map-Dateien

Die Gruppe Map-Dateien im Eigenschaftenbereich fasst die Map-Einstellungen des ausgewählten Ziels zusammen:

  • Schreibt seine Umbenennungs-Map schaltet die Map-Datei des Ziels ein oder aus. Der Pfad darunter gibt an, wohin die Map geschrieben wird, standardmäßig neben die verschleierte Assembly. Mit Ändern… wählen Sie eine andere Datei.
  • Maps aus anderen Zielen führt die Map-Verknüpfungen auf, die an diesem Ziel enden. Klicken Sie auf den Namen eines Ziels, um es auszuwählen.
  • Weitere Map-Dateien führt die Maps auf, die dieses Ziel liest und die kein Ziel des Projekts schreibt, etwa die Map einer Bibliothek, die in einem früheren Build verschleiert wurde. Map-Datei hinzufügen… fügt eine hinzu, Entfernen nimmt sie wieder heraus.

XML-Regeln

Auf der Registerkarte XML-Regeln bearbeiten Sie die eingebetteten XML-Verschleierungsregeln des ausgewählten Ziels. Der Editor hebt die XML-Syntax hervor, und Validieren prüft die Regeln gegen das Schema der Babel-Regeln und meldet Zeile und Spalte jedes Fehlers. XML öffnen lädt eine Regeldatei in den Editor, XML-Datei speichern schreibt den Inhalt des Editors in eine Datei, und Auf Assembly anwenden legt die Regeln im Ziel ab. Eingebettete Regeln werden in der Projektdatei gespeichert.

Registerkarte „XML rules“ des Ziels mit einer eingebetteten Regel für die zusammengeführte Assembly BubbleBurst.View, die die Eigenschaft „Dynamic Proxy Call Filters“ auf IEnumerator.* setzt, und den Schaltflächen „Open XML“, „Validate“, „Save XML file“ und „Apply to assembly“Registerkarte „XML rules“ des Ziels mit einer eingebetteten Regel für die zusammengeführte Assembly BubbleBurst.View, die die Eigenschaft „Dynamic Proxy Call Filters“ auf IEnumerator.* setzt, und den Schaltflächen „Open XML“, „Validate“, „Save XML file“ und „Apply to assembly“Registerkarte „XML rules“ des Ziels mit einer eingebetteten Regel für die zusammengeführte Assembly BubbleBurst.View, die die Eigenschaft „Dynamic Proxy Call Filters“ auf IEnumerator.* setzt, und den Schaltflächen „Open XML“, „Validate“, „Save XML file“ und „Apply to assembly“

Eingebettete XML-Regeln eines Ziels

Engine-Plugins

Plugins für Babel Obfuscator werden je Ziel mit Engine-Plugins: DLL-Pfade konfigurieren festgelegt. Engine-Plugins: Argumentnamen ermitteln liest die Argumentnamen, die ein Plugin deklariert, sodass Sie seine Argumente ausfüllen können. Plugins sind .NET-Code, der innerhalb der Engine läuft. Verwenden Sie deshalb nur Plugins, denen Sie vertrauen.

Das Projekt ausführen

Klicken Sie oben rechts auf der Zeichenfläche auf Projekt ausführen, drücken Sie Ctrl+Enter (Cmd+Enter unter macOS) oder wählen Sie Ausführen > Verschleierung ausführen. Sofern ein Ziel keinen eigenen Ausgabepfad festlegt, wird die verschleierte Assembly in einen Ordner BabelOut neben der jeweiligen Eingabe-Assembly geschrieben. Vor dem Start des Laufs prüft Babel Desktop, wohin die Ausgabe geschrieben wird. Es überschreibt weder eine Eingabe-Assembly noch eine Schlüsseldatei oder ein Plugin, und es fragt nach, bevor es vorhandene Ausgabedateien ersetzt.

Der Bereich Aktivität zeigt die laufende Phase, eine Fortschrittsanzeige und das Engine-Protokoll. Die Registerkarte Protokoll führt jede Meldung auf, die die Engine auf dem Verbose Level des Ziels ausgibt. Warnungen und Fehler werden zusätzlich auf der Registerkarte Probleme gesammelt. Jeder Zielknoten meldet seinen Zustand auf der Zeichenfläche. Auftrag abbrechen hält den Lauf an. Die Ziele laufen nacheinander. Schlägt ein Ziel fehl, werden die nachfolgenden Ziele nicht ausgeführt.

Zeichenfläche nach einem Lauf: Der Zielknoten BubbleBurst.exe meldet „completed“, der Bereich „Activity“ zeigt das Kennzeichen „Completed“, die Registerkarten „Log“ und „Problems“ mit 3 Problemen, 100 Prozent und das Ende des Engine-Protokolls mit der gesamten Laufzeit und 3 Warnungen, und die Schaltfläche „Results“ ist verfügbarZeichenfläche nach einem Lauf: Der Zielknoten BubbleBurst.exe meldet „completed“, der Bereich „Activity“ zeigt das Kennzeichen „Completed“, die Registerkarten „Log“ und „Problems“ mit 3 Problemen, 100 Prozent und das Ende des Engine-Protokolls mit der gesamten Laufzeit und 3 Warnungen, und die Schaltfläche „Results“ ist verfügbarZeichenfläche nach einem Lauf: Der Zielknoten BubbleBurst.exe meldet „completed“, der Bereich „Activity“ zeigt das Kennzeichen „Completed“, die Registerkarten „Log“ und „Problems“ mit 3 Problemen, 100 Prozent und das Ende des Engine-Protokolls mit der gesamten Laufzeit und 3 Warnungen, und die Schaltfläche „Results“ ist verfügbar

Ein abgeschlossener Lauf im Bereich „Aktivität“

Nach einem Lauf öffnen die Schaltflächen oben im Bereich Aktivität den Ausgabeordner und starten die verschleierte Anwendung. Datei > Ausgabe im Ordner anzeigen und Ausführen > Verschleierte App starten (Ctrl+F5, Cmd+F5 unter macOS) bewirken dasselbe. Babel Desktop startet eine ausführbare Windows-Datei direkt und eine .NET-Anwendung über dotnet, wenn ihre Datei .runtimeconfig.json vorhanden ist. Eine Bibliothek bietet es nicht zum Starten an.

Verschleierungswert

Nach einem abgeschlossenen Lauf zeigt die Karte jedes Ziels einen Verschleierungswert von 0 bis 100. Damit sehen Sie auf einen Blick, ob der Lauf die erwarteten Schutzfunktionen angewendet hat. Lassen Sie den Zeiger auf dem Ziel ruhen, um die Karte zu öffnen.

Karte des Ziels BubbleBurst.exe nach einem Lauf: Verschleierungswert 92 von 100 mit der Einstufung „Strong“, dazu die Balken „Renaming“ 26 von 30, „Control Flow“ 25 von 25, „String Encryption“ 15 von 15, „Code protection“ 11 von 15 und „Anti-analysis“ 15 von 15, der Zeitpunkt des letzten Laufs, die Ausführungsreihenfolge „Flow 1 step 1“, 4 zusammengeführte Abhängigkeiten und der Pfad der EingabedateiKarte des Ziels BubbleBurst.exe nach einem Lauf: Verschleierungswert 92 von 100 mit der Einstufung „Strong“, dazu die Balken „Renaming“ 26 von 30, „Control Flow“ 25 von 25, „String Encryption“ 15 von 15, „Code protection“ 11 von 15 und „Anti-analysis“ 15 von 15, der Zeitpunkt des letzten Laufs, die Ausführungsreihenfolge „Flow 1 step 1“, 4 zusammengeführte Abhängigkeiten und der Pfad der EingabedateiKarte des Ziels BubbleBurst.exe nach einem Lauf: Verschleierungswert 92 von 100 mit der Einstufung „Strong“, dazu die Balken „Renaming“ 26 von 30, „Control Flow“ 25 von 25, „String Encryption“ 15 von 15, „Code protection“ 11 von 15 und „Anti-analysis“ 15 von 15, der Zeitpunkt des letzten Laufs, die Ausführungsreihenfolge „Flow 1 step 1“, 4 zusammengeführte Abhängigkeiten und der Pfad der Eingabedatei

Der Verschleierungswert eines Ziels, das vier Assemblys zusammenführt

Der Wert ist die Summe der Punkte aus fünf Schutzebenen. Jeder Balken zeigt, wie viele Punkte eine Ebene von ihrem Höchstwert erreicht hat. Bei einem niedrigen Wert erkennen Sie so, welche Ebene fehlt.

EbenePunktePunkte gibt es für
Umbenennung30Den Anteil der geeigneten Symbole, die umbenannt wurden
Kontrollfluss25Den Anteil der Methoden, die verwürfelt wurden. Methoden ohne Verzweigungen bleiben unangetastet, deshalb genügt die Hälfte der Methoden für die volle Punktzahl
Zeichenfolgenverschlüsselung15Verschlüsselte Zeichenfolgen
Codeschutz15MSIL-Verschlüsselung (7), dynamische Proxy-Aufrufe (4) und Wertverschlüsselung (4)
Analyseschutz15Manipulationserkennung, Debugging-Schutz und ILDASM-Unterdrückung, je 5 Punkte

Der Wert wird unter 35 als Schwach eingestuft, ab 35 als Mittel, ab 60 als Gut und ab 80 als Stark. Er stammt aus den Statistiken des letzten abgeschlossenen Laufs des Projekts. Assemblys, die mit einem Ziel zusammengeführt werden, zählen zu dessen Wert und zeigen keinen eigenen. Ein Ziel, das noch nicht gelaufen ist, zeigt keinen Wert.

Der Wert zählt die Schutzfunktionen, die ein Lauf angewendet hat. Er sagt nichts darüber aus, wie lange das Ergebnis einem bestimmten Werkzeug standhält. Ein niedrigerer Wert kann der richtige sein: Eine Bibliothek mit öffentlicher API behält ihre öffentlichen Namen und erhält deshalb weniger Punkte für die Umbenennung.

Abläufe parallel ausführen

Ein Projekt mit mehreren unabhängigen Abläufen, etwa Bibliotheken, die einander nicht referenzieren, kann diese gleichzeitig verschleiern. Schalten Sie unter Einstellungen > Verschleierung die Option Unabhängige Abläufe parallel ausführen ein und wählen Sie, wie viele Abläufe gleichzeitig laufen, von 2 bis 4. Die Option ist standardmäßig ausgeschaltet.

Jeder Ablauf läuft in einem eigenen Engine-Prozess, und innerhalb eines Ablaufs laufen die Ziele weiterhin der Reihe nach. Babel Desktop prüft das gesamte Projekt, bevor ein Ablauf startet, wie bei einem einzelnen Lauf. Während die Abläufe laufen, gilt:

  • Die Fortschrittsanzeige zählt die abgeschlossenen Ziele im Verhältnis zu den geplanten, und jede Zeile des Protokolls beginnt mit dem Namen ihrer Assembly, zum Beispiel [Library1.dll].
  • Ein Ziel, das fehlschlägt, hält seinen eigenen Ablauf an. Die anderen Abläufe laufen weiter, und der Lauf wird als fehlgeschlagen gemeldet.
  • Auftrag abbrechen hält alle Abläufe an.
  • Brauchen mehrere Ziele ein Zertifikatspasswort, fragt Babel Desktop nach einem Passwort nach dem anderen und nennt die Assembly, die es benötigt.

Jeder Engine-Prozess braucht ein paar Sekunden zum Starten. Die parallele Ausführung spart daher bei großen Assemblys Zeit. Ein kleines Projekt kann schneller fertig sein, wenn die Ziele nacheinander laufen. Mit einer Floating-Lizenz führt Babel Desktop immer nur einen Ablauf aus.

Werkzeuge: Auftragswarnungen in der Befehlspalette führt die Warnungen des aktuellen Laufs auf, und Werkzeuge: Warnungsreferenz öffnet den durchsuchbaren Katalog der Warncodes der Engine mit ihren Beschreibungen.

Dialog mit der Referenz der Engine-Warnungen, mit einem Suchfeld und einer Liste von Warncodes wie CF0001, CF0002, EI0001 und EM0001Dialog mit der Referenz der Engine-Warnungen, mit einem Suchfeld und einer Liste von Warncodes wie CF0001, CF0002, EI0001 und EM0001Dialog mit der Referenz der Engine-Warnungen, mit einem Suchfeld und einer Liste von Warncodes wie CF0001, CF0002, EI0001 und EM0001

Die Referenz der Engine-Warnungen

Ausführungsergebnisse

Nach einem Lauf öffnet die Schaltfläche Ausführungsergebnisse in der Symbolleiste der Zeichenfläche die Schutzstatistiken. Wählen Sie einen Lauf aus dem Verlauf, eine verschleierte Assembly und einen Bericht:

BerichtInhalt
UmbenennungUmbenannte und insgesamt vorhandene Typen, Methoden, Felder, Eigenschaften und Ereignisse, mit einem Diagramm der Abdeckung
KontrollflussVerwürfelte Methoden, eingefügte Verzweigungsanweisungen und Iterationen, mit einer Treemap nach Namespace und Typ und, wenn vollständige Statistiken erfasst werden, der zyklomatischen Komplexität vor und nach der Transformation
ZeichenfolgenverschlüsselungDer Verschlüsselungsalgorithmus und die verschlüsselten Zeichenfolgen je Methode
CodeverschlüsselungDie verschlüsselten Methoden nach Namespace und Typ
Dynamischer ProxyDie über Proxys geleiteten Aufrufe und die Delegattypen je Zielmethode
OptimierungenEntfernung ungenutzten Codes und Zähler der Optimierung
AusführungszeitDie Dauer jeder Engine-Phase

Sie können die Tabellen durchsuchen und sortieren und in den Treemaps vom Namespace zum Typ hineinzoomen. Ausgabe anzeigen, Engine-Protokoll anzeigen und Statistikdaten anzeigen öffnen den Ausgabeordner, das vollständige Engine-Protokoll und die Rohdatei mit den Statistiken des Laufs. Babel Desktop bewahrt die Ergebnisse der letzten 30 Läufe auf.

Schutzstatistiken auf der Registerkarte „Renaming“: 540 von 630 Symbolen umbenannt (85,71 Prozent), ein Netzdiagramm der Abdeckung je Symbolkategorie und Balken mit der Symbolanzahl, die Auswahl von Lauf und Assembly sowie die Schaltflächen „Show output“, „Show engine log“ und „Show statistics data“Schutzstatistiken auf der Registerkarte „Renaming“: 540 von 630 Symbolen umbenannt (85,71 Prozent), ein Netzdiagramm der Abdeckung je Symbolkategorie und Balken mit der Symbolanzahl, die Auswahl von Lauf und Assembly sowie die Schaltflächen „Show output“, „Show engine log“ und „Show statistics data“Schutzstatistiken auf der Registerkarte „Renaming“: 540 von 630 Symbolen umbenannt (85,71 Prozent), ein Netzdiagramm der Abdeckung je Symbolkategorie und Balken mit der Symbolanzahl, die Auswahl von Lauf und Assembly sowie die Schaltflächen „Show output“, „Show engine log“ und „Show statistics data“

Statistiken der Umbenennung

Schutzstatistiken auf der Registerkarte „Control Flow“: 234 verwürfelte Methoden, 28.990 Verzweigungsanweisungen und 5 Iterationen sowie eine Treemap der transformierten Methoden nach Namespace, von BubbleBurst.ViewModel mit 58 Methoden bis Thriple.Easing mit 8Schutzstatistiken auf der Registerkarte „Control Flow“: 234 verwürfelte Methoden, 28.990 Verzweigungsanweisungen und 5 Iterationen sowie eine Treemap der transformierten Methoden nach Namespace, von BubbleBurst.ViewModel mit 58 Methoden bis Thriple.Easing mit 8Schutzstatistiken auf der Registerkarte „Control Flow“: 234 verwürfelte Methoden, 28.990 Verzweigungsanweisungen und 5 Iterationen sowie eine Treemap der transformierten Methoden nach Namespace, von BubbleBurst.ViewModel mit 58 Methoden bis Thriple.Easing mit 8

Statistiken des Kontrollflusses

Die Statistikdateien enthalten ursprüngliche Symbolnamen und Zeichenfolgenwerte. Halten Sie sie, wie die XML-Map-Dateien, von der ausgelieferten Anwendung fern.

Stacktraces decodieren

Um die verschleierten Stacktraces einer geschützten Anwendung mit ihren XML-Map-Dateien in die ursprünglichen Namen zurückzuübersetzen, verwenden Sie den Stack-Decoder.

Last updated on