メソッド分散を実現する難読化手法を実現する DonQuixote プラグイン.こ の難読化手法は,与えられたクラスファイルの集合の結合度を密にする.
Java 言語で書かれたライブラリやアプリケーションは,クラスファイルの集 合である jar ファイル形式で配布されることが多い.また,オブジェクト指 向言語であるため,多くの場合,クラス間の結合は疎であることが多い.この 難読化手法は jmark に代表されるダミーメソッドに埋め込まれた電子透かし の埋め込み場所の特定を困難にするための難読化手法である.
| Name | Default Value | Description |
| chooser | random | どのメソッドを選択するのかを決定する選択器を指定する.random のみが有効.将来の拡張で新たに増えるかもしれない. |
| iteration | 10 | 一つのメソッドを移動させることを 1 iteration と呼び,それを何度繰り返すのかを指定する.すなわち,ここで指定した数のメソッドが移動する. |
ここで難読化例を示す.
public class ValueHolder{
private int value = 10;
public void setValue(int value){
this.value = value;
}
public int getValue(){
return value;
}
}
public class MethodDestination{
public static ValueHolder staticMethod(){
ValueHolder holder = new ValueHolder();
holder.setValue(5);
return holder;
}
}
これを 1 iteration で難読化すると以下のようになる.ここで,A = ValueHolder, B = MethodDestination, m = setValue とする.ただし,ソー スコードは説明の簡単化のために示しているだけであるため,実際に変換され たコードとは多少異なる点がある場合がある.
public class ValueHolder{
public int value = 10;
public int getValue(){
return value;
}
}
public class MethodDestination{
public static ValueHolder staticMethod(){
ValueHolder holder = new ValueHolder();
MethodDestination.setValue(holder, 5);
return holder;
}
public void setValue(ValueHolder holder, int value){
holder.value = value;
}
}
ValueHolder のフィールド,value のアクセス権,そして, MethodDestination#staticMethod 内での setValue の呼び出し,移動された メソッド setValue の中身,そして,シグネチャがそれぞれ変更されている.