Version 11.6.0.0
Babel Obfuscator
Veröffentlicht am 20. Februar 2026
Verbesserungen
- Babel UI – Regelnavigation: Das Laden von Regeln wurde um asynchrones XML-Parsen erweitert, und die Oberfläche reagiert bei großen Regelsätzen flüssiger. Neu sind eine intelligente Regelnavigation mit Fortschrittsanzeige und Abbruchmöglichkeit, Korrekturen für die Thread-Sicherheit sowie eine optimierte Logik zum Aufklappen von Regelknoten, damit die Oberfläche bei Operationen im Regelbaum nicht blockiert.
- Generische Attribute (C# 11): Neu ist die Unterstützung für das Lesen und Schreiben benutzerdefinierter Attribute mit generischen Typparametern (z. B.
MyAttribute<double>). DerGenericParameterResolverwurde aus dem Upstream-Mono.Cecil übernommen, umElementType.Varin Attributkonstruktorsignaturen aufzulösen. BehebtNotImplementedException: Unknown primitive typebei der Verarbeitung von .NET-9.0-Assemblies mit generischen Attributen. - ByRefLike-Generikbeschränkung (.NET 9): Neu sind
GenericParameterAttributes.AllowByRefLikeConstraint(0x0020) und die zugehörige EigenschaftGenericParameter.AllowByRefLikeConstraintzur Unterstützung der generischen Beschränkungallows ref struct. - Unmanaged-Aufrufkonvention: Neu ist
MethodCallingConvention.Unmanaged(0x9) zur Unterstützung vondelegate* unmanaged-Funktionszeigern. - AggressiveOptimization-Attribut: Neu sind
MethodImplAttributes.AggressiveOptimization(0x0200) und die zugehörige EigenschaftMethodDefinition.AggressiveOptimization.
Fehlerbehebungen
- WriteCompressedInt32: Der Algorithmus zur ECMA-335-Kodierung komprimierter vorzeichenbehafteter Ganzzahlen wurde neu geschrieben, damit er
System.Reflection.Metadataentspricht. Die bisherige Umsetzung erzeugte für bestimmte negative Werte (z. B. -9076) falsche Kodierungen, was beim Schreiben von Assemblies mit bestimmten Konstantenwerten oder Attribut-Blobs die Metadaten beschädigen konnte. - Auflösung von Instanz- und statischen Methoden:
MetadataResolver.GetMethodvergleicht jetzt auch das FlagHasThis, sodass eine statische und eine Instanzmethode mit gleichem Namen und gleichen Parametertypen nicht mehr als identisch gelten. Das ist für die korrekte Auflösung statischer abstrakter bzw. virtueller Schnittstellenmember (C# 11) erforderlich. - Tippfehler AggressiveOptimization: Der Tippfehler
AggressiveOptimizatios→AggressiveOptimizationwurde in Mono.Cecil und im Obfuscator-Plug-in-Code korrigiert. - Überschreiben von MaxStackSize (Absturz unter Android/ARM64): Behoben, dass
CodeWriter.ComputeHeader()in Mono.Cecilbody.max_stack_sizebedingungslos mit dem berechneten Wert überschrieb und dabei die Anpassungen der Kontrollfluss-Algorithmen verwarf (goto +3, switch +1/2, if +1). Auf ARM64-CoreCLR (z. B. .NET 10 Android) beschädigte das den Stackframe, was sich in verschleierten Methoden als Null-Werte bei Parametern zeigte. Die Korrektur behält den größeren der beiden Werte und entspricht damit dem bisherigen Verhalten vonReplaceCodeWriter. - Fehlende MaxStackSize-Anpassung in ControlFlowIfAlgorithm: Der If-Verwürfelungsalgorithmus war der einzige Kontrollfluss-Algorithmus, der
MaxStackSizein seinemEndMethodnicht anpasste. Ergänzt wurde eine Anpassung um+1für das Musterldc.i4.0/ldc.i4.1+brtrue/brfalse, das er an Verzweigungspunkten einfügt. - Rückwärtsgerichteter bedingter Sprung in ControlFlowGotoAlgorithm (Absturz unter Android): Der Goto-Verwürfelungsalgorithmus fügte hinter
lastInstructionopake Prädikate mit einem rückwärtsgerichteten bedingten Sprung (bgt/blt/beq) auffirstInstruction.Nextein. Unter .NET Android (CoreCLR x86_64, Interpreter/JIT) wurden diese Rückwärtssprünge als Schleifenrückkanten fehlgedeutet, was zu falscher Codeerzeugung und damit zu Null-Werten bei Parametern führte. Ausgelöst wurde der Fehler konkret durch die Kombination aus IF und GOTO, weil der rückwärtsgerichtete bedingte Sprung des GOTO mitten in die vom IF umgeformten Verzweigungsmuster sprang. Die Korrektur setzt das opake Prädikat zwischenfirstInstructionund dessen Nachfolger, sodass alle Sprünge vorwärts gerichtet sind. Damit entfällt der rückwärtsgerichtete bedingte Sprung, ohne dass die Schutzwirkung nachlässt (Decompiler können weiterhin nicht bestimmen, welcher Vorwärtspfad genommen wird, ohne das opake Prädikat auszuwerten). - Kontrollfluss unter .NET Android/iOS: Behoben, dass
ControlFlowAddMethodToken(token) undControlFlowStackUnderflow(underflow) für .NET-Android- und iOS-Assemblies nicht abgeschaltet wurden. Diese Funktionen werden auf MonoVM nicht unterstützt, wurden aber nur für die alten Xamarin-Assemblies (MonoAndroid/Xamarin.iOS) abgeschaltet. Moderne .NET-Android-/iOS-Assemblies (z. B.net10.0-android) gelten als.NETCoreAppund umgingen damit die Mono-spezifische Abschaltlogik. Der von der token-Option eingefügte toteldtoken-Code konnte den JIT von MonoVM zu falscher Kompilierung verleiten, was zur Laufzeit Null-Parameter zur Folge hatte. - Stack-sensitive Methoden bei DynamicProxy (.NET 10): Behoben, dass
Assembly.GetExecutingAssembly()undAssembly.GetCallingAssembly()bei aktivem DynamicProxy die falsche Assembly zurückgaben. Diese Methoden bestimmen die Assembly des Aufrufers über internes Stack-Walking (StackCrawlMark). Über einen Delegaten geleitet, führten die zusätzlichen Stackframes dazu, dass die .NET-10-Laufzeit eine andere Assembly auflöste (z. B.System.Private.CoreLib) mit leeremLocation, sodassPath.GetDirectoryName(Assembly.GetExecutingAssembly().Location)null zurückgab. Die Korrektur nimmt stack-sensitive Methoden von der DynamicProxy-Verarbeitung aus und behält die direkten Aufrufe bei.
Babel Licensing
Fehlerbehebungen
- Babel UI: Behoben, dass maschinengebundene Lizenzschlüssel nicht neu erzeugt wurden, wenn sich das Ablaufdatum der übergeordneten Aktivierungslizenz änderte, sodass der signierte Lizenzschlüssel veraltete Ablaufdaten behielt, obwohl die Datenbankeinträge aktualisiert waren.
- Babel Licensing-Dienst: Behoben, dass der ASCII-Lizenzschlüssel nicht mit den aktualisierten Ablaufdaten neu erzeugt wurde, wenn das Ablaufdatum einer Aktivierungslizenz über den Management Controller geändert wurde, sodass der signierte Schlüssel veraltet blieb, obwohl die Datenbank korrekt aktualisiert war.
- Gleichzeitiger Zugriff auf den Lizenzspeicher: Neu ist eine Wiederholungslogik für Lese- und Schreibzugriffe auf den Lizenzspeicher, die Dateisperrkonflikte beim gleichzeitigen Zugriff mehrerer Prozesse abfängt und sporadische Fehler „License component not available“ verhindert.

