PreEmptive Protection - DashO v8.0 User Guide

Advanced モード画面

このセクションでは、Advanced モード プロジェクト用の PreEmptive Protection - DashO インターフェイスの使用方法について説明します。このインターフェイスでは、新しいプロジェクトの作成または既存プロジェクトの編集を実行できます。作成または編集したプロジェクトを保存して、後からコマンド ライン インターフェイスや Ant で使用することもできますが、インターフェイス内で難読化を実行して、その結果を表示することも可能です。

Input セクション

Input セクションは、プロジェクトへの入力を構成するために使用されます。これには、処理される jar ファイルの場所とクラスのディレクトリ、およびアプリケーションの動的な流れを分析するために使用される、これらのクラスへのエントリ ポイントが含まれます。

Input – Jars and Classes

Input セクションは、処理するクラスの場所から始まります。DashO はディレクトリや、クラスパス内のクラス、zip ファイル、および jar ファイルを処理することができます。また、単一の APK ファイルもサポートしています。エントリは、[Add]ボタンを使用してファイル システムからそれらを選択することによって追加できます。[New]ボタンを使ってエントリを作成し、名前を編集することもできます。入力の項目を追加または削除した後、ツール バーにある「クラス一覧の更新」アイコンを使用するか、ショートカット メニューから[Refresh List]を使用してください。

メモ:

エントリを追加または削除すると、クラス ツリーは自動的に更新されます。ただし、手で名前を入力した場合は自動的に更新されません。名前の編集が終わったら、更新ボタンを使用してください。

入力エントリの作成の詳細については、<inputpath> セクションを参照してください。

Input – Supporting Classpath

DashO は、Java ランタイムのクラスと、サード パーティの jar ファイル内のクラスにアクセスする必要があります。ここで参照されるクラスは、DashO の分析に必要なだけで処理されません。エントリは、[Add]ボタンを使用してファイル システムからそれらを選択することによって追加できます。[New]ボタンを使ってエントリを作成し、名前を編集することもできます。

既定で、DashO が使用する Java ランタイムの場所はパスに追加されます。J2ME や Android の API を使用するプロジェクトは、クラスパスにランタイム jar ファイルを追加しないでください。このようなプロジェクトは、これら特定の環境用のランタイム jar ファイル、たとえば midpapi10.jarAndroid.jar を必要とします。提供したエントリに環境のクラスパスを Append(末尾に追加)したり、Prepend(先頭に追加)したりすることもできます。

新しいクラスパス エントリの作成の詳細については、<classpath> セクションを参照してください。

Input – Global Processing Exclusions

Input – Global Processing Exclusions パネルでは、すべての処理から除外しなければならないクラスやパッケージを指定できます。

この UI では、クラスのグローバルな対象除外の規則を定義します。詳細については、グラフィカルな規則エディターの使用を参照してください。ここで設定した規則はすべての機能の除外セクションにあるかのように、規則に一致するあらゆるクラスが除外されます。詳細については、<globalProcessingExclude> セクションを参照してください。

メモ:

一致したクラスはまた、文字列の復号の候補、Constant Pool Tag、および SourceFile Tag の追加からも除外されます。他の UI 画面のクラス一覧は、再読み込みした後に影響を受け、グローバルに除外されたクラスが表示されなくなります。

Input – Included Non-Class Files

Input – Included Non-Class Files パネルでは、アプリケーションに含まれていなければならないイメージ、プロパティ、構成ファイルなどの、非クラスの内容のソースを指定できます。

Add]ボタンを使って既存のファイルを選択することにより、ディレクトリ、個々のファイル、または jar ファイルを一覧に追加することができます。[New]ボタンを使ってエントリを作成し、名前を編集することもできます。ディレクトリおよび jar ファイルの場合、非クラスのすべてのファイルは DashO の出力にコピーされます。ディレクトリ エントリには、特定のファイルの種類を選択するための * 文字を使ったワイルドカード パターンを含めることができます。

ディレクトリ、zip、および jar ソース内部の非クラス ファイルは、それらの相対的な内部ディレクトリを保持して出力先にコピーされます。指定した非クラス ファイルが出力先にコピーされます。詳細については、<includenonclassfiles> セクションを参照してください。

メモ:

非クラス ファイルの処理中に検出された XML 構成ファイルは、クラス名やメソッド名を変更できるように更新されることがあります。

入力をマージするとき、入力に非クラス ファイルが含まれている場合は、[Auto Copy]をオンにするか、ここでそれらを参照することができます。入力をマージしない場合は、DashO が入力 jar ファイル内のすべての非クラス ファイルを自動的にコピーします。ただし、入力ディレクトリに現れる非クラス ファイルはコピーされません。詳細については、Auto copy を参照してください。

Input – Options

このパネルは、DashO が入力クラスの分析時に使用するいくつかの基本的なオプションを制御します。

Ignore Missing Classes

DashO は、アプリケーションが呼び出そうとするすべてのクラスの分析を試みます。このオプションを選択することで、これらのクラスを無視するよう DashO に指示できます。ただし、DashO は、アプリケーションが拡張または実装するクラスとインターフェイスをスキップできないことに注意してください。

Ignore Missing Methods

DashO は分析の一環として、メソッドの具体的な実装を探そうとします。このオプションをオンにすると、目的のメソッドを見つけられない場合でも処理が進められるようになります。このオプションは慎重に使用してください。

Bypass DashO Processing

このオプションをオンにすると、DashO は何も処理を実行しないように構成されます。単に、入力が出力にコピーされます。このオプションは、マージされていないディレクトリまたは APK を出力するときにサポートされます。

Reflection Halts Build

DashO の分析では、リフレクションのターゲットを識別できるように、アプリケーションでのリフレクションの使用状況を記録します。アプリケーションのどの部分がリフレクションを使用しているか判断している場合には、このオプションをオンにします。

メモ:差し込まれたコードがリフレクションを使用することがあるため、このオプションを有効にしている場合は差し込みを無効にする必要があるかもしれません。

Determine Reflected Classes

DashO は、リフレクションの一部のターゲットを決定し、これらのクラスが確実に出力に現れるよう、自動的に追加することができます。この処理によって、ビルド時間が長くなる可能性があることに注意してください。

Rename Reflected Classes

既定では、リフレクションのターゲットの名前は変更されません。これらのクラスの名前を変更できるようにするには、このオプションを使用します。

Entry Points – Methods and Fields

フィールドとメソッドは、アプリケーションへのエントリ ポイントを示すために使用されます。DashO の分析はエントリ ポイントの場所から始まり、これらを使用して、アプリケーションの呼び出し先を詳しく検討します。これにより、DashO は使用されていないクラスやメンバーを除去することが可能になります。既定では、エントリ ポイントとして使用されるメソッドやフィールドの名前は変更不能です。クラスおよびメンバーの名前を変更可能にするには、項目を右クリックして[Properties]ダイアログ ボックスを表示し、[Rename]チェック ボックスをオンにします。

メソッドやフィールドに基づくエントリ ポイントを定義する規則を構成するには、グラフィカルな規則エディターの使用セクションを参照してください。

条件付き対象選択

ときには、クラス ファイルをプロジェクトに手作業で含める必要が生じることがあります。Class.forName() コンストラクトがプロジェクトのどこかで使用されている場合、DashO は必要とされる可能性のあるすべてのクラスを判断できません。この場合には、forName() コンストラクトで参照されるあらゆるクラスは、エントリ ポイントとして手動で含める必要があります。これらのクラスの名前を変更可能にしてはいけません。forname 検出の詳細については、クラスの動的読み込みを参照してください。

メモ:

エントリ ポイントが定義されていない場合、DashO は、入力 jar ファイルのマニフェストにエントリ ポイントを見つけられないかどうか調べます。何も見つからない場合は、既定値である "ライブラリ モード" になります。このモードでは、すべての public および protected のクラスとメンバーがエントリ ポイントとして使用されます。

Entry Points – Libraries

クラスの jar ファイルやディレクトリを、ライブラリのエントリ ポイントとして使用することができます。DashO は、クラスの全パブリック メンバーを名前変更可能でないエントリ ポイントとして使用します。任意で、プロテクト メンバーを名前変更可能でないエントリ ポイントとして追加することもできます。

ライブラリは、[Add]ボタンを使用してファイル システムからそれらを選択することによって追加できます。[New]ボタンを使ってライブラリ エントリを作成し、名前を編集することもできます。ライブラリ エントリの名前にプロパティ参照を含めることができます。

ライブラリのエントリ ポイントの詳細については、<library> エントリ ポイントを参照してください。

メモ:

ライブラリとして追加された jar ファイルやフォルダーを入力一覧に追加する必要はありません。ライブラリは入力一覧と組み合わさって、処理するクラスを決定します。ライブラリのエントリを追加または削除したら、ツール バーまたはメニューから更新オプションを使用して、入力クラスの一覧を更新することができます。

Entry Points – Special Classes

特殊クラスのエントリ ポイントを使用すると、クラスの仕様として、インターフェイスの実装や、アプリケーションへのエントリ ポイントを定義するクラスの拡張を含めることが可能になります。これらのエントリ ポイントは、通常、Spring、J2ME、アプレットの類のフレームワークによって定義されます。これらのクラスの名前は、完全一致、パターン、あるいは正規表現で指定することができます。

既定では、特殊クラスの名前は変更不能です。クラスとそのメンバー(ほとんどの場合、メンバー)の名前を変更可能にするには、編集する項目を右クリックして[Properties]ダイアログ ボックスを表示し、[Rename Class]または[Rename Members]チェック ボックスをオンにします。

Applet

DashO では、アプレットは、直接的または間接的に java.applet.Applet を拡張するクラスです。アプレットのクラスの名前は変更可能にできますが、java.applet.Applet によって定義されるメソッドの名前は変更可能になりません。詳細については、<applet> セクションを参照してください。

Servlet

DashO では、サーブレットは、直接的または間接的に javax.servlet.Servlet を実装するクラスです。サーブレットのクラスの名前は変更可能にできますが、java.applet.Servlet によって定義されるメソッドの名前は変更可能になりません。詳細については、<servlet> セクションを参照してください。

Enterprise JavaBeans – EJB

Enterprise JavaBeans は、分散型オブジェクト指向の企業アプリケーションを作成するために使用できる、Java で書かれたサーバー側のコンポーネントです。DashO の目的としては、EJB は、Bean のホームと主要なクラスを含む javax.ejb パッケージで定義されているインターフェイスを拡張するクラスです。詳細については、<ejb> セクションを参照してください。

MIDlet と iAppli

MIDlet は、Java ME、CLDC、または MIDP を使用して、埋め込みデバイスで動作する Java クラスです。MIDlet クラスは、直接的または間接的に javax.microedition.midlet.Midlet を拡張する必要があります。iAppli クラスも似ていますが、こちらは NTT ドコモの iアプリ フレームワークを使用して、直接的または間接的に com.nttdocomo.ui.IApplication を拡張します。MIDlet および iAppli のクラスの名前は変更可能にできますが、javax.microedition.midlet.Midlet または com.nttdocomo.ui.IApplication によって定義されるメソッドの名前は変更可能になりません。詳細については、<midlet> と <iappli> セクションを参照してください。

Android

Android は、Android アプリケーションのクラスを識別するために使用されます。これらのクラスは、android.app.Applicationandroid.app.Activityandroid.app.Serviceandroid.content.BroadcastReceiver、または android.content.ContentProvider を拡張します。これらはそれぞれ AndroidManifest.xml 内に、アプリケーション、アクティビティ、サービス、レシーバー、またはプロバイダーとして指定されています。詳細については、<android> セクションを参照してください。

SpringBean

SpringBean は、Spring Bean として使用されているクラスを識別するために使用されます(これらのクラスは、spring xml 構成ファイルで参照されます)。init-methoddestroy-method など非プロパティ メソッドのための、Additional Entry Points の設定があります。他の特殊クラスとは異なり、名前を変更するメンバーはさまざまなカテゴリに分けられます。

  • Rename Property Methods – プロパティ メソッドおよびフィールドの名前の変更を制御します。

  • Rename Entry Points – 指定された Additional Entry Points の名前の変更を制御します。

  • Rename Other Members – その他すべてのメソッドおよびフィールドの名前の変更を制御します。

詳細については、<springbean> セクションと Spring Framework を使用したプロジェクト セクションを参照してください。

Class public fields/methods

DashO は、クラス内のすべてのパブリック フィールドおよびメソッドをエントリ ポイントとして使用します。クラスとそのパブリック メンバーの名前は変更されません。詳細については、<publics> セクションを参照してください。

Class all fields/methods

DashO は、クラス内のすべてのフィールドおよびメソッドをエントリ ポイントとして使用します。クラスとその全メンバーの名前は変更されません。このようにクラスを指定すると、クラスの対象選択が無条件で実行されます。詳細については、<unconditional> エントリ ポイント セクションを参照してください。

Options – User Properties

User Properties パネルでは、プロジェクトで参照できるプロパティを作成し、値を割り当てることができます。これを使用すると、テンプレートとして機能するプロジェクトを作成できます。プロパティは、他のプロパティの条件に基づいて定義したり、他のプロパティの値を操作したり、既定値を提供したりすることができます。プロパティの値は、環境変数への参照も含め、1 つまたは複数のプロパティ参照を使用して指定できます。このプロパティ参照として、既定値、間接参照、置換構文が挙げられます。詳細については、プロパティ参照を参照してください。再帰的なプロパティを定義することはできません。

プロジェクトでのプロパティの使用については、<propertylist> セクションを参照してください。

Removal – Options

Removal – Options パネルでは、入力に含まれる使用されていないクラスとメンバーに起こることと、メタデータの除去について制御します。

Unused Classes

これは、使用されていないクラスの処理を制御します。オプションには、未使用のクラスをすべて除去する、パブリックでない未使用クラスのみ除去する、除去を実行しない、があります。詳細については、<removal> を参照してください。

Unused Members

これは、使用されていないメソッドとフィールドの処理を制御します。オプションには、未使用のメンバーをすべて除去する、パブリックでない未使用メンバーのみ除去する、除去を実行しない、があります。詳細については、<removal> を参照してください。

Debug Information

これは、コンパイラによって挿入されるデバッグ情報の除去を制御します。ほとんどの情報はデバッガーが使用するためのものですが、保持する最も有用な情報は行番号とソース ファイルです。行番号を含むスタック トレースを生成するには、これら 2 つが保持されている必要があります。詳細については、<debug> セクションを参照してください。

メモ:

[Local Variables]および[Local Variable Types]のフィールドの名前は変更されません。製品リリースでこれらの属性をそのままにしておくと、難読化を損なう可能性があります。

Attributes

Java コンパイラは、クラスとそのメンバーの追加のメタデータを生成し、その情報をクラス ファイル内の属性に格納します。この情報の一部は、コンパイラがライブラリに対してコンパイルを実行する際に、あるいはリフレクションを使用するアプリケーションで必要となります。クラス ファイルのサイズを縮小するために、これらの設定を使用して、アプリケーションが実行時に必要としない情報を選択的に除去することができます。詳細については、<attributes> セクションを参照してください。

メモ:

TypeAnnotation は常に削除されます。これはハードコードされていて解除することができません。

Removal – Exclude

Removal – Exclude パネルでは、クラスや、クラスのメソッドおよびフィールドを名前の変更対象から除外する規則を構成できます。個々のメソッド、フィールド、クラス、またはパッケージ全体を除外することができます。

正規表現を使用して、個々のクラスやクラスのグループ、あるいはパッケージ全体を除外する規則を作成することができます。詳細については、グラフィカルな規則エディターの使用を参照してください。

メモ:

ここで参照されるクラスは、Classes セクションで参照されていても除去されます。

Removal – Classes

単体テストやサンプルなどのような、結果の出力に現したくないクラスが入力に含まれている場合は、DashO でそれらを除去することができます。これらの規則に一致するクラスは、DashO の出力に現れないようになります。それらがほかの入力クラスの参照である場合は、サポート クラスであるかのように扱われます。

正規表現を使用して、個々のクラスやクラスのグループ、あるいはパッケージ全体に一致する規則を作成することができます。詳細については、グラフィカルな規則エディターの使用を参照してください。

メモ:

ここで参照されるクラスは、さらに Exclude セクションで参照されていても除去されます。

Removal – Method Calls

ログやコンソール出力などのような、結果の出力に存在してほしくないメソッドの呼び出しが入力に含まれている場合は、DashO でそれらを除去することができます。ここで指定されたメソッドの呼び出しは、入力クラスから除去されます。除去できるのは、'void' を返すメソッドの呼び出しだけです。メソッド自体は除去されません。それらメソッドの呼び出しのみが除去されます。

正規表現は、クラス名、メソッド名、および署名ではサポートされません。ただし、クラス名「**」のエントリは、すべてのクラスの当該メソッドと一致します。

メモ:

クラス名に ** を使用する場合は、それらのメソッドが名前の変更対象から除外されるように、該当メソッドに類似した規則を追加するようにしてください。

Obfuscation – Options

Obfuscation – Options パネルでは、プロジェクトの基本的な難読化設定を制御します。Obfuscation 下にある他のパネルを使用して、各操作の仕様を変更したり、アプリケーションの一部または全部に対して難読化技法を適用したりすることができます。

Control Flow

制御フローの難読化のグローバルな適用を有効または無効にします。対象選択規則および対象除外規則を使用することにより、制御フローが適用されるアプリケーションの部分を制御することができます。規則を何も指定しなければ、すべてのメソッドに制御フローが適用されます。

Renaming

クラス、メソッド、およびフィールドの名前の変更をグローバルに適用するかどうか(有効または無効)を指定します。対象除外規則を使用して、名前の変更が適用されるアプリケーションの部分を制御できるだけでなく、パッケージ、クラス、およびメソッドの名前の変更を制御することができます。オーバーロード誘導(Overload Induction™)は、同じ名前のメソッドを多く生成するために、メソッドの署名に基づいてメソッドの名前を変更します。単純な名前の変更(Simple)は、オーバーロードがないようにメソッドの名前を変更します。

Encrypt Strings

文字列の暗号化のグローバルな適用を有効または無効にします。対象選択規則および対象除外規則を使用することにより、文字列の暗号化が適用されるアプリケーションの部分を制御することができます。規則を何も指定しなければ、すべてのメソッドの文字列が暗号化されます。

Members オプション

このセクションには、クラスのメンバー、つまりメソッドとフィールドに影響を与える難読化オプションがあります。

Make Synthetic

この難読化は、メソッドとフィールドを、Java コンパイラによって生成される合成としてマークします。これは、一部の逆コンパイラを混乱させます。使用可能な設定は 4 つあります。

  • Never – メソッドもフィールドも影響を受けません。

  • Only private and package – private または package-private のメソッドとフィールドは合成とされます。

  • If not public – private、package-private、または protected のメソッドとフィールドは合成とされます。

  • All – すべてのメソッドとフィールドが合成とされます。

この設定は、プロジェクト ファイルの <make-synthetic> セクションに格納されます。

Control Flow – Options

Control Flow – Options パネルでは、逆コンパイラをさらに混乱させるために、Try/Catch ハンドラーをメソッドに追加する必要があるかどうかを決定することができます。また、メソッドに追加するハンドラーの最大数を選択することもできます。

Control Flow – Include および Exclude

Control Flow – Include および Exclude パネルでは、アプリケーションのどの部分で制御フローの難読化をメソッドに適用させるかを決定する規則を構成できます。メソッド、クラス、またはパッケージ全体を選択することができます。パフォーマンス問題の可能性について不安がある場合は、項目を除外する必要があります。

詳細については、グラフィカルな規則エディターの使用を参照してください。

Renaming – Options

名前の変更を有効にした場合は、Renaming – Options パネルで、アプリケーションに含まれる項目の名前の変更をより詳細に制御できます。

Renaming

クラス、メソッド、およびフィールドの名前の変更をグローバルに適用するかどうか(有効または無効)を指定します。対象除外規則を使用して、名前の変更が適用されるアプリケーションの部分を制御できるだけでなく、パッケージ、クラス、およびメソッドの名前の変更を制御することができます。オーバーロード誘導(Overload Induction™)は、同じ名前のメソッドを多く生成するために、メソッドの署名に基づいてメソッドの名前を変更します。単純な名前の変更(Simple)は、オーバーロードがないようにメソッドの名前を変更します。

Rename Annotations

内部定義されたアノテーションの名前の変更を有効または無効にします。

Classes/Packages

クラスの名前を変更するか、または元の名前を保持するかを選択できます。これは、すべての制御コースのレベルに用意されています。対象除外を使用して、個々のクラス、パッケージ全体、または特定の条件を満たすクラスの名前を保持することができます。[Randomize]がオンになっている場合は、利用可能な最も短い識別子の一覧の中から、新しいクラス名がランダムに割り当てられます。

クラスの名前が変更される場合は、パッケージの階層をフラット化する必要があるか、またはパッケージの階層の名前付けを保持するかどうかを指定できます。

クラスの名前が変更される場合は、新しい名前に任意のプレフィックスを付けることができます。プレフィックスでピリオドを使用すると、名前変更されたクラスを別のパッケージに置くことができます。

メモ:フラット化された場合、ピリオドを含む プレフィックス がない限り、名前変更されたすべてのクラスが既定のパッケージに移動されます。

Members

すべてのメソッドおよびフィールドの名前を変更するか、またはパブリック メンバーの名前を保持するかを選択できます。これは、すべての制御コースのレベルに用意されています。対象除外を使用して、メソッドの名前、引数、およびその他の条件を基に特定のメソッドの名前を保持することができます。[Randomize]がオンになっている場合は、利用可能な最も短い識別子の一覧の中から、新しいメソッド名およびフィールド名がランダムに割り当てられます。

Alphabets

クラスやメンバーの新しい名前を作成するために使用される文字集合を指定できます。定義済みの文字集合の中から 1 つを選択するか、または独自の文字集合を入力することができます。独自の文字集合を作成する際は、次の制限が適用されます。

  • 文字集合の最小の長さは 2 文字です。大きなプロジェクトに対しては、3 文字以上が推奨されます。

  • 文字集合の初めの文字は、Java 識別子の開始文字として有効でなければなりません。少なくとも 1 つは開始文字がある必要があります。

  • 文字集合の残りの文字は、Java 識別子で有効な文字でなければなりません。

Renaming – Exclude

Renaming – Exclude パネルでは、クラスや、クラスのメソッドおよびフィールドを名前の変更対象から除外する規則を構成できます。個々のメソッド、フィールド、クラス、またはパッケージ全体を除外することができます。

クラスの規則が定義されている場合は、それを使用して、クラス自体を名前の変更対象から除外したり、メソッドおよびフィールドの規則に一致するメンバーのみを除外したりすることができます。この設定を変更するには、プロパティを編集する規則を右クリックして[Properties]を選択し、表示されるダイアログで[Selects Class]設定を変更します。

詳細については、グラフィカルな規則エディターの使用を参照してください。

Renaming – Map Files

Renaming – Map Files パネルは、プロジェクトの名前変更情報の読み取りと書き込みを DashO に指示するために使用されます。この情報は、増分難読化を実行する場合や、難読化されたアプリケーションからスタック トレースをデコードする場合に使用されます。

Map Input File

指定される入力割り当てファイルは、前回の DashO の実行で作成されたファイルです。このファイルによって、DashO は前回の増分難読化の実行で使われた名前を使用することができます。割り当てレポート ファイルは、割り当てに見つからない入力クラスと、割り当てにはあるが入力に見つからないすべてのクラスを記録します。

Map Output File

このファイルで作成された情報は、今後 DashO を実行する際に入力割り当てファイルで利用できます。また、難読化されたアプリケーションからスタック トレースをデコードする際にも利用できます。このファイルを不注意で失ってしまうと、将来のアプリケーションの増分更新の機会を失う可能性があるため、DashO はこのファイルを自動的に上書きしません。[Overwrite]オプションをオンにすると、DashO は既存のファイルを上書きできるようになります。

String Encryption – Options

String Encryption – Options パネルでは、文字列の暗号化および暗号化技術を制御するほか、復号メソッドが置かれる場所を制御することができます。

Encrypt Strings

文字列の暗号化のグローバルな適用を有効または無効にします。対象選択規則および対象除外規則を使用することにより、文字列の暗号化が適用されるアプリケーションの部分を制御することができます。規則を何も指定しなければ、すべてのメソッドの文字列が暗号化されます。

Level

このコントロールは、使用する文字列暗号化のレベルを選択します。レベル 1 は単純で高速な復号技術を使用し、レベル 10 はより複雑でより低速な技術を使用します。値が増えるに従って、逆コンパイルの複雑さを高めるためにさまざまな表現法が用いられるだけでなく、復号メソッドの実装にランダム性の要因を追加します。

Decrypters

これは、入力クラスへ生成、追加される復号メソッドの数を制御します。メソッドの名前と署名はランダムに選択されます(入力ファイルを使用する場合を除く)。

Decrypter Class

この設定により、復号メソッドをどのクラスに配置するかを正確に制御したり、それの配置可能場所を制限する一連の条件を制御したりすることができます。値を何も指定しなければ、DashO が入力内のパブリック クラスからクラスを選択します。選択条件を変更するには、[Edit]ボタンをクリックしてプロパティ ダイアログを表示します。

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 パネルでは、アプリケーションのどの部分でカスタム暗号化を使って文字列を暗号化させるかを決定する規則を構成できます。メソッド、クラス、またはパッケージ全体を選択することができます。これは、文字列の暗号化全体のサブセットを考慮する必要があります。ここで指定されたクラス/メソッドはどれも、文字列の暗号化から除外してはいけません。

詳細については、グラフィカルな規則エディターの使用を参照してください。

Make Synthetic – Options

Make Synthetic – Options パネルでは、合成フラグをフィールドおよびメソッドにどのように追加するかを制御できます。合成フラグは、一部の逆コンパイラを混乱させます。

Make Synthetic

この難読化は、メソッドとフィールドを、Java コンパイラによって生成される合成としてマークします。これは、一部の逆コンパイラを混乱させます。使用可能な設定は 4 つあります。

  • Never – メソッドもフィールドも影響を受けません。

  • Only private and package – private または package-private のメソッドとフィールドは合成とされます。

  • If not public – private、package-private、または protected のメソッドとフィールドは合成とされます。

  • All – すべてのメソッドとフィールドが合成とされます。

この設定は、プロジェクト ファイルの <make-synthetic> セクションに格納されます。

Make Synthetic – Exclude

Make Synthetic Exclude パネルでは、アプリケーションのどの部分が合成とマークされないかを決定する規則を構成できます。メソッド、クラス、またはパッケージ全体を選択することができます。

詳細については、グラフィカルな規則エディターの使用を参照してください。

Optimization – Options

Optimization – Options パネルでは、プロジェクトの最適化の設定を制御します。

Optimize Byte Codes

バイト コードの最適化のグローバルな適用を有効または無効にします。対象選択規則および対象除外規則を使用することにより、バイト コードの最適化が適用されるアプリケーションの部分を制御することができます。

Make Public

これは、パブリックへのアクセス制御の変更を制御します。オプションには、パブリック アクセスへの変換を強制する、または禁止する、DashO で自動的に判定する、があります。既定値は、「DashO で自動的に判定する」です。詳細については、Makepublic および Nomakepublic グローバル オプションを参照してください。

Optimization – Include および Exclude

Byte Code Optimization – Include および Exclude パネルでは、アプリケーションのどの部分が最適化されるかを決定する規則を構成できます。メソッド、クラス、またはパッケージ全体を選択することができます。

詳細については、グラフィカルな規則エディターの使用を参照してください。

PreMark

PreMark パネルは、DashO によって生成された jar ファイルに、ウォーターマークを追加するために使用されます。ウォーターマークは jar ファイルにのみ適用できるため、DashO の出力先がディレクトリまたは APK である場合には、この機能は無効になります。複数の jar ファイルが作成される場合は、すべての jar ファイルに同じウォーターマークが追加されます。ウォーターマークは Android ではサポートされません。

Watermark Jar

ウォーターマーク機能を有効または無効にします。

Watermark

これは、jar ファイルに適用されるウォーターマーク文字列です。ウォーターマークで使用できる文字は、文字コードの設定によって決まります。

On overflow

DashO は、ウォーターマーク文字列が長すぎて jar ファイルに適用できない場合に、文字列を切り捨てて処理を進めるか、またはビルドを中止することができます。

Character map

文字コードは、最小限のビット セットにウォーターマーク文字列をエンコードするために使用されます。

Passphrase

パスフレーズの指定は任意で、ウォーターマーク文字列を暗号化してから jar に適用するために使用されます。

Injection – Options

Injection – Options パネルは、PreEmptive Analytics 用にアプリケーションをインストルメントするための設定を制御する場所です。PreEmptive Analytics 用のクラスのインストルメントを有効にして、アノテーション処理を定義し、アプリケーションの Java ランタイム環境を選択します。また、アプリケーションおよびアプリケーション所有者の一意識別子を入力します。この情報を入力すると、分析メッセージが適切な場所にルーティングされ、PreEmptive Analytics サーバーに正しく表示されるようになります。

Enable Code Injection

この機能を有効または無効にします。差し込みは、アプリケーションに分析メッセージ、改ざんチェック、デバッグ チェックおよび Shelf Life の期限切れを追加するために使用されます。

Honor Annotations

コードに含まれる PreEmptive インストルメンテーション アノテーションの参照を使用するか、または無視します。コード内のアノテーションは仮想アノテーションとマージされ、行われるインストルメンテーションを決定します。

Strip Annotations

PreEmptive インストルメンテーション アノテーションの参照を入力クラスから除去します。アノテーションが除去されない場合は、アプリケーションにアノテーション jar ファイルを含める必要があるかもしれません。

Java Environment

これは、アプリケーションのランタイム環境を選択し、アプリケーションで使用される PreEmptive Analytics の実装 jar ファイルを決定します。

Merge Runtime

PreEmptive Analytics クラスを実装する jar ファイルをアプリケーションとマージするか、または別個の jar ファイルとして残します。アプリケーションとマージした場合、DashO は最初に入力 jar ファイルの 1 つとマージしようとします。利用できる jar ファイルがない場合、または jar内のクラスが対象から除外されている、あるいは jar が空になるまでクラスが除去されている場合は、最初のディレクトリを選択します。ランタイム jar ファイルをマージしない場合は、それをアプリケーションとは別に出荷する必要があります。

Send Messages

アプリケーションがオンラインであるときは、メッセージを PreEmptive Analytics サーバーへ送信します。そうでなければ、後で送信するようにメッセージを格納しておきます。

Store Offline

アプリケーションがオフラインであるか、または[Send Messages]が無効になっているために PreEmptive Analytics サーバーへ送信できないメッセージを、後で送信するように保存しておきます。Java アプリケーションおよび Android モバイル デバイスでは、オフライン記憶域がサポートされています。

Gather Full Data

パフォーマンス プローブやシステム プロファイルなどの一部の PreEmptive Analytics 操作では、完全なデータと部分的なデータのいずれかを返すことができます。マシンの製造元やモデルなどの詳細な情報を必要としない場合は、部分的なデータを返すように選択できます。これにより、メッセージを生成するために必要な時間だけでなく、要求される送信や記憶域を減らすことができます。

Omit PII

PreEmptive Analytics サーバーへ送信されるメッセージに個人を特定できる情報(PII)を含む必要があるかどうかを設定します。PII には、ユーザーやマシンを特定するために使用できる IP アドレス、MAC ID、および名前が含まれます。

Endpoint

これは、PreEmptive Analytics サーバーの場所です。Commercial エンドポイント、Community Workbench エンドポイントから選択するか、または自己ホスト型のサーバーがある場合は、カスタム エンドポイントを入力することができます。エンドポイントは URL に似ていますが、プロトコルが含まれていません。

メモ:

Community Workbench の使用を選択した場合は、送信されたデータのプライバシーやセキュリティの保証はありませんし、Company ID の制限があります。詳細については、http://www.preemptive.com/support/resources/community-workbench を参照してください。

Use SSL

エンドポイントへデータを送信する際に、HTTP または HTTPS プロトコルを使用する必要がありますか?

Company ID

これは、お客様の企業に対する一意の ID です。Preferences で入力した情報が既定値になります。ID の横にあるボタンをクリックすると、ランダムな新しい識別子がその Company ID フィールドに設定されます。

Company Name

これは、お客様の企業の名前です。Preferences で入力した情報が既定値になります。

App ID

これは、お客様のアプリケーションに対する一意の ID です。ID の横にあるボタンをクリックすると、アプリケーションに使用できるランダムな識別子が ID フィールドに設定されます。

App Name

これは、PreEmptive Analytics サーバーに送信され、識別の目的で使用されるアプリケーションの名前です。

App Version

これは、PreEmptive Analytics サーバーに送信され、識別の目的で使用されるアプリケーションのバージョン番号です。

App Type

これは、PreEmptive Analytics サーバーに送信され、識別の目的で使用されるアプリケーションの種類を識別します。

メモ:
App Type フィールドの使用は推奨されません。既に構成されている場合にのみ表示されます。

このパネル上のデータはすべて省略可能です。データは、コード内のアノテーションによって、または DashO の仮想アノテーションによって結合またはオーバーライドすることができます。このパネルの値は、アノテーションによって置き換えられない場合にのみ使用されます。

Send Messages]と[Store Offline]が共にがオフになっている場合、メッセージの生成は無効になります。これらのグローバル値は、実際または仮想のアノテーションでオーバーライドすることができます。どちらのオプションの値も、固定のブール値を指定するか、または動的ソースから指定できます。

Offline Storage Customization

既定では、メッセージは、マシン上のユーザーのホーム ディレクトリに位置する .psrios というディレクトリに格納されます(例:C:\Users\{username}\.psrios または /usr/home/{username}/.psrios)。基本の場所は、dasho_offline_ri_dir 変数を設定することによって変更できます。これは、環境変数または java のシステム変数として設定できます。両方設定されている場合は、java システム変数が優先されます。指定する場所は、インストルメントされたアプリケーションを実行するユーザーが、ファイルの読み取り、書き込み、および削除のアクセス許可を持っているディレクトリでなければなりません。設定する方法の例は次のとおりです。

  • 環境変数を設定します。

    • Windows:set dasho_offline_ri_dir={必要とする完全なパス}

    • Unix(csh):setenv dasho_offline\ri\dir {必要とする完全なパス}

    • Unix(bash):export dasho\offline\ri\dir={必要とする完全なパス}

  • java コマンド ラインで設定します。

    • -Ddasho_offline_ri_dir={必要とする完全なパス}
  • コードベース内で次のように設定します。

    • System.setProperty("dasho_offline_ri_dir", {必要とする完全なパス});

    • ただし、このメソッド呼び出しは、アプリケーションのインストルメンテーションが始まる前に発生する必要があります。

メモ:

dasho.offline.ri.dir に設定された場所が無効な場所であったり、ユーザーが適切なアクセス許可を持っていないディレクトリであったりした場合、オフライン メッセージは保存されません。

Injection – Instrumentation

DashO は、インストルメンテーションを実行するためにアノテーションを使用します。アノテーションは、インストルメント化されるもの(クラスやメソッドなど)を識別し、それらをインストルメントする方法について指示するものです。これらのアノテーションは、クラス ファイル内にあるアノテーションを拡大またはオーバーライドします。Virtual Annotations 画面は、グラフィカルな規則エディターと同じように動作します。

Name

これは、クリックされたか強調表示されているクラス、メソッド、またはアノテーションの名前です。

Signature

これは、メソッドのパラメーター リストの型と一致する型のリストです。

Value

これは、アノテーション固有の値です。FeatureStartFeatureStop などのアノテーションは、これを機能の名前として使用します。すべてのアノテーションが Value を使用するわけではありません。

Annotate ボタン

これを使用して、メソッドやクラスに適用されるアノテーションを追加することができます。また、クラス一覧内の項目や規則を右クリックして、アノテーションを追加することもできます。FeatureTickFeatureStart、および FeatureStop アノテーションのみ、特定のメソッドで複数回使用することができます。

Injection – Tamper Check

Injection – Tamper Check パネルは、TamperCheck および TamperResponse を構成する場所です。

Type 列は、種類(チェックまたは対応)を示します。 Description 列は、チェックまたは対応が挿入される、コードのメソッドやクラス内の場所を示します。 Properties 列では、その特定のチェックまたは対応用の設定を示します。ツール ヒントが展開し、場所やプロパティの詳細が表示されます。

Tamper Check

TamperCheck を、選択した場所に差し込まれるよう構成します。

  • Action – 実行する任意の操作。詳細については、ソースおよび操作の指定を参照してください。
  • Response – 実行する対応。
  • Where – コードを差し込む、メソッド内の場所。
  • Send Message – メッセージを PreEmptive Analytics へ送信するかどうか。
  • Custom Data Source – 任意の、メッセージと一緒に送信されるカスタム データのソース。詳細については、ソースおよび操作の指定を参照してください。
  • Keystore – キー ストアの URL。既定値はユーザーのホーム ディレクトリの .keystore になります。DashO プロパティを参照できます。
  • Keystore Type – キー ストアの種類。既定値は、Java セキュリティ プロパティ ファイルの keystore.type に設定されている値になります。DashO プロパティを参照できます。
  • Keystore Password – キー ストアのパスワード。ユーザー インターフェイスはこれをエンコード形式で格納しますが、値はプレーン テキストで指定できます。DashO プロパティを参照できます。
  • Alias – キー ストアに非公開鍵を格納するために使用される別名。DashO プロパティを参照できます。
  • Locations – チェックを挿入する場所。Locations を参照してください。

Tamper Response

TamperResponse を、選択した場所に差し込まれるよう構成します。

  • Source – アプリケーションが改ざんされたかどうかを判断するソース。詳細については、ソースおよび操作の指定を参照してください。
  • Response – 実行する対応。
  • Probability – 対応が発生する確率。0.0 から 1.0 までの小数を指定できます(既定値:1.0)。
  • Where – コードを差し込む、メソッド内の場所。
  • Send Message – メッセージを PreEmptive Analytics へ送信するかどうか。
  • Custom Data Source – 任意の、メッセージと一緒に送信されるカスタム データのソース。詳細については、ソースおよび操作の指定を参照してください。
  • Locations – 対応を挿入する場所。Locations を参照してください。

Injection – Debug Check

Injection – Debug Check パネルは、DebuggingCheckDebuggingResponseDebugEnabledCheck、および DebugEnabledResponses を構成する場所です。

Type 列は、種類(チェックまたは対応)を示します。 Description 列は、チェックまたは対応が挿入される、コードのメソッドやクラス内の場所を示します。 Properties 列では、その特定のチェックまたは対応用の設定を示します。ツール ヒントが展開し、場所やプロパティの詳細が表示されます。

Debugging Check

DebuggingCheck を、選択した場所に差し込まれるよう構成します。

  • Action – 実行する任意の操作。詳細については、ソースおよび操作の指定を参照してください。
  • Response – 実行する対応。
  • Where – コードを差し込む、メソッド内の場所。
  • Send Message – メッセージを PreEmptive Analytics へ送信するかどうか。
  • Custom Data Source – 任意の、メッセージと一緒に送信されるカスタム データのソース。詳細については、ソースおよび操作の指定を参照してください。
  • Locations – チェックを挿入する場所。Locations を参照してください。

Debugging Response

DebuggingResponse を、選択した場所に差し込まれるよう構成します。

  • Source – アプリケーションがデバッグされているかどうかを判断するソース。詳細については、ソースおよび操作の指定を参照してください。
  • Response – 実行する対応。
  • Probability – 対応が発生する確率。0.0 から 1.0 までの小数を指定できます(既定値:1.0)。
  • Where – コードを差し込む、メソッド内の場所。
  • Send Message – メッセージを PreEmptive Analytics へ送信するかどうか。
  • Custom Data Source – 任意の、メッセージと一緒に送信されるカスタム データのソース。詳細については、ソースおよび操作の指定を参照してください。
  • Locations – 対応を挿入する場所。Locations を参照してください。

Debug Enabled Check

DebugEnabledCheck を、選択した場所に差し込まれるよう構成します。

  • Action – 実行する任意の操作。詳細については、ソースおよび操作の指定を参照してください。
  • Response – 実行する対応。
  • Where – コードを差し込む、メソッド内の場所。
  • Send Message – メッセージを PreEmptive Analytics へ送信するかどうか。
  • Custom Data Source – 任意の、メッセージと一緒に送信されるカスタム データのソース。詳細については、ソースおよび操作の指定を参照してください。
  • Locations – チェックを挿入する場所。Locations を参照してください。

Debug Enabled Response

DebugEnabledResponse を、選択した場所に差し込まれるよう構成します。

  • Source – アプリケーションのデバッグが有効になっているかどうかを判断するソース。詳細については、ソースおよび操作の指定を参照してください。
  • Response – 実行する対応。
  • Probability – 対応が発生する確率。0.0 から 1.0 までの小数を指定できます(既定値:1.0)。
  • Where – コードを差し込む、メソッド内の場所。
  • Send Message – メッセージを PreEmptive Analytics へ送信するかどうか。
  • Custom Data Source – 任意の、メッセージと一緒に送信されるカスタム データのソース。詳細については、ソースおよび操作の指定を参照してください。
  • Locations – 対応を挿入する場所。Locations を参照してください。

Injection – Shelf Life Check

Injection – Shelf Life Check パネルは、アプリケーションの ShelfLifeChecks を構成する場所です。DashO はこの情報を使用して、期限切れのポリシーを実施するためにコード内に配置される、期限切れトークンを作成します。チェックは、このパネルで構成した場所、あるいは @ShelfLifeCheck コード アノテーションが使用される場所に基づいて実行されます。

Type 列は、チェックの種類を示します。 Description 列は、チェックが挿入される、コードのメソッドやクラス内の場所を示します。 Properties 列では、その特定のチェック用の設定を示します。ツール ヒントが展開し、場所やプロパティの詳細が表示されます。

Defaults

ここで定義された情報は、チェックがこれらの既定値を上書きしない限り、個々のすべてのチェックに使用されます。また、生成されたトークンに追加するプロパティを定義する場合にも使用されます。

Key File

PreEmptive Solutions から受け取った、Shelf Life のキー ファイルの場所を入力します。このファイルは、アプリケーションに Shelf Life チェックを追加することを許可します。

Expiration Date

アプリケーションは、明示的な日付、または動的に決定される開始日から特定の日数後に期限が切れるよう構成することができます。日付の書式は、地域の設定に関係なく常に MM/DD/YYYY 形式になります。

Warning Date

アプリケーションは、明示的な日付、または期限切れになる予定の特定の日数前に期限切れの警告を発するよう構成することができます。日付の書式は、地域の設定に関係なく常に MM/DD/YYYY 形式になります。

Properties

アプリケーションで取得できる期限切れトークンに、任意のプロパティを追加することができます。この機能を使用するには、ShelfLifeCheck にユーザー定義の操作を提供する必要があります。この処置法は、これらのプロパティを取得できる期限切れトークンに渡されます。ここで留意すべきは、プロパティ名と値の両方に DashO のプロパティ参照を含むことができるということです。

メモ:

このパネルで提供される情報は、ShelfLifeCheck または @ShelfLifeCheck コード アノテーションによって、オーバーライドまたは補完することができます。

Shelf Life Check

ShelfLifeCheck を、選択した場所に差し込まれるよう構成します。

  • Action – 実行する任意の操作。詳細については、ソースおよび操作の指定を参照してください。
  • Where – コードを差し込む、メソッド内の場所。
  • Send Message – メッセージを PreEmptive Analytics へ送信するかどうか。
  • Custom Data Source – 任意の、メッセージと一緒に送信されるカスタム データのソース。詳細については、ソースおよび操作の指定を参照してください。
  • Expiration Date – アプリケーションの有効期限が切れる絶対日付。MM/DD/YYYY 形式です。
  • Warning Date – 期限切れに関する警告を開始する絶対日付。MM/DD/YYYY 形式です。
  • Start Date Source – 実行時に java.util.Date として提供される開始日のソース。詳細については、ソースおよび操作の指定を参照してください。
  • Expiration Period – 相対的な有効期限。開始日からの日数を示します。
  • Warning Period – 相対的な警告期間。有効期限までの日数を示します。
  • Token Source – Shelf Like トークンを外部で管理する場合に、java.io.Reader とするトークンのソース。詳細については、ソースおよび操作の指定を参照してください。
  • Locations – チェックを挿入する場所。Locations を参照してください。

チェック場所の設定

チェックと対応は 1 つまたは複数の場所へ差し込むことができます。メソッドを手動で選択する、あるいは選択規則を作成することができます。

Selection Rule

選択するメソッド(単一または複数)を決定するためのパターンまたは正規表現を構成します。

  • Type – 正規表現またはパターン。
  • Class Modifiers – 任意のクラス修飾子。
  • Full Class Name – クラスの完全修飾名。
  • Method Modifiers – 任意のメソッド修飾子。
  • Method Name – メソッドの名前。
  • Method Signature – メソッドの署名。

メモ:
名前と署名のフィールドに有効なエントリを入力する必要があります。
任意の修飾子に使用する値については、Modifiers 属性の説明を参照してください。
名前および署名に使用する値については、パターンと正規表現を参照してください。

Output – Options

Output – Options パネルでは、DashO がビルドの結果を配置する場所と、それらの結果がとる形式を制御します。

Create Directory/Single Jar/APK

DashO はビルドの結果をディレクトリ、単一 jar、または APK に置くことができます。メインの出力の種類を変更すると、このパネル上の他の設定もそれらの既定値に変更される可能性があります。出力を構成する方法については、<output> セクションを参照してください。

Merge inputs

ディレクトリへ出力する際、DashO は、難読化された結果を結合して単一のディレクトリまたは jar に入れるか、または入力クラスの元のパッケージを保持することができます。

Auto copy

Auto copy は、入力をマージするときに非クラス ファイルをどのように処理するかを制御します。これはマージに関係して利用でき、次のように機能します。

  • Merge Off

    • jar 入力の非クラス ファイルはコピーされます。入力ディレクトリの非クラス ファイルはコピーされません。
  • Merge On

    • Auto Copy On – 入力ディレクトリと入力 jar の両方の非クラス ファイルが出力にコピーされます。

    • Auto Copy Off – 非クラス ファイルは出力にコピーされません。

メモ:

非クラス ファイルの処理中に検出された XML 構成ファイルは、クラス名やメソッド名を変更できるように更新されることがあります。

Name と Manifest

Name]フィールドには、出力ディレクトリまたは jar の名前を指定します。マージがオフの場合にのみ、ディレクトリを使用できます。DashO は、出力のルートとしてこれを使用し、元の入力 jar ファイルとディレクトリの階層を再作成しようとします。

マージされた単一の jar ファイルを DashO で作成した場合、DashO はその jar ファイルにマニフェスト ファイルを追加することができます。マニフェストは、テキスト ファイルの形式でも、DashO が jar ファイルからマニフェストを抽出できる形式でもかまいません。

Jar Options

  • Compress:データを格納するだけでなく圧縮もします。

  • Level:ファイルの圧縮を実行するレベル。有効な値の範囲は、0(圧縮なし/最速)から 9 です。既定値は 6 です。

  • Exclude Directory Entries:ファイルのエントリのみ格納し、ディレクトリのエントリは格納しません。

  • Preserve Jars With No Classes:クラスが残っていない jar を出力します。これは、リソース jar を出力する場合に使用できます。

Constant Pool Tag

結果として生じる出力のすべてのクラスに、任意の定数プールのタグ テキストが挿入されます。詳細については、<constpooltag> セクションを参照してください。

SourceFile Tag

結果として生じる出力のすべてのクラスの SourceFile 属性が、指定した値に設定されます。詳細については、<sourcefile> セクションを参照してください。

Output – APK

Output – APK パネルでは、APK 出力に固有の設定を構成します。

Build Tools Directory

Android ビルド ツールの場所を指定します。指定されたディレクトリには、zipalign コマンドが含まれている必要があります。

Zip Align

出力 APK は、zip を整列させる必要があるかどうかを指定します。このボックスは、APK が署名されている場合にのみ有効になります。

Output – Reports

Output – Reports パネルでは、ビルドの結果を詳述するレポートの生成を構成します。

Report file

DashO によって実行された、クラスとメンバーの除去および名前の変更を概説するレポートの名前と場所を指定します。全体のメソッド/フィールド/定数プール エントリだけでなく、DashO 実行後における最終的な削減の数とパーセンテージを詳述する要約が提供されます。また、これには、リフレクションや Class.forName() 呼び出しも含め、動的に読み込まれるクラスに関する情報も含まれます。

Renaming Report File

これは、名前変更されたクラスとそれらの名前変更されたメンバーの、古い名前と新しい名前を列挙するレポートの名前と場所を指定します。

Output – Preverification

DashO がクラス ファイルの処理を完了した後、CLDC アプリケーションに対して Preverifier を実行するかどうかを選択できます。[Run Preverifier]チェック ボックスをオン/オフにすることにより、事前検証を有効または無効にできます。

既定では、DashO はシステム パスで事前検証アプリケーション preverify を探そうとします。特定のバージョンの Preverifier を実行する必要がある場合は、実行するアプリケーションを明示的に指定することができます。

No Finalize

preverifier に -nofinalize を渡す:入力でファイナライザーは許可されません。

No Floating Point

preverifier に -nofp を渡す:入力で浮動小数点演算は許可されません。

No Native Methods

preverifier に -nonative を渡す:ネイティブ メソッドは許可されません。

Output – Signing

DashO が生成する出力 jar ファイルまたは APK ファイルに署名させることができます。[Sign Jars/APK]チェック ボックスをクリックすることにより、署名を有効または無効にできます。

既定では、DashO はシステム パスで署名アプリケーション jarsigner を探そうとします。特定のバージョンの jar 署名を実行する必要がある場合は、実行するアプリケーションを明示的に指定することができます。

Key Store

この情報は、署名に使用される非公開鍵を格納するキー ストアを定義します。必須項目は[Password]のみです。[Type]は既定値として、グローバル keystore.type セキュリティ プロパティに指定されている種類が使用されます。[Location]は既定値として、ホーム ディレクトリにある .keystore ファイルが使用されます。プロパティ参照を含んでいないパスワードは、暗号化された形式でプロジェクト ファイルに格納されます。

Signing Key

この情報は、署名を実行するために使用される非公開鍵を指定します。必須項目は[Alias]値のみです。[Password]は既定値として、キー ストアで指定したパスワードが使用されます。このパスワードも、プロパティ参照を含んでいなければ、暗号化されてプロジェクト ファイルに格納されます。

Options

これらの値は、jarsigner-sigFile-internalsf、および -sectionsonly オプションに対応しています。これらの使い方の詳細については、jarsigner - JAR 署名および検証ツールを参照してください。[Additional Arguments]フィールドでは、任意の追加フラグを指定できます。APK に署名する場合は、追加の引数を入力する必要があるかもしれません(たとえば、-sigalg SHA1withRSA -digestalg SHA1)。

Output – DashO Results

Output – DashO Results パネルには、プロジェクトの入力クラスのクラス階層と、名前の変更の結果が表示されます。

グラフィカルな規則エディターの使用

DashO のユーザー インターフェイスのパネルの多くは規則エディターで、これらは主として、難読化の変換処理における、アプリケーション内の要素の対象除外と対象選択を行います。規則エディターは 2 つの一覧に分かれています。左側のクラス一覧は、入力のクラスとメンバーを表示し、右側では規則の一覧を表示します。規則では、操作の影響を受ける入力の部分と、場合によっては実行される操作を指定します。規則エディターは、以下の操作について規則を設定するために使用されます。

DashO の、エントリ ポイントなどの他の部分は、規則エディターに非常に似たインターフェイスを使用します。

規則の作成

インターフェイスで規則を作成する方法はいくつかあります。

  • クラス一覧の項目を右クリックする – クラス一覧の項目をクリックすると、ショートカット メニューが表示されます。そこから、選択した項目に一致する規則を構築することができます。Shift キーを押した状態で規則を作成すると、その規則は正規表現になります。メソッドまたはフィールドの規則を作成した場合、DashO はその新しい規則を既存のクラスの規則に追加します。必要であれば、クラスの規則を作成します。

  • クラス一覧から項目をドラッグ アンド ドロップする – クラス一覧から項目をドラッグして、規則の上にドロップすることができます。メソッドまたはフィールドをドラッグ アンド ドロップした場合、DashO はその新しい規則を既存のクラスの規則に追加します。必要であれば、クラスの規則を作成します。

  • ボタンを使用する – 規則一覧の右にある[New xxx]ボタンをクリックして、新しいエントリを作成することができます。新しい規則は、編集可能なダミーの名前で作成されます。

規則の編集

規則の基本部分は、エディターで直接変更することができます。あらゆる項目の名前と、署名やメソッドは、規則一覧の直下にあるテキスト フィールドを使用して変更できます。また、専門のエディターでこれらの値を直接編集することもできます。

1 つのルールのすべての設定にアクセスするには、ルールを右クリックし、ショートカット メニューの[Properties]項目を選択します。[Properties]ダイアログ ボックスには、次のような値の設定があります。

  • Modifiers – Java の修飾子、またはその否定。この規則が項目と一致するようにするために必要です。ここで使用できる値については、Modifiers 属性の説明を参照してください。

  • Name – 規則が影響を与える項目の名前。これには定数値、パターン、または正規表現を指定できます。

  • Signature – メソッドの署名。

  • Type – 名前および署名が解釈される方法を決定します。詳細については、パターンと正規表現を参照してください。

  • Select class – クラス自体だけでなく、そのメンバーにも影響を与える規則の場合、この設定は、規則がクラスに適用されるかどうか、あるいは、クラスは入れ子になったフィールドやメソッドの規則のための単なるコンテナーであるかどうかを判断します。

  • Renaming controls – 既定では、エントリ ポイントの名前は変更不能です。エントリ ポイントの種類によっては、名前を変更可能にすることができるため、これらのコントロールは、クラスとそのメンバーの名前を変更できるかどうかを決定します。

  • Values for annotations – 仮想アノテーションには、特殊化した値を多数含めることができます。いくつかは、一般的な値(value)しか含んでいません。その使用を決定するために、ツール ヒントの表示を利用します。操作を実行するアノテーションは、where 値も備えています。これは、操作を実行するメソッド内の場所を決定します。

規則のプレビュー

規則の影響を受けるものを確認するために、プレビュー機能を使用することができます。単一の規則をプレビューするか、すべての規則をプレビューするかを選択できます。規則を右クリックしてショートカット メニューを表示し、[Preview Rule]または[Preview All]を選択します。クラス一覧内で、規則の影響を受ける項目が太字で表示されます。どちらの一覧のショートカット メニューからも、規則の強調表示をクリアできます。

パターンと正規表現

単純な規則は、項目の名前を文字どおりに使用して、クラスなどの特定の項目を選択します。規則でパターンや正規表現を使用して、項目を選択することもできます。詳細については、パターンの使用/正規表現の使用を参照してください。

正規表現は自動的に調べられます。式にエラーがある場合は、赤い X 印が式の横に表示されます。マウス ポインターを規則の上に移動させると、ツール ヒントにエラーの場所とその説明が表示されます。

メモ:

正規表現は、全体として規則に適用されます。クラス名が正規表現で指定された場合は、すべてのメンバーの名前が正規表現として扱われます。パターンには、この制限はありません。

対象選択規則と対象除外規則の結合

DashO では、難読化するアプリケーションの部分を決定するために、対象選択規則と対象除外規則を組み合わせて使用することができます。難読化の変換処理が、対象選択と対象除外の両方の定義を許可している場合は、両者を結合させる方法を覚えておくことは重要です。

  • 対象選択規則が何も定義されていない場合は、既定ですべての項目が対象として選択されます。

  • 対象除外規則が何も定義されていない場合は、既定でどの項目も対象から除外されません。

  • 初めに対象選択が決定されてから、次に対象除外が決定されます。項目は、少なくとも 1 つの規則から対象として選択され、変換処理を適用させるどの規則によっても対象から除外されない必要があります。



PreEmptive Protection - DashO Version 8.0.0. Copyright © 2016 PreEmptive Solutions, LLC