PreEmptive Protection - DashO v8.2 User Guide

New Project Wizard

概要

PreEmptive Protection - DashO プロジェクトを作成するための最も簡単な方法は、New Project Wizard を使用することです。ウィザードは、アプリケーションを調べて、そのアプリケーションを難読化するための設定を決定します。ウィザードを起動するには、[File|New Project|Wizard]メニューを選択します。

ウィザードの最初のステップは、アプリケーションの特徴を明らかにすることです。アプリケーションを最もよく表している種類を選択します。

その選択に基づいて、ウィザードはアプリケーションの種類に固有の一連の質問を尋ねます。ウィザードが完了したら、何か問題が発生していないかコンソールを見てください。以下のセクションでは、アプリケーションの種類ごとにウィザードを使用する方法を示します。

メモ:

既定では、New Project Wizard はスタートアップ時に自動的に起動します。

ライブラリ アプリケーション

難読化の対象としてライブラリを選択すると、ウィザードは、ライブラリを含んでいる jar ファイルまたはディレクトリの場所を聞いてきます。

ウィザードはライブラリを調べて、実行時または難読化の目的のために必要となる依存関係を決定します。難読化する入力として、またはランタイム サポートの jar ファイルとして、追加の jar を加えることができます。[Missing classes]一覧は、ライブラリによって参照されるクラスを示します。

次にウィザードは、ライブラリ内のエントリ ポイントについて尋ねます。ウィザードは、エントリ ポイントとして使用される特別なクラスやメソッドと一緒に、ライブラリ全体を 1 つのエントリ ポイントとして表示します。

最後にウィザードは、結果として生じるプロジェクト ファイルを保存する場所を尋ねます。既存のプロジェクト ファイルを上書きする場合、ウィザードは新しい選択内容を使ってプロジェクト ファイルを更新します。この上書きにより、[Make Synthetic]オプションは[Only private and package]の設定に更新されますが、他の難読化および PreEmptive Analytics の設定は保持されます。

メモ:ライブラリを難読化するときは、Make Synthetic オプションの NeverOnly private and package、または If not public を使用します。Always を選択すると、エンド ユーザーにライブラリが正しく公開されなくなります。

Jar 内のアプリケーション

難読化の対象としてアプリケーション jar を選択すると、ウィザードは、アプリケーションを含んでいる jar ファイルの場所を聞いてきます。

ウィザードはアプリケーションを調べて、実行時または難読化の目的のために必要となる依存関係を決定します。難読化する入力として、またはランタイム サポートの jar ファイルとして、追加の jar を加えることができます。[Missing classes]一覧は、アプリケーションによって参照されるクラスを示します。

次にウィザードは、アプリケーションのエントリ ポイントについて尋ねます。jar のマニフェストに Main-Class 属性が含まれている場合は、それがエントリ ポイントとして挙げられます。それに加えてウィザードは、エントリ ポイントとしても使用できる特別なクラスやメソッドを表示します。DashO はこれらのエントリ ポイントを使用して、難読化された出力から除去する、使用されていない項目を決定します。DashO をフォローするために希望するだけのエントリ ポイントを選択できます。エントリ ポイントは、少なくとも 1 つは選択する必要があります。

最後にウィザードは、結果として生じるプロジェクト ファイルを保存する場所を尋ねます。既存のプロジェクト ファイルを上書きする場合、ウィザードは新しい選択内容を使ってプロジェクト ファイルを更新します。他の難読化および PreEmptive Analytics の設定は保持されます。

WAR ファイル

難読化の対象として WAR ファイルを選択すると、ウィザードは、難読化する WAR ファイルの場所と名前を聞いてきます。

ウィザードは、WAR に含まれるクラスや jar ファイルについて、WAR ファイルを調べます。これらの項目には、JNLP ファイルによって参照される jar ファイルだけでなく Web コンテナによっても使用される、WEB-INF 内の特別な場所が含まれています。WAR ファイル内のどの項目を難読化するかを選択できます。

WAR ファイルに格納されている jar ファイルに加えて、DashO はサーブレットと JSP API の一部であるクラスを必要とします。ウィザードは、既知の場所でこれらの jar ファイルを探し、難読化されないサポート jar ファイルの一覧にこれらを追加します。アプリケーションが Web コンテナに対し、log4j ログ サービスなどの Web アプリケーション間で共有されるその他すべてのクラスを提供することを期待している場合は、それを jar ファイルの一覧に追加する必要があります。

最後にウィザードは、ウィザードの出力を保存するディレクトリを尋ねます。ウィザードは、プロジェクト ファイルに加えて、いくつかのファイルを作成します。

  • obfuscate.xml:WAR ファイルを開き、DashO プロジェクト ファイルを実行してから、WAR ファイルを再アセンブルする Ant スクリプト。

  • obfuscate.properties:obfuscate.xml が読み取る、Java のプロパティ ファイル。場所の既定値を変更するには、このファイルを使用します。

obfuscate.xml ファイルは、Ant を起動して実行することができます。

ant -f obfuscate.xml

または、別の Ant ファイルから呼び出すこともできます。

<ant antfile="obfuscate.xml"/>

3 つのタスクを実行します。

  • WAR ファイルをディレクトリに解凍します。既定のディレクトリは .unwar です。

  • .unwar ディレクトリの内容に対して、ウィザードで生成されたプロジェクト ファイルを実行します。結果は、一時的に .obfus ディレクトリに格納されます。

  • 難読化された結果を新しい WAR ファイルに入れ、元のファイル名に _dashoed を加えた名前で WAR を再作成します。

メモ:DashO プロセスに割り当てられている既定のメモリは 192M です。この値や、その他 WAR ファイルの処理で使用される既定値は、obfuscate.properties を編集して変更することができます。

既存のプロジェクト ファイルを上書きする場合、ウィザードは新しい選択内容を使ってプロジェクト ファイルを更新します。他の難読化および PreEmptive Analytics の設定は保持されます。

難読化を実行するには、DashO の Ant タスクをインストールする必要があります。詳細については、DashO の Ant タスクのドキュメント(英語)を参照してください。

Android アプリケーション

難読化の対象として Android アプリケーションを選択すると、ウィザードはビルド環境と Android プロジェクトの場所を聞いてきます。処理は、Gradle ビルド環境で行う場合と、APK プロジェクトを直接処理する場合とでは若干異なります。

Gradle ビルド環境

必要条件

  • Android SDK Tools Revision 19(Android の Gradle プラグインの要件によっては、Revision 19 以降)
  • Gradle バージョン 2.2(Android の Gradle プラグインの要件によってはバージョン 2.2 以降)
  • Android の Gradle プラグイン バージョン 0.14.3、0.14.4、1.0.0-rc*、1.0.x、1.1.x、1.2.x、1.3.0、1.3.1、1.5.0、2.0.0、2.1.0、2.2.0、または 2.3.0(以降のバージョンでは動作しない可能性があります)

メモ:

プロジェクトにビルド フレーバーが含まれている場合は、ビルド フレーバーの使用を参照してください。

フォルダーに Gradle によって使用される build.gradle ファイルが含まれている場合、ウィザードはそのフォルダーを Android プロジェクトのディレクトリと見なします。IDE を使用して Android アプリケーションを作成した場合は、build.gradle が存在しないことがあります。必要な build.gradle を手動で、あるいは Android の Eclipse ADT プラグイン(http://developer.android.com/sdk/installing/migrate.html)を使用して作成することができます。その後、アプリケーションを次のように構築する必要があります。

gradlew build

Android アプリケーションのソースを既に含んでいるディレクトリでウィザードを実行しても、ソース ファイルは上書きされません。

ウィザードはアプリケーションを調べて、実行時または難読化の目的のために必要となる依存関係を決定します。難読化する入力として、またはランタイム サポートの jar ファイルとして、追加の jar を加えることができます。Android アプリケーションで Google API のようなアドオンのターゲットを使用する場合、これらのライブラリはサポート ファイルとして自動的に追加されない場合があります。[Missing classes]一覧は、アプリケーションによって参照されているが、見つからなかったクラスを示します。

ウィザードは、AndroidManifest.xml、リソース、およびコンパイルされたクラスを分析して、アプリケーションのエントリ ポイントを決定します。Android アプリケーションの場合は、ウィザードが提示するすべてのエントリ ポイントを使用する必要があります。

ウィザードは、いくつかのファイルを作成または変更します。

  • project.dox:プロジェクト固有の設定をすべて含んでいる、DashO の構成ファイルです。これは、プロジェクトのソース コードに直接関係します。このファイルは、DashO のユーザー インターフェイスを使って操作することができます。

  • build.gradle:Gradle ビルド スクリプトです。ウィザードはこのファイルを変更して、DashO Gradle プラグインに依存関係を追加します。変更には、dasho.gradle のインポートが含まれます。これはプロジェクト固有ではありません。ただし、DashO のバージョンが違えば(DashO に新しい機能が追加されているので)、異なる変更を行う可能性はあります。

    dasho.gradle:メインの build.gradle によって参照される、Gradle ビルド スクリプトの一部です。これは、構成情報を提供します。このファイルには、プロジェクト固有のデータは含まれません(project.dox への参照を除く)が、DashO のバージョンが違えば(DashO に新しい機能が追加されているので)、異なるバージョンのファイルが作成される可能性はあります。正しいバージョンの DashO Gradle プラグインが使用されていることを確認してください。

メモ:正しいバージョンが構成されていることを確認するには、『DashO Gradle プラグイン ユーザー ガイド』のバージョン間の互換性セクションを参照してください。

プロジェクトのビルド

DashO のユーザー インターフェイスを使用して、難読化およびインストルメンテーションを構成したり、あらゆる問題や間違った構成を調査するために難読化を実行したりすることができます。必要なサポート jar ファイルを追加したり、それらを User Property の gradleSupport に設定したりするのは、手動で行う必要があるかもしれません。アプリケーションを構築して難読化するには、Android の Gradle プラグインから提供される標準のコマンドを使用する必要があるだけです。たとえば、次のようなものがあります。

  • gradlew assemble

  • gradlew build

  • gradlew installDebug

既定では、デバッグ ビルドは難読化されません。難読化を有効/無効にする必要がある場合は、単純に dasho.gradle ファイルを編集し、dashOConfig クロージャの内側にある disabledForBuildTypes 行を変更します。

  • disabledForBuildTypes = ['debug'] //デバッグ ビルドを難読化しません

  • disabledForBuildTypes = ['release'] //リリース ビルドを難読化しません

  • disabledForBuildTypes = ['debug', 'release'] //難読化しません

  • disabledForBuildTypes = ['none'] //デバッグおよびリリース ビルドを難読化します

メモ:詳細については、『Android Gradle Plugin User Guide』および『DashO Gradle プラグイン ユーザー ガイド』を参照してください。

DashO は、非クラス ファイル セクションの ${AndroidManifestFile}${AndroidManifestOutput} の設定を使用して、AndoidManifest.xml ファイルを書き換えます。

ビルド フレーバーの使用

ウィザードは、ビルド フレーバーとは直接動作しません。しかし、ウィザードを使用して初期のプロジェクト構成をセットアップする上で、以下の手順が役立つでしょう。以下の手順では、{flavorName} をフレーバー名に置き換えます。

  1. gradlew build を使用して、プロジェクトを構築します。

  2. debug(または release)ディレクトリを build/intermediates/classes/{flavorName} から build/intermediates/classes ディレクトリへコピーします。

  3. debug(または release)ディレクトリを build/intermediates/res/merged/{flavorName} から build/intermediates/res/merged ディレクトリへコピーします。

  4. マニフェストの処理:

    1. AndroidManifest.xml の場所が build.gradle に指定されている(つまり、manifest.srcFile={PathToManifest})場合は、構成されるフレーバーが最初に表示されるようにしてください。

    2. AndroidManifest.xml の場所が build.gradle に指定されていない場合は、次のいずれかを行います。

      1. src/mainAndroidManifest.xml がある場合は、そのマニフェストがウィザードで使用されます。フレーバー固有のエントリ ポイントを手動で追加する必要があります。

      2. src/mainAndroidManifest.xml がない場合は、フレーバーのマニフェストのコピーを作成して、それをプロジェクトのルート(build.gradle と同じディレクトリ)に置きます。ウィザードが完了したら、そのコピーを削除します。

  5. ウィザードを実行します。

  6. GUI から DashO を実行できるようにしたい場合は、User Properties セクションへ移動し、このフレーバーに基づいて、ビルドの場所として適切な既定値を入力します。これには通常、次のことが含まれます。

    1. buildType を既定値の {flavorName}/debug(または {flavorName}/release)に変更します。

    2. gradleInput の既定値に {flavorName} を追加して、正しいパスを提供します。

  7. 追加のフレーバー固有のエントリ ポイントを追加します。

  8. build/intermediates/classesbuild/intermediates/res から、手順 2 および 3 で作成された debug(および/または release)ディレクトリを削除します。

  9. 作成した構成を {flavorName}.dox に保存し、project.dox ファイルを削除します。

  10. ほかのフレーバーについて、手順 2 から繰り返します。

  11. dasho.gradle から doxFilename エントリを削除します。

これで、DashO はフレーバー固有の Gradle ビルドと共に自動的に動作するようになりました。

APK の直接操作

必要条件

  • Android SDK Tools Revision 10 以降

ウィザードは、有効な APK ファイルを選択するよう要求し、次に適切な android.jar ファイルを選択するよう求めます。

ウィザードは、AndroidManifest.xml、リソース、および APK 内のコンパイルされたクラスを分析して、アプリケーションのエントリ ポイントを決定します。Android アプリケーションの場合は、ウィザードが提示するすべてのエントリ ポイントを使用する必要があります。

メモ:

APK を正しくデコードできない場合は、[Add Jars]ページにエラーが表示されます。[Cancel]をクリックし、詳細についてはコンソールを参照してください。

ウィザードは project.dox ファイルを作成します。プロジェクト固有の設定をすべて含んでいる、DashO の構成ファイルです。これは、APK のコンパイルされたコードに直接関係します。このファイルは、DashO のユーザー インターフェイスを使って操作することができます。

メモ:

Output – Signing パネルで署名を構成し、Output – APK パネルで Android の Build Tools のディレクトリを設定または検証する必要があります。 この構成に役立つよう、ウィザードは Android SDK の build-tools ディレクトリの検出を試みます。

プロジェクトのビルド

DashO のユーザー インターフェイスを使用して、難読化およびインストルメンテーションを構成および実行します。DashO は、クラスの名前の変更が可能になるように AndoidManifest.xml ファイルを書き換えます。新しい APK ファイルが出力されます。

メモ:

出力 APK をインストールする準備ができるよう、署名を構成し、Zipalign をオンにしてください。

PreEmptive Protection - DashO Version 8.2.0. Copyright © 2017 PreEmptive Solutions, LLC