Entfernung ungenutzten Codes
Die Entfernung ungenutzten Codes ist eine wichtige Optimierungstechnik von Babel Obfuscator. Sie erkennt und beseitigt Code, der zur Laufzeit nie ausgeführt wird. Dazu gehören Methoden, Eigenschaften, Felder und sogar ganze Typen, die als ungenutzt erkannt werden. Indem Babel ungenutzten Code entfernt, verringert es Größe und Komplexität der verschleierten Assembly. Das hat mehrere Vorteile.
Die Entfernung ungenutzten Codes verkürzt die Ladezeit der Anwendung. Ohne den unnötigen Code wird die verschleierte Assembly kleiner und lässt sich schneller laden und initialisieren. Diese Optimierung nützt besonders Anwendungen mit großer Codebasis oder ressourcenintensiver Initialisierung.
Außerdem verbessert die Entfernung ungenutzten Codes die Leistung der verschleierten Anwendung insgesamt. Ohne ungenutzte Methoden, Eigenschaften und Felder wird die Ausführung zur Laufzeit effizienter. Es fallen weniger unnötige Funktionsaufrufe und Speicherzuweisungen an, was Laufzeitleistung und Reaktionsfähigkeit verbessert.
Darüber hinaus erhöht die Entfernung ungenutzten Codes die Sicherheit des verschleierten Codes. Mit dem ungenutzten Code verschwinden mögliche Einstiegspunkte oder Schwachstellen, und die Angriffsfläche für Angreifer wird kleiner. Zugleich kann ungenutzter Code keine vertraulichen Informationen oder Funktionen mehr versehentlich offenlegen, die sich ausnutzen ließen.
Befehlszeile
Um die Entfernung ungenutzten Codes über die Befehlszeile einzuschalten, verwenden Sie beim Ausführen von Babel den Schalter --deadcode.
babel myapp.exe --deadcodeMSBuild-Aufgabe Babel
<PropertyGroup>
<DeadCodeElimination>true</DeadCodeElimination>
</PropertyGroup>
<Babel DeadCodeElimination="$(DeadCodeElimination)" />XML-Regeln
Die Entfernung ungenutzter Symbole steuern Sie mit XML-Regeln für die Funktion „dead code“. Die folgende XML-Regel verhindert zum Beispiel, dass Symbole im Namespace Utilities entfernt werden:
<Rule name="remove1" feature="dead code" exclude="true">
<Pattern isRegEx="true">
<![CDATA[
(Utilities.*)
]]>
</Pattern>
<Description>Do not remove symbols in Utilities namespace</Description>
</Rule>Insgesamt bringt die Entfernung ungenutzten Codes durch Babel Obfuscator der verschleierten Codebasis deutliche Vorteile: Sie wird kleiner, lädt schneller, läuft effizienter und ist sicherer.
Zusätzliche Einstiegspunkte
Babel Obfuscator analysiert die Codebasis umfassend und geht dabei von der öffentlichen Schnittstelle und dem Einstiegspunkt der Assembly aus. Die Analyse soll vor allem alle Teile des Codes ermitteln, die zur Laufzeit erreichbar sind. Babel untersucht den Einstiegspunkt, durchläuft die öffentliche Schnittstelle und ermittelt so den Ausführungsfluss. Dabei erkennt es Methoden, die nicht erreichbar sind, die also während der Ausführung des Programms weder aufgerufen noch anderweitig verwendet werden. Diese Methoden gelten als „ungenutzter Code“, weil sie nichts zur Funktion der Anwendung beitragen.
Neben der Analyse ab der öffentlichen Schnittstelle und dem Einstiegspunkt der Assembly kann Babel Obfuscator weitere Einstiegspunkte berücksichtigen, die für die korrekte Ausführung des Codes nötig sein können. Zu diesen zusätzlichen Einstiegspunkten gehören Methoden, auf die per Reflexion zugegriffen wird oder die andere Komponenten intern über das Attribut InternalVisibleTo verwenden.
Diese zusätzlichen Einstiegspunkte geben Sie als reguläre Ausdrücke an, die Sie der Option für die Entfernung ungenutzten Codes übergeben, wie unten unter Einstiegspunkte angeben gezeigt. In Babel Desktop schalten Sie DeadCodeElimination in der Gruppe „Optimierung“ der ausgewählten Assembly ein und fügen die Ausdrücke für die Einstiegspunkte zur Liste dieser Option hinzu.
Mit diesen Einstiegspunkten ermittelt Babel Obfuscator den erreichbaren Code genau und erhält bei der Optimierung alle Methoden, die für Reflexion oder interne Verwendung nötig sind. So wird die Codebasis umfassend analysiert und der ungenutzte Code entfernt, der von keinem der angegebenen Einstiegspunkte aus erreichbar ist.
Einstiegspunkte angeben
Um der Entfernung ungenutzten Codes auf der Befehlszeile zusätzliche Einstiegspunkte anzugeben, verwenden Sie reguläre Ausdrücke als Argumente der Option --deadcode. Mit regulären Ausdrücken lassen sich Muster für Methodennamen flexibel definieren. Sie können einzelne Methoden angeben, ganze Namespaces erfassen, Muster innerhalb von Methodennamen verwenden oder mehrere Ausdrücke kombinieren, um mehrere Einstiegspunkte einzubeziehen.
Die folgenden Beispiele zeigen, wie Einstiegspunkte mit regulären Ausdrücken als Argumente der Option --deadcode angegeben werden:
-
Eine bestimmte Methode angeben:
babel myapp.exe --deadcode MyNamespace.MyClass.MyMethod -
Alle Methoden eines Namespace angeben:
babel myapp.exe --deadcode MyNamespace.* -
Alle Methoden einer bestimmten Klasse angeben:
babel myapp.exe --deadcode MyNamespace.MyClass.* -
Methoden angeben, die einem Muster aus einem regulären Ausdruck entsprechen:
babel myapp.exe --deadcode MyNamespace.*[Gg]et.* -
Mehrere Einstiegspunkte mit mehreren regulären Ausdrücken angeben:
babel myapp.exe --deadcode MyNamespace.* --deadcode AnotherNamespace.*
Um Einstiegspunkte für die Babel-Aufgabe in Ihrem MSBuild-Projekt mit regulären Ausdrücken anzugeben, verwenden Sie die Eigenschaft <DeadCodeElimination>. Sie nimmt eine durch Semikolons (;) getrennte Liste regulärer Ausdrücke an, die auf die Methoden der Einstiegspunkte passen.
Das folgende Beispiel gibt Einstiegspunkte mit regulären Ausdrücken in der Babel-Aufgabe an:
<PropertyGroup>
<DeadCodeElimination>MyNamespace.*;true</DeadCodeElimination>
</PropertyGroup>
<Babel DeadCodeElimination="$(DeadCodeElimination)" />Diese Beispiele zeigen, wie reguläre Ausdrücke Einstiegspunkte für die Analyse definieren, mit der Babel ungenutzten Code entfernt. Mit genauen Mustern oder Platzhaltern erfassen Sie gezielt die Methoden oder Methodengruppen, die bei der Analyse berücksichtigt werden sollen.