Skip to Content
新しいバージョン 12 を公開しました 🎉

制御フローアルゴリズム

Babel Obfuscator には複数の制御フローアルゴリズムがあり、個別に有効にできます。ほとんどのアルゴリズムは検証可能な IL を生成し、サポートされているすべてのランタイムで動作します。2 つのアルゴリズム(token と underflow)はそうではなく、このページの最後で説明します。

検証可能なアルゴリズム

アルゴリズム動作
goto無関係な分岐を挿入し、制御フローを長く、直線的でないものにします。
if条件を追加して、if ステートメントをより複雑な形に書き換えます。
switch1 つ以上の switch ディスパッチャーを中心にメソッドを再構築し、ブロックがソースの順序で実行されないようにします(これを「フラット化」と呼びます)。
caseswitch ディスパッチャーを動かす定数値を隠し、コード内に単純な数値として現れないようにします。
callswitch 本体内の次のジャンプ先を決める変数を追加します。これらの変数は、他のメソッドの呼び出しによって生成されます。
value値の暗号化機能を使用して、switch のセレクターをさらに保護します。
chainチェーン状態:自動的な難読化解除に対して強化された、高度なフラット化アルゴリズムです。Ultimate エディション以上で使用できます。チェーン状態を参照してください。

goto と if は負荷が小さく、広く適用できます。switch 系(switch、case、call、value)と chain は、メソッドをフラット化する最も強力な変換ですが、実行時のコストは高くなります。パフォーマンスとチューニングを参照してください。

チェーン状態 Ultimate

chain は switch と同じくフラット化アルゴリズムですが、通常のフラット化されたメソッドを再構築できる自動ツールに耐えるよう、特別に設計されています。検証可能な IL を生成し、サポートされているすべてのランタイムで動作します。--controlflow chain=on で有効にします。詳しくは、専用のページチェーン状態を参照してください。

検証不可能なオプション

token アルゴリズムは無効なメタデータトークンを制御フローに挿入し、underflow アルゴリズムは、マネージドスタックがアンダーフローする可能性のある箇所をメソッド本体に追加します。どちらも IL を検証不可能にします。

token と underflow のアルゴリズムは、.NET および .NET Core アセンブリの検証可能という性質と両立せず、実行時エラーを引き起こす可能性があります。.NET または .NET Core アセンブリを対象とする場合、Babel Obfuscator はこれらを自動的に無効にします。

無効なオペコード

「Emit Invalid Opcodes」オプションは、各アルゴリズムが挿入する命令と並べて、無効な MSIL 命令を追加します。これにより、デコンパイラーが元のコードを再構築しにくくなります。このオプションを有効にすると、アセンブリは検証不可能になり、CLR はアプリケーションを 32 ビットプロセスとして実行せざるを得なくなります。

アプリケーションを 64 ビットプロセスとして実行する必要がある場合、または、実行するためにアセンブリが IL 検証可能でなければならない .NET Core や .NET Framework を対象とする場合は、「Emit Invalid Opcodes」を有効にしないでください。そのような場合は、このオプションをオフのままにしてください。

Last updated on