VERSIONSHINWEISE

Was ist neu in Babel.

Änderungen an der Engine, den Lizenzverwaltungstools und dem Desktop-Arbeitsbereich, aus den Versionshinweisen des Produkts.

Veröffentlicht am 6. März 2026

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>). Der GenericParameterResolver wurde aus dem Upstream-Mono.Cecil übernommen, um ElementType.Var in Attributkonstruktorsignaturen aufzulösen. Behebt NotImplementedException: Unknown primitive type bei der Verarbeitung von .NET-9.0-Assemblies mit generischen Attributen.
  • ByRefLike-Generikbeschränkung (.NET 9): Neu sind GenericParameterAttributes.AllowByRefLikeConstraint (0x0020) und die zugehörige Eigenschaft GenericParameter.AllowByRefLikeConstraint zur Unterstützung der generischen Beschränkung allows ref struct.
  • Unmanaged-Aufrufkonvention: Neu ist MethodCallingConvention.Unmanaged (0x9) zur Unterstützung von delegate* unmanaged-Funktionszeigern.
  • AggressiveOptimization-Attribut: Neu sind MethodImplAttributes.AggressiveOptimization (0x0200) und die zugehörige Eigenschaft MethodDefinition.AggressiveOptimization.

Fehlerbehebungen

  • WriteCompressedInt32: Der Algorithmus zur ECMA-335-Kodierung komprimierter vorzeichenbehafteter Ganzzahlen wurde neu geschrieben, damit er System.Reflection.Metadata entspricht. 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.GetMethod vergleicht jetzt auch das Flag HasThis, 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 → AggressiveOptimization wurde in Mono.Cecil und im Obfuscator-Plug-in-Code korrigiert.
  • Überschreiben von MaxStackSize (Absturz unter Android/ARM64): Behoben, dass CodeWriter.ComputeHeader() in Mono.Cecil body.max_stack_size bedingungslos 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 von ReplaceCodeWriter.
  • Fehlende MaxStackSize-Anpassung in ControlFlowIfAlgorithm: Der If-Verwürfelungsalgorithmus war der einzige Kontrollfluss-Algorithmus, der MaxStackSize in seinem EndMethod nicht anpasste. Ergänzt wurde eine Anpassung um +1 für das Muster ldc.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 lastInstruction opake Prädikate mit einem rückwärtsgerichteten bedingten Sprung (bgt/blt/beq) auf firstInstruction.Next ein. 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 zwischen firstInstruction und 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) und ControlFlowStackUnderflow (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 .NETCoreApp und umgingen damit die Mono-spezifische Abschaltlogik. Der von der token-Option eingefügte tote ldtoken-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() und Assembly.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 leerem Location, sodass Path.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.