バージョン11.7.0.0
Babel Obfuscator
機能強化
- AI で扱いやすい CLI モード: 新しいグローバルフラグ
--format=text|json|ndjson(既定はtext) を追加しました。jsonまたはndjsonを指定すると、標準出力がbabel.cli.v1スキーマ (バージョン管理された機械可読形式) に準拠した構造化ストリームになり、人間向けの診断メッセージは標準エラー出力に送られるため、両方のチャネルをきれいに保てます。既存の CLI の仕様は完全に後方互換で、既存の CI スクリプトや顧客側の連携に変更は不要です。babel --help --format=jsonとbabel --version --format=jsonは、すべてのオプション (名前、エイリアス、型、コンテナー、否定可能フラグ、説明、グループ) を記述した機械可読なスキーマ、またはランタイム/プラットフォーム情報を出力します。--format=textでのテキスト形式の--helpと--versionの出力は変わりません。- 新しいフラグ
--quiet(エイリアス-q) は、ロゴのバナーを抑制し、対話的なパスワード入力で停止する代わりに明示的なエラーで即座に失敗させます。無人実行やエージェントからの呼び出しでも安全です。 - 新しいフラグ
--strict-exitは、意味を持つ終了コードを有効にします:0成功、10引数が不正、20入力が見つからない、30難読化の失敗、40ライセンス認証の失敗、50キー/署名の失敗。このフラグを指定しない場合は、従来の0/1の仕様が維持されます。
変更
- Enterprise ライセンス — NuGet/dotnet での制限を強化: Enterprise ライセンスは .NET (CoreCLR) 上では完全にブロックされるようになりました。従来は Windows 以外の dotnet プラットフォームでのみブロックされ、Windows では受け入れられていたため、
Babel.ObfuscatorNuGet の MSBuild タスク経由で使用できてしまいました。Enterprise ライセンスは、ドキュメントに記載のとおりbabel.exeと Babel UI (NET472) に限定されます。
バグ修正
- アセンブリ間リネーム — インターフェイスメンバー: 外部アセンブリのインターフェイスメンバーを暗黙的に実装しているローカルのプロパティ/メソッドが、外部マップファイルでそのインターフェイスメンバーが除外対象とされている (ノードは存在するが
newName属性がない) 場合でもリネームされてしまうリグレッションを修正しました。VirtualMembersObfuscatorVisitor.ProcessVirtualMembersは除外対象を収集する際に外部のMapFileNameStrategyを参照するようになったため、外部側の「リネームしない」指定がローカルの実装メンバーにも伝わり、実行時のインターフェイスディスパッチが正しく動作します。 - オーバーロードされた引数のリネーム (.NET Android、.NET 10 SDK 36): .NET 10 SDK のツール 36 で .NET Android のアセンブリをコンパイルする際に、
marshal_methods.*.llでredefinition of argumentエラーが発生する問題を修正しました。OverloadedParameterStrategyはオーバーロードされたメソッドのすべての引数に同じ名前を割り当てていましたが、Android の LLVM IR マーシャルメソッド生成はこれを許しません。RenameParametersは、Android アセンブリでオーバーロード引数のリネームを無効にするのではなく、名前の重複を検出した際に数値のサフィックスを付けて一意性を保つようになりました。 - ExcludeFiles の正規表現:
build.cakeのExcludeFiles正規表現パターンに紛れ込んでいた末尾の$アンカーを削除しました。これが原因で、一部のファイルが誤ってビルド出力に残っていました。
セキュリティ
- MsilMethodProvider — 復号エラーでの情報漏えい: コードの復号に失敗した際、例外メッセージに試行時のパスワードが含まれていました。メッセージを書き直し、スタックトレースやログにパスワードが漏れないようにしました。
- 内部のライセンス署名パスワードをローテーション:
Obfuscator.csとStandardPhaseBuilder.csが使用するエディション権限の署名に用いる、Keys/{enterprise,ultimate,server,datacenter,standard,professional}.json[x]に埋め込まれた内部署名パスワードをローテーションしました。お客様側での対応は不要ですが、難読化済みアセンブリは新しいキーを取り込むために 11.7.0 で再ビルドすることを推奨します。
Babel Licensing
機能強化
- アクティベーションライセンス — 有効期限の更新: ライセンスを再発行せずにアクティベーションライセンスの有効期限を更新できるよう、Web API のサポートと Babel UI のライセンスエディターへの統合を追加しました。Management Controller に対応するエンドポイントを公開し、エンドツーエンドテスト (
ActivationLicenseTest、GrpcClientTests、LicensesView) がこのフローをカバーしています。 - Babel.Licensing のストレージ暗号化 — DES から AES へ:
IsolatedFileDateのストレージ暗号化を、DES (56 ビットで容易に破られる) から SHA-256 で導出したキーを使う AES-128 に移行しました。この変更は後方互換で、従来の DES で暗号化されたデータも初回アクセス時には読み取れ、次回の保存時に自動的に AES で書き直されます。移行中は、破損したファイルや部分的に移行されたファイルを検出して検証し、実行時の障害を防ぎます。
セキュリティ
- AuthController — 平文パスワードのログ出力を削除: ライセンスサービスの
AuthControllerに送信されたログイン資格情報がInformationレベルでログに記録され、コンソール、ファイル、データベースの各ログシンクに保存されていました。今後はユーザー名のみを記録します。運用者の方は、過去に記録された資格情報を含む可能性のあるログアーカイブのローテーションを行ってください。 - 既定の管理者資格情報とハードコードされた JWT 署名キーを削除:
appsettings.jsonから既定のadmin/adminアカウントとハードコードされた JWT 署名キーを削除しました。ライセンスサービスは、署名キーが設定されていない場合、起動時に暗号学的に安全なランダムキーを自動生成します。既存の環境では、初回起動時に管理者アカウントを明示的に設定する必要があります。これまでの既定の資格情報では認証できません。ユーザー名/パスワードによるログイン時にパスワードをUserKeyとして試す従来のフォールバックも削除し、専用のUserKey認証経路を完全に分離しました (ロールがなければ管理者権限への昇格もありません)。 - IP ホワイトリスト — 許可リストとレート制限の除外:
IpFilteringMiddlewareの IP ホワイトリストが、排他的な許可リストとして誤って動作していました。ホワイトリストに 1 件でもエントリがあると、リストにないすべての IP がサービスからブロックされていました。ホワイトリストの意味を修正し、リストに載っている IP はブルートフォース対策のレート制限から除外される一方、それ以外の IP も標準のレート制限の範囲内で引き続き通常どおりサービスを利用できます。

