Skip to Content
Neue Version 12 verfügbar 🎉
ObfuscatorVerschleierungsregelnVerschleierungs-Agent

Verschleierungs-Agent

Während der Verschleierung kann Babel anhand vordefinierter Regeln eine Reihe von Aufgaben ausführen. Diese Regeln bilden den Verschleierungs-Agent.

Der Agent soll häufige Probleme vermeiden, die durch die Verschleierung entstehen und die resultierende Assembly unbrauchbar machen könnten. So kann der Agent zum Beispiel sicherstellen, dass bestimmte Symbole, etwa per Reflexion verwendete, nicht verschleiert werden. Die Verschleierung dieser Symbole kann nämlich Probleme mit der Laufzeitumgebung verursachen und zu Fehlern oder Abstürzen führen.

Dazu führt der Agent eine Reihe von Aufgaben auf der Ziel-Assembly aus. Diese Aufgaben sind vorkonfiguriert und unterschiedlich komplex: Einige sind einfach, etwa die Prüfung der Felder serialisierbarer Typen, andere setzen aufwendigere Techniken ein, etwa die statische Analyse des MSIL-Codes.

Die folgende Tabelle führt die Namen der Agent-Aufgaben auf, die in Babel Obfuscator verfügbar sind:

Name der AufgabeBeschreibung
Base typesVerhindert die Umbenennung von Typen, die von einem angegebenen Basistyp abgeleitet sind
Code analysisVerhindert die Umbenennung von Typen, die der Codeanalyse vorbehalten sind
Dynamic languageVerhindert die Umbenennung von Symbolen, die die Dynamic Language Runtime verwendet
Exposed attributesVerhindert die Umbenennung von Symbolen, die bestimmte Attribute tragen
Razor webappSteuert die Verschleierung von Razor-Webanwendungen
Reflected enumsVerhindert die Umbenennung von Enumerationstypen, die per Reflexion verwendet werden
Reflected stringsVerhindert die Verschleierung von Zeichenfolgen, die per Reflexion verwendet werden
Reflected typesVerhindert die Umbenennung von Typen, die per Reflexion verwendet werden
Serializable typesVerhindert die Umbenennung serialisierbarer Typen
WinRT typesVerhindert die Umbenennung privater WinRT-Typen

Die Aufgaben des Verschleierungs-Agents werden mit jeder neuen Produktversion aktualisiert. So bleibt Babel auf dem Stand der aktuellen Entwurfsregeln der CLR und kann genau bestimmen, welche Symbole verschleiert werden sollen und welche nicht.

Mit diesen vordefinierten Regeln stellt Babel Obfuscator sicher, dass der verschleierte Code voll funktionsfähig bleibt und keine Probleme aufweist, die die Anwendung unbrauchbar machen könnten.

Insgesamt ist der Verschleierungs-Agent eine zentrale Komponente von Babel. Er trägt zum Schutz von .NET-Anwendungen bei, indem er verhindert, dass Symbolnamen entgegen den Entwurfsregeln der CLR verschleiert werden.

Regeln des Agents außer Kraft setzen

Der Verschleierungs-Agent ist standardmäßig eingeschaltet und sollte nach Möglichkeit eingeschaltet bleiben, damit die Verschleierung korrekt abläuft. Den Agent auszuschalten wird im Allgemeinen nicht empfohlen, weil dies Probleme mit der Laufzeitumgebung verursachen und zu Fehlern oder Abstürzen der Anwendung führen kann. In manchen Fällen möchten Benutzer jedoch einzelne Agent-Aufgaben ausschalten, um ein bestimmtes Verschleierungsergebnis zu erreichen.

Beachten Sie, dass die Agent-Aufgaben nach der Verarbeitung der Regeln laufen. Das heißt: Jede benutzerdefinierte XML-Regel, die für einen Member nicht erzwungen wird, wird von der Agent-Aufgabe außer Kraft gesetzt. Benutzer sollten daher sorgfältig abwägen, wie sich das Ausschalten oder Anpassen von Agent-Aufgaben auswirkt, bevor sie die Standardeinstellungen ändern.

Eine bestimmte Agent-Aufgabe lässt sich mit XML-Regeln überspringen. Definieren Sie dazu eine Ausschlussregel für die Funktion agent, die die Namen der zu überspringenden Aufgaben im Element TaskNameList angibt, einem Kindelement des Elements Properties der Regel. Die angegebenen Aufgaben werden dann bei der Verschleierung nicht ausgeführt.

Um zum Beispiel die Aufgaben Serializable types und Reflected strings auszuschalten, definieren Sie eine XML-Regel wie diese:

<Rule name="rule1" feature="agent" exclude="true"> <Pattern>ACME.Data.*</Pattern> <Properties> <TaskNameList>Serializable types;Reflected strings</TaskNameList> </Properties> </Rule>

In dieser Regel für die Funktion „agent“ hat das Attribut exclude den Wert „true“. Babel Obfuscator führt die Agent-Aufgaben Serializable types und Reflected strings daher bei der Verarbeitung der Assembly nicht aus.

Eine Aufgabe auszuschalten ist nicht immer möglich, weil dies zu unerwarteten Problemen zur Laufzeit führen kann. Um für ein bestimmtes Symbol das gewünschte Verschleierungsergebnis zu erreichen, können Sie stattdessen eine XML-Regel erzwingen: Setzen Sie ihr Attribut „locked“ auf „true“, dann kann der Agent sie nicht außer Kraft setzen.

<Rule name="rule1" feature="renaming" exclude="false" locked="true"> <Target>Classes</Target> <Pattern>ACME.Data.*</Pattern> <Description>Force renaming of all types in ACME.Data namespace, including serializable ones. </Description> </Rule>

Diese Regel erzwingt die Umbenennung aller Klassen im Namespace ACME.Data, einschließlich aller serialisierbaren Typen.

Last updated on