リフレクションおよび動的クラス読み込み

ms227224.ce(ja-jp,VS.90).jpgms227224.pro(ja-jp,VS.90).jpg リフレクションおよび動的クラス読み込みは、.NET アーキテクチャにおいては非常に優れたツールです。しかし、プログラムの実行時にこのレベルのカスタマイズが行われると、Dotfuscator は指定されたプログラムに読み込まれたすべての型の名前を変更しても安全かどうかを確実に判断できなくなります。

次の (C#) コードを考えてみましょう。

public object GetNewType() {
  Type type = Type.GetType( GetUserInputString(), true );
  object newInstance = Activator.CreateInstance( type );
  return newInstance;
} 

このコードは名前で指定された型を読み込み、その型のインスタンスを動的に作成します。さらに、その名前はユーザーが入力する文字列によって指定されます。(ランタイム データベースや他のプログラムなどからの入力で指定される場合もあります。)

ユーザーがどの型の名前を入力するかは、Dotfuscator では予測できません。したがって、読み込める可能性があるすべての型の名前を対象から除外する必要があります (ただし、メソッドおよびフィールドの名前を変更することは可能です)。このような訳で、ユーザーの手作業による構成 (および Dotfuscator で処理するアプリケーションに対する知識) が重要な役割を果たしているのです。

多くの場合、状況は上記の場合ほど困難ではありません。次のコード例は、前述のコードを一部だけ変更したものです。

public MyInterface GetNewType() {
  Type type = Type.GetType( GetUserInputString(), true );
  object newInstance = Activator.CreateInstance( type );
  return newInstance as MyInterface;
} 

コードから明らかなように、この例の場合、対象から除外する必要があるのは一部の特定の型 (MyInterface を実装している型) だけです。

© 2002-2007 PreEmptive Solutions. All rights reserved.