Skip to Content
Neue Version 12 verfügbar 🎉
ObfuscatorKontrollflussverschleierung

Kontrollflussverschleierung

Die Kontrollflussverschleierung macht eine Methode schwer nachvollziehbar: Sie schreibt die Art um, wie die Anweisungen der Methode verzweigen, und lässt dabei unverändert, was die Methode berechnet. Babel kann if-Anweisungen schwerer lesbar machen, Verzweigungen einfügen, die das Ergebnis nie beeinflussen, und eine Methode um einen Dispatcher herum neu aufbauen, sodass ihre Blöcke nicht mehr in der Reihenfolge des Quellcodes ausgeführt werden. Ziel ist es, den Aufwand für das Dekompilieren und Verstehen des Codes zu erhöhen, sodass Reverse Engineering und Manipulation schwieriger werden.

Babel gliedert seine Arbeit am Kontrollfluss in eine Reihe von Algorithmen, die Sie einzeln einschalten. Sie bilden zwei Familien:

  • Leichtgewichtige Transformationen (if und goto) fügen Verzweigungen und zusätzliche Bedingungen fast ohne Laufzeitkosten hinzu.
  • Abflachende Transformationen (switch, case, call, value und der Ultimate-Algorithmus Chained State) bauen eine Methode um einen Dispatcher herum neu auf. Sie sind deutlich stärker, bei höheren Laufzeitkosten.

Zwei weitere Optionen, token und underflow, erzeugen absichtlich nicht verifizierbaren IL-Code und werden automatisch ausgeschaltet, wenn das Ziel für .NET oder .NET Core bestimmt ist. Die vollständige Liste finden Sie unter Algorithmen.

Kontrollflussverschleierung konfigurieren

Die Kontrollflussverschleierung lässt sich über die Befehlszeile, die MSBuild-Aufgabe Babel oder Babel Desktop konfigurieren. Mit XML-Regeln stimmen Sie die Algorithmen auf bestimmte Gruppen von Methoden ab, zum Beispiel um die Anzahl der Iterationen zu ändern oder einzelne Algorithmen je Methode ein- oder auszuschalten.

Befehlszeile

babel myapp.exe --controlflow goto=on --controlflow if=on --controlflow switch=on --controlflow case=on --iterations 3

Die Option --controlflow schaltet die angegebenen Algorithmen ein, hier goto, if, switch und case, und --iterations legt fest, wie oft jeder Algorithmus auf eine Methode angewendet wird.

MSBuild-Aufgabe Babel

<PropertyGroup> <ControlFlowObfuscation>goto=true;if=true;switch=true;case=false;call=true; value=false;token=false;underflow=false;true</ControlFlowObfuscation> <ILIterations>5</ILIterations> </PropertyGroup> <Babel ControlFlowObfuscation="$(ControlFlowObfuscation)" ILIterations="$(ILIterations)" />

Die Eigenschaft ILIterations legt die Anzahl der Iterationen für die Kontrollflussalgorithmen fest.

Babel Desktop

  1. Öffnen Sie das Projekt in Babel Desktop und wählen Sie die Assembly auf der Zeichenfläche des Projekts aus.
  2. Schalten Sie in der Gruppe Kontrollfluss des Eigenschaftenbereichs ControlFlowObfuscation ein und wählen Sie die Algorithmen aus, die Sie verwenden möchten.
  3. Setzen Sie ILIterations auf die Anzahl der Iterationen, die jeder Algorithmus durchführen soll.
  4. Klicken Sie auf Ausführen, um die Verschleierung zu starten.

Wenn die Verschleierung abgeschlossen ist, zeigt die Ansicht Ergebnisse die Statistiken zum Kontrollfluss: die transformierten Methoden und die Iterationen, die jeder Algorithmus durchgeführt hat, sowie, wenn vollständige Statistiken gesammelt werden, die zyklomatische Komplexität vor und nach der Transformation.

In diesem Abschnitt

  • Algorithmen: jeder Kontrollflussalgorithmus, seine Wirkung und wann Sie ihn verwenden.
  • Chained State Ultimate: ein fortgeschrittener Abflachungsalgorithmus, der gegen die automatisierte Deobfuskierung des Kontrollflusses gehärtet ist.
  • Leistung und Tuning: wie sich jeder Algorithmus auf die Laufzeit auswirkt, ein direkter Vergleich, Iterationen und wie Sie häufig aufgerufene Methoden schnell halten.
Last updated on