このリポジトリは、フロードロイドデータフロー分析ツールをホストしています。 FlowDroidは、AndroidアプリとJavaプログラムのデータフローを静的に計算します。その目標は、研究者と実務家に、独自の研究プロジェクトと製品の実装を基にするツールとライブラリを提供することです。流れドロイドが現在、学界だけでなく産業でも広く使用されていることを嬉しく思います。
Mavenを使用して自分でFlowDroidを構築するか、GitHubでここからリリースをダウンロードすることもできます。
FlowDroidはMaven Centralで見つけることができます。 MavenビルドでFlowDroidを使用するには、 pom.xmlファイルに以下を含めます。あなたがそうすることを妨げる特定の問題がない限り、最新の最高のバージョンを使用することをお勧めします。その場合、お知らせください(以下の連絡先を参照)。
<dependencies>
<dependency>
<groupId>de.fraunhofer.sit.sse.flowdroid</groupId>
<artifactId>soot-infoflow</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>de.fraunhofer.sit.sse.flowdroid</groupId>
<artifactId>soot-infoflow-summaries</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>de.fraunhofer.sit.sse.flowdroid</groupId>
<artifactId>soot-infoflow-android</artifactId>
<version>2.12.0</version>
</dependency>
</dependencies>
FlowDroidでクイックスタートするには、以下の「データフロートラッカーの使用」をご覧ください。コマンドラインツールのみを使用したい場合、必要なのは「Soot-infoflow-cmd-jar-with-dependicies.jar」ファイルだけです。
リリースページには、正式に公開する各リリースのすべての事前に構築されたJARファイルが含まれています。あなたがそうすることを妨げる特定の問題がない限り、最新の最高のバージョンを使用することをお勧めします。その場合、お知らせください(以下の連絡先を参照)。
FlowDroidでクイックスタートするには、以下の「データフロートラッカーの使用」をご覧ください。コマンドラインツールのみを使用したい場合、必要なのは「Soot-infoflow-cmd-jar-with-dependicies.jar」ファイルだけです。
要件:
初めて、FlowDroidは親モジュールから構築する必要があります。つまり、プロジェクトのルートフォルダーです。完全なテストスイートには約30分かかるため、構築時にテストを無効にすることをお勧めします。
mvn install -DskipTests有効になっているテストでビルドを実行するには、追加の手順が必要です。
rt.jarデフォルトの場所にある必要があります(あるいは、 rt.jar $JAVA_HOME/lib/内に置きます)--recursive )ANDROID_JARS環境変数は、Android Platformsディレクトリに設定する必要があります(通常は$HOME/Android/Sdk/platforms/ )Eclipse IDEを使用してFlowDroidに取り組んでいます。すべてのモジュールはEclipseプロジェクトであり、Eclipse IDEにインポートできます。それらはそこでMavenプロジェクトとして登場し、Eclipseはあなたに必要なすべての依存関係をダウンロードすることに注意する必要があります。
コマンドラインインターフェイス(モジュールSoot-Infoflow-CMD)またはライブラリとしてFlowDroidを使用できます。一般に、何かを実装し、コンポーネントとしてデータフロートラッカーが必要な場合は、FlowDroidモジュールをJARファイルとして統合する方が良いでしょう。結果をすばやく必要な場合は、コマンドラインインターフェイスを実行するだけです。
FlowDroidは、Windows、Mac OS、Linuxでサポートされています。
コマンドラインツールを使用してデータフロートラッカーを実行する場合は、次のコマンドを使用できます。
java -jar soot-infoflow-cmd/target/soot-infoflow-cmd-jar-with-dependencies.jar
-a <APK File>
-p <Android JAR folder>
-s <SourcesSinks file>
Android JARフォルダーは、Android SDKインストールフォルダー内の「プラットフォーム」ディレクトリです。ソースとシンクの定義ファイルは、機密情報のソースとして扱われるものと、外部の世界に機密データを漏らす可能性のあるシンクとして扱われるものを定義します。これらの定義は、ユースケースに固有です。ただし、プライバシーの問題を探している場合は、「Soot-infoflow-android」フォルダーでデフォルトファイル「Sourcesandsinks.txt」を出発点として使用できます。
コマンドラインツールの他のオプションを見つけるために、「 - ヘルプ」オプションを使用してツールを実行するか、ソースコード(モジュールSoot-infoflow-CMD)のメソッドをmainclass.initializecommandlineoptions() ""メソッドをご覧ください。
一部のアプリの場合、FlowDroidは大規模なアプリに非常に時間がかかります。パフォーマンス、精度、リコールの間のトレードオフを構成できるさまざまなオプションがあります。
-ns 、静的フィールドで汚染を追跡せず、静的初期化剤を無視しません。-ne例外的なフローを追跡しません。タイムアウトを定義することもできます。
-dt N n秒後にデータフロー分析を中止し、これまでに得られた結果を返します。-ct N 、n秒後にコールグラフ構造中にコールバックコレクションを中止し、これまでに構築された(不完全な)callgraphを継続します。-rt N n秒後に結果コレクションを中止し、これまでに取得した結果を返します。タイムアウトは加算的であることに注意してください。 3つのステージはすべて、ツールが結果を返して配信するためのタイムアウトを完了または実行する必要があります。
FlowDroidをライブラリとして独自のソリューションに含めたい場合は、それぞれのJARファイルを直接参照できます。 Mavenを使用する場合、FlowDroidを参照として追加し、Mavenに必要なすべてのコンポーネントを解決できます。分析するもの(AndroidアプリまたはJavaプログラム)に応じて、依存関係が異なる場合があります。
このセクションでは、FlowDroidを使用した一般的なタスク用にコードと構成のスニペットを収集します。
単純なデータフロー分析を実行するには、次のコードを使用できます。プレースホルダーandroidJarFolder Android SDKインストールのplatformsディレクトリの場所に置き換える必要があります。プレースホルダーapkPath 、APKファイルの完全なファイルパスを指します。データフローの結果には、 InfoflowResultsクラスからアクセスできます。
SetupApplication app = new SetupApplication(androidJarFolder, apkPath);
app.setTaintWrapper(new SummaryTaintWrapper(new LazySummaryProvider("summariesManual")));
InfoflowResults results = app.runInfoflow();
データフロー分析では、デフォルトのStubDroidライブラリの概要を使用します。デフォルトの構成では、これらの要約はsummariesManualフォルダーに保存されており、それを変更する必要はありません。
FlowDroidの仕組みの詳細を読みたい場合は、Steven Arztの博士論文を開始するのに適した場所です。
貢献はいつでも大歓迎です。 FlowDroidは、研究コミュニティ全体に役立つことを期待して公開したオープンソースプロジェクトです。公式コードリポジトリに表示されたい新しい機能またはバグ修正がある場合は、GitHubでマージリクエストを開き、行ったことの簡単な説明をお問い合わせください(以下を参照)。
FlowDroidはLGPLライセンスの下でライセンスされています。ライセンスファイルを参照してください。これは基本的に、ツールを自由に使用できることを意味します(商用、閉鎖プロジェクトでも)。ただし、ツールを拡張または変更する場合は、LGPLの下でも変更を利用できるようにする必要があります。これにより、コミュニティの努力としてツールを改善し続けることができます。
問題が発生した場合は、すすメーリングリストでヘルプを求めることができます。 [email protected]にもお問い合わせください。