Skip to Content
新しいバージョン 12 を公開しました 🎉
Obfuscator動的プロキシ内部呼び出しと外部呼び出し

内部呼び出しと外部呼び出し

動的プロキシは 2 種類の呼び出しに適用でき、プロキシのモードで選択します。

モードプロキシ化する呼び出しの対象
external難読化するアセンブリの外部で定義されたメソッドとコンストラクター(.NET の基本クラスライブラリと参照アセンブリ)
internal難読化するアセンブリの内部で定義されたメソッドとコンストラクター
all内部呼び出しと外部呼び出しの両方

コマンドライン、MSBuild、Babel Desktop からモードを選択する方法については、構成を参照してください。

内部プロキシ呼び出し

内部メソッド呼び出しに動的プロキシを使用すると、コードの難読化と保護の面でいくつかの利点があります。主な利点は次のとおりです。

  1. 実装の詳細の隠蔽:内部の型に対して動的プロキシを生成することで、それらの型の実際の実装の詳細が、外部のコードや潜在的な攻撃者から隠されます。動的プロキシは仲介役として機能し、型の内部ロジックと構造を保護するため、悪意のある者がコードを理解して操作することが難しくなります。
  2. メソッド呼び出しの保護:内部の型に動的プロキシを使用すると、デコンパイラーはメソッドの呼び出しフローの再構築に苦労します。デコンパイラーは、コンパイル済みのコードを解析して、元のソースコードの高レベルな表現を生成します。しかし、動的プロキシによって間接参照の層が加わるため、デコンパイラーがメソッド呼び出しの順序を正確にたどることは困難になります。
  3. 難読化の強化:内部の型に動的プロキシを使用すると、コードベースに難読化のレイヤーがもう 1 つ加わります。プロキシによって複雑さと間接参照が生じるため、リバースエンジニアリングを行う者がコードの基本的な構造や関係を理解することは、より困難になります。これにより、リバースエンジニアリングの試みを抑止し、知的財産を保護できます。

内部呼び出しに動的プロキシを使用すると、デコンパイラーがコード内の呼び出しフローを正確に再構築することを妨げる障壁ができます。これにより保護のレイヤーが加わり、攻撃者やリバースエンジニアリングを行う者がアプリケーションの基本的なロジックと動作を理解することが、より難しくなります。

外部プロキシ呼び出し

Babel Obfuscator の外部プロキシ呼び出しは、推論した型に基づいてローカル変数名を再構築しようとするデコンパイラーに対する、効果的な防御手段になります。デコンパイラーは多くの場合、変数の型など、利用できるメタデータを頼りに、変数の元の名前を再構築します。

たとえば、次のデコンパイルされたコードでは、ツールは List<string> 型のインスタンスコンストラクターの呼び出しから list1 という変数名を、get_Count() メソッドの呼び出しから count という変数名を推論しています。

var list1 = new List<string>(); int count = list1.Count;

外部プロキシ呼び出しを有効にすると、Babel Obfuscator は、外部コードへの直接のメソッド呼び出しを、動的に生成されたプロキシクラスの呼び出しに置き換えます。これらのプロキシクラスは仲介役として機能し、メソッド呼び出しをインターセプトしてリダイレクトします。その結果、元のメソッド呼び出しと、それに関連するローカル変数名が隠され、難読化されます。

動的プロキシを有効にすると、上のコードは次のようになります。

var local1 = new a(); int local2 = local1.b();

メタデータだけに頼って変数名を再構築するデコンパイラーは、外部プロキシ呼び出しに対しては、うまく機能しません。元のメソッド呼び出しはプロキシ呼び出しに置き換えられているため、推論された変数の型だけでは、元の変数名について意味のある情報は得られません。これにより、型推論だけに基づいて元の名前を再構築するデコンパイラーの能力が、効果的に妨げられます。

Last updated on