Babel タスクリファレンス
Babel の MSBuild タスクのすべての属性を機能別にまとめ、各属性に対応するコマンドラインオプションを示します。
Babel タスクは、コマンドラインツールのオプションごとに属性を 1 つ公開し、属性の値をそのままツールに渡します。Boolean の属性は true または false を受け付けます。コマンドラインオプションが引数を取る場合は、同じ引数を属性の値として渡せるため、「Boolean / String」と示された属性はどちらの形式も受け付けます。リスト属性は、; で区切った複数の値を取ります。設定されていない属性には、表に記載した既定値が使われます。
Babel Obfuscator の NuGet パッケージを使用する場合、各属性は MSBuild のプロパティまたは項目で設定します。パッケージリファレンスのプロパティの対応の表を参照してください。
バージョン 12.0 では、改ざん検出のモバイル向けのパッケージの整合性チェックを制御する SingleFile、TrustedSigner、TrustedBundle、TrustedTeam 属性と、StringEncryption の stream 値が追加されました。次の表では 12.0 と示しています。
その他
| 属性 | 型 | 既定値 | コマンドライン | 説明 |
|---|---|---|---|---|
BabelDirectory | 文字列 | babel.exe を含むフォルダーを指定する旧来の方法。そのフォルダーに実行可能ファイルが見つからない場合、タスクは失敗します。ToolPath の使用を推奨します。 | ||
DbgHelpDllDir | 文字列 | --dbghelpdlldir | dbghelp.dll を含むフォルダーのパス。 | |
DetectIfObfuscated | ブール値 / 文字列 | false | --isobfuscated | ターゲットアセンブリがすでに難読化されているかを検出するかどうか。値 warn は警告を出して続行し、exit はアセンブリを処理せずに停止します。 |
EnableObfuscationAgent | ブール値 | true | --agent | 難読化エージェントを実行するかどうか。エージェントはアセンブリを解析し、難読化すると動作しなくなるシンボルを難読化から除外します。 |
License | 文字列 | --license | ライセンスファイルの完全パス、またはライセンスファイルを検索するディレクトリの一覧。 | |
NoConfiguration | ブール値 | false | --noconfig | Babel の構成ファイルに保存された既定値を無視するかどうか。 |
NoWarnings | 文字列 | --nowarn | 無視する警告コードの一覧。 | |
ProvideCommandLineArgs | ブール値 | false | Babel に渡すコマンドラインをログに記録し、CommandLineArgs 出力項目で返すかどうか。 | |
QuickRules | 文字列 | --quickrule | クイックルールの定義。 | |
RandomSeed | 文字列 | --randomseed | 難読化で使用する乱数ジェネレーターのシード。 | |
RemoveKey | ブール値 | false | --removekey | 難読化されたアセンブリから厳密名を除去するかどうか。 |
SatelliteAssemblies | 文字列 | --satellite | 処理するサテライトアセンブリファイルの一覧。 | |
SearchDirectories | 文字列 | --addsearch | 参照先のアセンブリを検索するディレクトリの一覧。References もエイリアスとして使用できます。 | |
SearchSatelliteAssemblies | ブール値 | true | --satellite | ターゲットのサテライトアセンブリを検索して処理するかどうか。 |
ShowLogo | ブール値 | true | --logo | Babel のバージョンと著作権情報を出力するかどうか。 |
ShowStatistics | ブール値 | true | --statistics | 処理の最後に難読化の統計を表示するかどうか。Boolean のみ。統計をファイルに保存するには StatisticsFile を使用します。 |
StatisticsFile | 文字列 | --statistics | 難読化の統計を保存するファイルのパス。ShowStatistics が false の場合は無視されます。 | |
TargetAssemblyName | 文字列 | nochange | --assemblyname | ターゲットアセンブリ名の取得元。nochange、inputfilename、outputfilename、name=<assembly name> のいずれか。 |
ToolExe | 文字列 | Babel の実行可能ファイルの名前。babel.exe または babel.dll。 | ||
ToolPath | 文字列 | Babel の実行可能ファイルがあるディレクトリ。 | ||
Trace | 文字列 | --trace | トレースするシンボルを選択する正規表現の一覧。トレースは、シンボルが難読化される理由や難読化されない理由を示し、難読化ルールのデバッグに役立ちます。 | |
Use | キー=値 | --use | キーと値のペアで指定する使用オプション。 | |
VerboseLevel | 整数 | 1 | --verbose | コンソール出力の詳細レベル。0 はメッセージを無効にし、10 を超える値はデバッグ情報を表示します。 |
WarningsAsErrors | 文字列 | --warnaserror | エラーとして報告する警告コードの一覧。エラーが発生すると難読化の処理は停止します。 | |
WarningsAsInfos | 文字列 | --warnasinfo | 情報メッセージとして報告する警告コードの一覧。 | |
XmlRules | 文字列 | インラインの XML ルール要素。XML ルールを参照してください。 |
入力ファイル
| 属性 | 型 | 既定値 | コマンドライン | 説明 |
|---|---|---|---|---|
InputFile | 文字列 | 難読化するアセンブリのパス。 | ||
KeyContainer | 文字列 | --keyname | 厳密名のキーコンテナーの名前(Windows のみ)。 | |
KeyFile | 文字列 | --keyfile | 難読化されたアセンブリの署名に使用する厳密名キーファイルのパス。 | |
KeyPwd | 文字列 | --keypwd | 厳密名キーファイルまたは証明書のパスワード。 | |
MapInFiles | 文字列 | --mapin | すでに難読化されたアセンブリの XML マップファイルの一覧。それらのシンボルへの参照をリネームするために使用します。 | |
Project | 文字列 | --project | Babel の難読化プロジェクトファイルのパス。 | |
RulesFiles | 文字列 | --rules | 処理する XML ルールファイルの一覧。 |
出力ファイル
| 属性 | 型 | 既定値 | コマンドライン | 説明 |
|---|---|---|---|---|
GenerateLogFile | ブール値 | false | --logfile | 難読化ログを生成するかどうか。ログファイルの既定の名前は <target assembly>.log です。 |
GenerateMapOutFile | ブール値 | false | --mapout | 難読化マップファイルを生成するかどうか。マップファイルの既定の名前は <target assembly>.xml.map です。 |
LogFile | 文字列 | --logfile | 難読化ログファイルのパス。 | |
MakeProject | 文字列 | --makeproject | タスクの設定から作成する MSBuild プロジェクトファイルのパス。 | |
MapOutFile | 文字列 | --mapout | 難読化マップファイルのパス。 | |
OutputFile | 文字列 | --output | 難読化されたアセンブリのパス。 | |
PdbFile | 文字列 | --pdb | デバッグシンボルファイルのパス。 | |
PdbPwd | 文字列 | --pdbpwd | デバッグシンボルファイルのパスワード。 |
プラグイン
| 属性 | 型 | 既定値 | コマンドライン | 説明 |
|---|---|---|---|---|
Plugins | 文字列 | --plugin | プラグインアセンブリファイルの一覧。 | |
PluginsArguments | キー=値 | --argument | キーと値のペアで指定するプラグインの引数。 |
マージと埋め込み
| 属性 | 型 | 既定値 | コマンドライン | 説明 |
|---|---|---|---|---|
CopyAttributes | ブール値 / 文字列 | false | --copyattrs | マージされたアセンブリのアセンブリレベルの属性を、ターゲットアセンブリにコピーするかどうか。正規表現で、マージできる重複した属性を選択します。 |
DependenciesManifest | ブール値 | true | --jsonmanifest | アセンブリをマージまたは埋め込むときに、ターゲットアセンブリの依存関係マニフェスト .deps.json を更新するかどうか。 |
EmbedAssemblies | 文字列 | --embed | ターゲットアセンブリに埋め込むアセンブリファイルの一覧。 | |
Internalize | ブール値 | false | --internalize | マージされた型の可視性をターゲットアセンブリ内に制限するかどうか。 |
MergeAssemblies | 文字列 | ターゲットアセンブリにマージするアセンブリファイルの一覧。 |
リネーム
| 属性 | 型 | 既定値 | コマンドライン | 説明 |
|---|---|---|---|---|
FlattenNamespaces | ブール値 / 文字列 | true | --flatns | リネームされた型をグローバル名前空間に移動するかどうか。文字列を指定すると、代わりに、リネームされた型に共通の名前空間名を設定します。 |
NameLength | 整数 / キー=値 | --namelength | 難読化された名前の最小の長さ。キーと値のペアで、特定の種類のシンボルに長さを割り当てます。 | |
NamePrefix | 文字列 / キー=値 | --nameprefix | 難読化された名前のプレフィックス。$name または任意の文字列。キーと値のペアで、特定の種類のシンボルにプレフィックスを割り当てます。 | |
ObfuscateEvents | ブール値 | true | --events | イベントをリネームするかどうか。 |
ObfuscateFields | ブール値 | true | --fields | フィールドをリネームするかどうか。 |
ObfuscateMethods | ブール値 | true | --methods | メソッドをリネームするかどうか。 |
ObfuscateParameters | ブール値 | true | --parameters | メソッドのパラメーターをリネームするかどうか。 |
ObfuscateProperties | ブール値 | true | --properties | プロパティをリネームするかどうか。 |
ObfuscateTypes | ブール値 | true | --types | 型をリネームするかどうか。 |
ObfuscateXaml | ブール値 / キー=値 | false | --xaml | XAML リソースと BAML リソースが参照するシンボルをリネームするかどうか。キーと値のペアでリネームを設定します。 |
OverloadedRenaming | ブール値 / キー=値 | false | --overloaded | シグネチャの異なるメンバーに同じ名前を再利用するかどうか。キーと値のペアで、オーバーロードするメンバーを選択します。 |
UnicodeNormalization | ブール値 / 文字列 | false | --unicode | Unicode 文字を使って名前を生成するかどうか。無効にすると ASCII 文字が使われます。文字または範囲をコンマで区切った一覧で、文字セットを制限します。 |
VirtualFunctions | ブール値 / キー=値 | true | --virtual | 仮想メンバーをリネームするかどうか。キーと値のペアで、外部のオーバーライドのリネームを設定します。 |
XmlDocFiles | 文字列 | --xmldoc | アセンブリと一緒に処理する XML ドキュメントファイルの一覧。XmlDoc も旧来のエイリアスとして使用できます。 |
制御フロー難読化
| 属性 | 型 | 既定値 | コマンドライン | 説明 |
|---|---|---|---|---|
ControlFlowObfuscation | ブール値 / キー=値 | false | --controlflow | メソッドの制御フローを難読化するかどうか。キーと値のペアでアルゴリズムを選択します。チェーン状態 Ultimate を有効にする chain=on も指定できます。 |
ControlFlowIterations | 整数 | 3 | --iterations | 制御フロー難読化アルゴリズムの反復回数。0 は制御フロー難読化を無効にします。ILIterations と Iterations もエイリアスとして使用できます。 |
EmitInvalidOpcodes | ブール値 / 文字列 | false | --invalidopcodes | 無効な MSIL オペコードを出力するかどうか。出力すると、アセンブリは検証不可能になります。値 enhanced は、無効なオペコードをさらに挿入します。 |
暗号化と保護
| 属性 | 型 | 既定値 | コマンドライン | 説明 |
|---|---|---|---|---|
DebuggingProtection | ブール値 | false | --antidebugging | デバッグ保護を有効にするかどうか。 |
DynamicProxy | ブール値 / 文字列 | false | --proxy | メソッド呼び出しを、動的に生成したプロキシでラップするかどうか。値には、プロキシ化する呼び出しとして internal、external、all のいずれかを指定します。 |
DynamicProxyCallFilters | 文字列 | --proxy | プロキシ化するメソッド呼び出しを選択する正規表現の一覧。 | |
MsilEncryption | ブール値 / 文字列 | false | --msilencryption | メソッドの MSIL コードを暗号化するかどうか。正規表現で、暗号化するメソッドをシグネチャによって選択します。 |
ResourceEncryption | ブール値 / キー=値 | false | --resourceencryption | マネージドリソースを暗号化するかどうか。キーと値のペアで、暗号化と圧縮を個別に有効にします。 |
SingleFile 12.0 | ブール値 | false | --singlefile | ターゲットが単一ファイル、トリミング、NativeAOT のいずれかのアプリケーションとして公開されることを示します。デスクトップターゲットでは、このような公開に対して改ざん検出のチェックは機能しないため、改ざん検出が要求されると Babel は警告を出します。 |
StringEncryption | ブール値 / 文字列 | false | --stringencryption | ユーザー文字列を暗号化するかどうか。値でアルゴリズムを選択します。xor、hash、stream 12.0 Ultimate のいずれか。 |
SuppressIldasm | ブール値 | false | --ildasm | ILDASM が難読化されたアセンブリを逆アセンブルできないようにするかどうか。 |
SuppressReflection | ブール値 / 整数 | false | --reflection | リフレクションを利用するツールを停止させる無効なメタデータを出力するかどうか。整数でレベルを設定します。レベルが高いほど、生成される無効なメタデータが多くなります。 |
TamperingDetection | ブール値 | false | --tamperingdetection | 改ざん検出を有効にするかどうか。 |
TrustedBundle 12.0 Ultimate | 文字列 | --trustedbundle | iOS のパッケージの整合性チェックがピン留めする、信頼された iOS のバンドル ID(CFBundleIdentifier)。 | |
TrustedSigner 12.0 Ultimate | 文字列 | --trustedsigner | Android のパッケージの整合性チェックがピン留めする、信頼された Android APK 署名証明書の SHA-256 フィンガープリントの一覧。フィンガープリントはそれぞれ 16 進数 64 文字です。 | |
TrustedTeam 12.0 Ultimate | 文字列 | --trustedteam | iOS のパッケージの整合性チェックがピン留めする、信頼された Apple Developer のチーム ID。 | |
ValueEncryption | ブール値 / キー=値 | false | --valueencryption | 定数値と配列を暗号化するかどうか。キーと値のペアで、暗号化する値の種類を選択します。 |
最適化
| 属性 | 型 | 既定値 | コマンドライン | 説明 |
|---|---|---|---|---|
CleanAttributes | ブール値 / 文字列 | false | --cleanattrs | 不要な属性を除去するかどうか。正規表現で、除去する属性型の完全名を選択します。 |
ConstRemoval | ブール値 | false | --constremoval | 定数フィールドを除去するかどうか。 |
DeadCodeElimination | ブール値 / 文字列 | false | --deadcode | アプリケーションが使用していないメソッド、プロパティ、イベントを除去するかどうか。正規表現で、検索を開始するエントリポイントを設定します。 |
DisgregateRemoval | ブール値 | false | --disgregateremoval | プロパティとイベントのメタデータを除去するかどうか。 |
EnumRemoval | ブール値 | false | --enumremoval | System.Enum 型を除去するかどうか。 |
InlineExpansion | ブール値 | false | --inlineexpansion | インライン展開の対象としてマークされたメソッドの呼び出しを、メソッド本体に置き換えるかどうか。 |
SealClasses | ブール値 | false | --seal | どの継承チェーンでも使用されていないクラスをシールするかどうか。 |
コード生成
| 属性 | 型 | 既定値 | コマンドライン | 説明 |
|---|---|---|---|---|
AddReferences | 文字列 | --addreference | ターゲットアセンブリの参照として追加するアセンブリの一覧。 | |
Framework | 文字列 | 処理するアセンブリに強制するターゲットフレームワーク名。 | ||
GenerateDebug | ブール値 / 文字列 | false | --debug | 難読化されたアセンブリのデバッグシンボルを生成するかどうか。値としてシンボルストアのパスを指定できます。 |
Instrument | ブール値 / 文字列 | false | --instrument | コードをインストルメント化するかどうか。正規表現で、インストルメント化するメソッドの完全名を選択します。 |
InstrumentEmptyMethods | ブール値 | false | --emptymethods | 本体が空のメソッドをインストルメント化するかどうか。 |
ModuleInitializer | ブール値 / 文字列 | false | --moduleinitializer | ターゲットアセンブリにモジュール初期化子のコードを追加するかどうか。 |
ModuleInitializerTarget | 文字列 | --moduleinitializer | モジュールの読み込み後に呼び出される、パラメーターのない静的メソッドのシグネチャ。 | |
ModuleVersionId | ブール値 / 文字列 | false | --moduleversionid | 難読化されたアセンブリのモジュールバージョン ID(MVID)を設定するかどうか。GUID 文字列を指定するとその値が設定され、指定しない場合はランダムな値が生成されます。 |
パッケージ
| 属性 | 型 | 既定値 | コマンドライン | 説明 |
|---|---|---|---|---|
AndroidSigningKeyAlias | 文字列 | --keyalias | Android キーストア内のキーのエイリアス(APK パッケージ)。 | |
AndroidSigningKeyPass | 文字列 | --keypass | Android キーストア内のキーのパスワード(APK パッケージ)。 | |
AndroidSigningKeyStore | 文字列 | --keystore | Android キーストアファイル(APK パッケージ)。 | |
AndroidSigningStorePass | 文字列 | --storepass | Android キーストアのパスワード(APK パッケージ)。 | |
RemoveFiles | 文字列 | --remove | パッケージから削除するデプロイ済みアセンブリの一覧。 | |
SkipFiles | 文字列 | --skip | 難読化しないデプロイ済みアセンブリの一覧。 | |
TakeFiles | 文字列 | --take | 難読化するデプロイ済みアセンブリの一覧。 | |
XapCompressionLevel | 整数 | 6 | --compress | パッケージの圧縮レベル。0(圧縮なし)から 9 まで(XAP パッケージ)。 |
タスクの出力
| 出力 | 説明 |
|---|---|
CommandLineArgs | Babel に渡されたコマンドライン。ProvideCommandLineArgs が true の場合に利用できます。 |
ExitCode | Babel が返した終了コード。 |
例
次のタスクは、.NET MAUI の Android プロジェクトの中間アセンブリを、STREAM 文字列暗号化と、APK 署名証明書にピン留めした改ざん検出で難読化し、Babel に渡されたコマンドラインを取得します。
<Target Name="Obfuscate" AfterTargets="Compile" Condition="'$(DesignTimeBuild)' != 'true'">
<Babel InputFile="$(ProjectDir)$(IntermediateOutputPath)$(TargetFileName)"
OutputFile="$(ProjectDir)$(IntermediateOutputPath)$(TargetFileName)"
StringEncryption="stream"
ControlFlowObfuscation="true"
ControlFlowIterations="3"
TamperingDetection="true"
TrustedSigner="2924C53EE9C511E9F26E0720FD8151064F7621681667D7AB1899E551CDB25104"
ProvideCommandLineArgs="true">
<Output TaskParameter="CommandLineArgs" ItemName="BabelCommandLineArgs" />
</Babel>
<Message Importance="high" Text="@(BabelCommandLineArgs, ' ')" />
</Target>Last updated on