RELEASE NOTES

What’s new in Babel.

Changes to the engine, licensing tools and Desktop workspace, from the product release notes.

Released May 11, 2026

Version 11.7.0.0

Babel Obfuscator

Enhancements

  • AI-Friendly CLI Mode: New global flag --format=text|json|ndjson (default text). With json or ndjson, stdout becomes a structured stream conforming to the babel.cli.v1 schema (versioned, machine-parseable), and human diagnostics are routed to stderr so the channels stay clean. The pre-existing CLI surface is fully backward compatible — existing CI scripts and customer integrations require no changes.
    • babel --help --format=json and babel --version --format=json emit a machine-readable schema describing every option (name, aliases, type, container, negatable flag, description, group) or runtime/platform info. The textual --help and --version outputs are unchanged in --format=text.
    • New flag --quiet (alias -q) suppresses the logo banner and causes interactive password prompts to fail-fast with an explicit error instead of blocking on input — safe for unattended/agent invocations.
    • New flag --strict-exit enables semantic exit codes: 0 success, 10 invalid arguments, 20 input not found, 30 obfuscation failure, 40 licensing failure, 50 key/signing failure. Without this flag, the legacy 0/1 contract is preserved.

Changes

  • Enterprise License — NuGet/dotnet Restriction Hardened: Enterprise licenses are now blocked entirely on .NET (CoreCLR). Previously they were blocked only on non-Windows dotnet platforms but were still accepted on Windows, which allowed them to be used via the Babel.Obfuscator NuGet MSBuild task. Enterprise licenses are now restricted to babel.exe and Babel UI (NET472) as documented.

Bug Fixes

  • Cross-Assembly Renaming — Interface Members: Fixed a regression where local properties/methods implicitly implementing an interface member from an external assembly were still being renamed even when the external map file marked the interface member as excluded (node present, no newName attribute). VirtualMembersObfuscatorVisitor.ProcessVirtualMembers now consults the external MapFileNameStrategy when collecting exclusions, so an external "no rename" entry propagates to the local implementing member and interface dispatch keeps working at runtime.
  • Overloaded Parameter Renaming (.NET Android, .NET 10 SDK 36): Fixed redefinition of argument errors in marshal_methods.*.ll when compiling .NET Android assemblies with the .NET 10 SDK tools 36. The OverloadedParameterStrategy previously assigned the same name to all parameters of overloaded methods, which Android's LLVM IR marshal-method generator does not allow. RenameParameters now enforces uniqueness by appending a numeric suffix when a duplicate name is detected, instead of disabling overloaded renaming for Android assemblies.
  • ExcludeFiles Regex: Removed a stray trailing $ anchor in the ExcludeFiles regex pattern in build.cake, which caused some files to be incorrectly retained in the build output.

Security

  • MsilMethodProvider — Decryption Error Disclosure: When code decryption failed, the exception message included the password used for the attempt. The error message has been rewritten so the password is no longer leaked in stack traces or logs.
  • Internal License Signing Passwords Rotated: Rotated the internal signing passwords embedded in Keys/{enterprise,ultimate,server,datacenter,standard,professional}.json[x], used to sign edition entitlements consumed by Obfuscator.cs and StandardPhaseBuilder.cs. No customer action is required, but obfuscated assemblies should be re-built with 11.7.0 to pick up the new keys.

Babel Licensing

Enhancements

  • Activation License — Update Expiration Date: Added Web API support and Babel UI license editor integration for updating the expiration date of activation licenses without re-issuing the license. The Management Controller now exposes the corresponding endpoint and end-to-end tests cover the flow (ActivationLicenseTest, GrpcClientTests, LicensesView).
  • Babel.Licensing Storage Encryption — DES → AES: Migrated IsolatedFileDate storage encryption from DES (56-bit, trivially breakable) to AES-128 with a SHA-256-derived key. The change is backward-compatible: legacy DES-encrypted data is still readable on first access and is automatically re-written as AES on the next save. Corrupted or partially-migrated files are detected and validated during the migration to prevent runtime failures.

Security

  • AuthController — Cleartext Password Logging Removed: Login credentials submitted to the licensing service AuthController were being logged at Information level and persisted to console, file, and database log sinks. Logging now records only the username. Operators should rotate any historical log archives that may contain the previously-logged credentials.
  • Default Admin Credentials & Hardcoded JWT Signing Key Removed: Removed the default admin/admin account and the hardcoded JWT signing key from appsettings.json. The licensing service now auto-generates a cryptographically-secure random signing key at startup if one is not configured. Existing deployments must explicitly configure an admin account on first start; previous default credentials will no longer authenticate. The legacy fallback that tried the password as a UserKey during user/password login has also been removed, keeping the dedicated UserKey authentication path strictly separate (no roles ⇒ no admin escalation).
  • IP Whitelist — Allowlist vs Rate-Limit Exemption: The IP whitelist in IpFilteringMiddleware was incorrectly behaving as an exclusive allowlist: as soon as any whitelist entry existed, all non-whitelisted IPs were blocked from the service. Whitelist semantics have been corrected — whitelisted IPs are now exempt from brute-force rate limiting, while all other IPs continue to access the service normally subject to the standard rate limits.