Version 11.7.0.0
Babel Obfuscator
Enhancements
- AI-Friendly CLI Mode: New global flag
--format=text|json|ndjson(defaulttext). Withjsonorndjson, stdout becomes a structured stream conforming to thebabel.cli.v1schema (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=jsonandbabel --version --format=jsonemit a machine-readable schema describing every option (name, aliases, type, container, negatable flag, description, group) or runtime/platform info. The textual--helpand--versionoutputs 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-exitenables semantic exit codes:0success,10invalid arguments,20input not found,30obfuscation failure,40licensing failure,50key/signing failure. Without this flag, the legacy0/1contract 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.ObfuscatorNuGet MSBuild task. Enterprise licenses are now restricted tobabel.exeand 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
newNameattribute).VirtualMembersObfuscatorVisitor.ProcessVirtualMembersnow consults the externalMapFileNameStrategywhen 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 argumenterrors inmarshal_methods.*.llwhen compiling .NET Android assemblies with the .NET 10 SDK tools 36. TheOverloadedParameterStrategypreviously assigned the same name to all parameters of overloaded methods, which Android's LLVM IR marshal-method generator does not allow.RenameParametersnow 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 theExcludeFilesregex pattern inbuild.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 byObfuscator.csandStandardPhaseBuilder.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
IsolatedFileDatestorage 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
AuthControllerwere being logged atInformationlevel 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/adminaccount and the hardcoded JWT signing key fromappsettings.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 aUserKeyduring user/password login has also been removed, keeping the dedicatedUserKeyauthentication path strictly separate (no roles ⇒ no admin escalation). - IP Whitelist — Allowlist vs Rate-Limit Exemption: The IP whitelist in
IpFilteringMiddlewarewas 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.

