Kontrollflussalgorithmen
Babel Obfuscator stellt mehrere Kontrollflussalgorithmen bereit, die Sie einzeln einschalten. Die meisten erzeugen verifizierbaren IL-Code und laufen auf jeder unterstützten Laufzeit. Zwei (token und underflow) tun das nicht und werden am Ende dieser Seite behandelt.
Verifizierbare Algorithmen
| Algorithmus | Wirkung |
|---|---|
goto | Fügt irrelevante Verzweigungen ein, die den Kontrollfluss länger und weniger linear machen. |
if | Schreibt if-Anweisungen in komplexere Formen um, indem zusätzliche Bedingungen eingeführt werden. |
switch | Baut eine Methode um einen oder mehrere switch-Dispatcher herum neu auf, sodass ihre Blöcke nicht mehr in der Reihenfolge des Quellcodes ausgeführt werden (dies wird als Abflachung bezeichnet). |
case | Verbirgt die konstanten Werte, die den switch-Dispatcher steuern, sodass sie nicht mehr als einfache Zahlen im Code stehen. |
call | Fügt Variablen hinzu, die den nächsten Sprung im Rumpf des switch bestimmen und durch Aufrufe anderer Methoden erzeugt werden. |
value | Schützt die Selektoren des switch zusätzlich mit der Funktion Wertverschlüsselung. |
chain | Chained State: ein fortgeschrittener Abflachungsalgorithmus, der gegen automatisierte Deobfuskierung gehärtet ist. Verfügbar ab der Ultimate-Edition. Siehe Chained State. |
goto und if kosten wenig und lassen sich breit anwenden. Die switch-Familie (switch, case, call, value) und chain flachen eine Methode ab und sind die stärksten Transformationen, bei höheren Laufzeitkosten, siehe Leistung und Tuning.
Chained State Ultimate
chain ist wie switch ein Abflachungsalgorithmus, wurde aber eigens dafür entwickelt, den automatisierten Tools zu widerstehen, die eine gewöhnlich abgeflachte Methode wiederherstellen können. Er erzeugt verifizierbaren IL-Code und läuft auf jeder unterstützten Laufzeit. Schalten Sie ihn mit --controlflow chain=on ein. Er hat eine eigene Seite: Chained State.
Nicht verifizierbare Optionen
Der Algorithmus token fügt ungültige Metadatentoken in den Kontrollfluss ein, und der Algorithmus underflow fügt dem Methodenrumpf Stellen hinzu, an denen der verwaltete Stack unterlaufen kann. Beide machen den IL-Code nicht verifizierbar.
Die Algorithmen token und underflow vertragen sich nicht mit der Verifizierbarkeit, die .NET- und .NET-Core-Assemblys voraussetzen, und können Laufzeitfehler verursachen. Babel Obfuscator schaltet sie automatisch aus, wenn das Ziel eine .NET- oder .NET-Core-Assembly ist.
Ungültige Opcodes
Die Option Emit Invalid Opcodes fügt neben den Anweisungen, die jeder Algorithmus einfügt, ungültige MSIL-Anweisungen hinzu. Das kann es Decompilern erschweren, den ursprünglichen Code zu rekonstruieren. Wenn Sie die Option einschalten, wird die Assembly nicht verifizierbar, und die CLR muss die Anwendung als 32-Bit-Prozess ausführen.
Schalten Sie Emit Invalid Opcodes nicht ein, wenn die Anwendung als 64-Bit-Prozess laufen muss oder wenn sie für .NET Core oder .NET Framework bestimmt ist und die Assembly dort IL-verifizierbar sein muss, um ausgeführt zu werden. Lassen Sie die Option in diesen Fällen ausgeschaltet.