String Encryption(文字列の暗号化)
文字列の暗号化で除去を使用する
DashO の文字列の暗号化による難読化は、コード内の文字列を暗号化された値に置き換えます。その値は、実行中のアプリケーション内で復号されます。 これは、ほとんどの文字列を保護しますが、インラインの文字列定数は必ずしも完全に保護されるとは限りません。 Java コンパイラは文字列定数を行内で展開し、その文字列が使用される場所に効果的にコピーします。 DashO は元のフィールド値を暗号化しません。暗号化すると、間違った動作を引き起こす可能性、たとえば、外部アプリケーションによって使用されるバイナリの API 定数の値を壊したりするなどの可能性があるためです。
つまり、一部の文字列定数は、文字列の暗号化後もその場に暗号化されていない状態で残るということです。 これらの文字列定数は、外部アプリケーションによって使用されない場合には、安全に除去することができます。 したがって、それらの文字列定数を保護するには、使用されていないメンバーを除去するように DashO を構成します。 インラインの文字列定数参照は、定義フィールドを "used" としてマークしません。
ライブラリの場合は Remove if not public
を指定し、それ以外の場合は Remove
を指定します。
Remove if not public
を使用する場合には、パブリック文字列は除去されないため、保護が必要な文字列はパブリックにしないでください。
これらの設定が影響する範囲は、除去の対象からクラス、メソッド、またはフィールドを除外することで調整できます。
また、文字列の暗号化を使用する場合はサイズとパフォーマンスのコストがかかるため、暗号化の対象からメソッドやクラスを除外する必要がある可能性があります。 インラインがある場合は、文字列定数の文字列のすべてのコピーを暗号化するために、文字列定数を定義するクラスと、文字列定数を参照するすべてのクラスの両方を文字列の暗号化で保護してください。
String Encryption — Options
String Encryption — Options パネルでは、文字列の暗号化および暗号化技術を制御するほか、復号メソッドが置かれる場所を制御することができます。
Encrypt Strings
文字列の暗号化のグローバルな適用を有効または無効にします。対象選択規則および対象除外規則を使用することにより、文字列の暗号化が適用されるアプリケーションの部分を制御することができます。規則を何も指定しなければ、すべてのメソッドの文字列が暗号化されます。
Level
このコントロールは、使用する文字列暗号化のレベルを選択します。レベル 1
は単純で高速な復号技術を使用し、レベル 10
はより複雑でより低速な技術を使用します。この値が増えるに従って、逆コンパイルの複雑さを高めるためにさまざまな表現法が用いられるだけでなく、復号メソッドの実装にランダム性の要因を追加するよう、DashO が構成されます。 既定のレベルは 2
です。
Decrypters
これは、各入力に含まれるクラスに対し、復号メソッドが生成、追加される数を制御します。メソッドの名前と署名はランダムに選択されます(入力ファイルを使用する場合を除く)。 既定のメソッド数は 2
です。
メモ:
復号メソッドをグローバルに(復号が使用される jar ファイルの内部に保持するのではなく)配置したい場合は、INJECT_DECRYPTERS_GLOBALLY
という名前のユーザー プロパティを追加し、それをtrue
に設定します。
Decrypter Class
この設定では、生成された静的な匿名内部クラスの外部クラスとして機能する、復号メソッドが格納されるクラスを制御する条件を指定できます。値を何も指定しなければ、DashO が入力内のパブリック クラスからクラスを選択します。選択条件を変更するには、[Edit]ボタンをクリックしてプロパティ ダイアログを表示します。
メモ:
条件を指定すると、復号メソッドはその条件に基づいて差し込まれ、jar のバウンダリに関係なく使用されます。
Input
指定される入力割り当てファイルは、前回の DashO の実行で作成されたファイルです。このファイルによって、DashO は前回の実行で使われた復号と同じ復号を作成することができます。これは、増分難読化では必須です。名前変更割り当てファイルに加えて使用されます。入力ファイルが提供された場合は、Decrypters のレベルと数の設定、および Decrypter Class の条件の設定は無視されます。
Output
このファイルで作成された情報は、今後 DashO を実行する際に入力割り当てファイルで利用できます。これには、復号の種類、使用されるメソッドの名前、およびそれが置かれているクラスに関する情報を格納します。
String Encryption — Include および Exclude
String Encryption – Include および Exclude パネルでは、アプリケーションのどの部分で文字列を暗号化させるかを決定する規則を構成できます。 メソッド、クラス、またはパッケージ全体を選択することができます。 文字列の暗号化は、サイズと実行時のパフォーマンス コストを増やすことから、選択的に、機密事項に関連する文字列情報が位置するアプリケーションの部分を対象として選択したり、パフォーマンスが実行時復号によって影響を受ける可能性があるセクションを除外したりすることができます。
詳細については、グラフィカルな規則エディターを参照してください。
Custom Encryption
Custom Encryption パネルでは、使用する独自の暗号化/復号メソッドを構成できます。独自の暗号化レベルを提供することができます。暗号化メソッドおよび復号メソッドの要件については、カスタム暗号化の使用を参照してください。
Use Custom Encryption
カスタム暗号化の難読化のグローバルな使用を有効または無効にします。対象選択規則を使用することにより、カスタムな文字列の暗号化が適用されるアプリケーションの部分を制御することができます。カスタム暗号化が動作するためには、少なくとも 1 つは規則を指定する必要があります。
Encryption Jar
jar ファイルには、暗号化のクラスとメソッドが含まれています。この jar ファイルはプロジェクトの外部にあります。難読化時、文字列を暗号化するために使用されます。
Encryption Class and Method
テキストを暗号化するために使用されるクラスおよびメソッドです。このメソッドは、出力の一部にはなりません。[Choose...]をクリックすると、暗号化 jar ファイル内の要件を満たすすべてのメソッドを含むダイアログ ボックスが表示されます。
Decryption Class and Method
テキストを復号するために使用されるクラスおよびメソッドです。これらのクラスは、プロジェクトの入力の一部でなければなりません。指定したクラスとメソッドは出力に残ります(ただし、他のプロジェクト設定を基に、名前変更または難読化される可能性があります)。[Choose...]をクリックすると、入力内の要件を満たすすべてのメソッドを含むダイアログ ボックスが表示されます。
Custom Encryption — Include
Custom Encryption – Include パネルでは、アプリケーションのどの部分でカスタム暗号化を使って文字列を暗号化させるかを決定する規則を構成できます。メソッド、クラス、またはパッケージ全体を選択することができます。これは、文字列の暗号化全体のサブセットを考慮する必要があります。ここで指定されたクラス/メソッドはどれも、文字列の暗号化から除外してはいけません。
詳細については、グラフィカルな規則エディターを参照してください。