Этот репозиторий проводит инструмент анализа потока данных Flowdroid. Статически Flowdroid вычисляет потоки данных в приложениях Android и программах Java. Его цель состоит в том, чтобы предоставить исследователям и практикам инструмент и библиотеку, на которой они могут основывать свои собственные исследовательские проекты и реализации продуктов. Мы рады видеть, что Flowdroid теперь широко используется в научных кругах, а также в отрасли.
Вы можете либо создать Flowdroid самостоятельно с помощью Maven, либо скачать релиз на GitHub.
Flowdroid теперь можно найти на Maven Central. Чтобы использовать Flowdroid в вашей сборке Maven, включите следующее в свой файл 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-sependencies.jar».
Страница выпуска содержит все предварительно построенные файлы JAR для каждого выпуска, который мы официально публикуем. Мы рекомендуем использовать последнюю и лучшую версию, если у вас нет конкретной проблемы, которая не позволяет вам это делать. В этом случае, пожалуйста, сообщите нам об этом (см. Контакт ниже).
Для быстрого начала с Flowdroid посмотрите на «Использование трекера потока данных» ниже. Если вы хотите использовать только инструмент командной строки, все, что вам нужно,-это файл «soot-infoflow-cmd-jar-with-sependencies.jar».
Требования:
В первый раз, Flowdroid должен быть построен из родительского модуля, то есть корневой папки проекта. Полный набор тестов занимает около 30 минут, поэтому мы рекомендуем отключить тесты при здания:
mvn install -DskipTestsЧтобы запустить сборку с включенными тестами, необходимы некоторые дополнительные шаги:
rt.jar должен быть в месте по умолчанию (в качестве альтернативы поместите rt.jar в $JAVA_HOME/lib/ )--recursive )ANDROID_JARS должна быть установлена в каталог Android Platforms (обычно $HOME/Android/Sdk/platforms/ )Мы работаем над Flowdroid, используя Eclipse IDE. Все модули являются проектами Eclipse и могут быть импортированы в Eclipse IDE. Они появятся как проекты Maven, и Eclipse должно позаботиться о загрузке всех необходимых зависимостей для вас.
Вы можете использовать Flowdroid либо через его интерфейс командной строки (модульная сажа-инфлоу-CMD), либо в качестве библиотеки. В целом, если вы хотите что -то реализовать и нужен трекер потока данных в качестве компонента, вам лучше интегрировать модули 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» в качестве отправной точки.
Чтобы узнать о других параметрах инструмента командной строки, вы можете запустить инструмент с помощью параметра «-help» или взглянуть на метод Mainclass.initializeCommandLineOptions () »в исходном коде (Module SOOT-infoflow-cmd).
Для некоторых приложений Flowdroid займет много времени для больших приложений. Существуют различные варианты, с которыми вы можете настроить компромисс между производительностью, точностью и отзывами.
-ns не отслеживают оттенки на статических полях и игнорируют статические инициализаторы.-ne не отслеживайте исключительные потоки.Вы также можете определить тайм -ауты:
-dt N прерывает анализ потока данных через n секунд и возвращает результаты, полученные до сих пор.-ct N прерывает коллекцию обратного вызова во время строительства Callgraph через n секунд и продолжается (неполный) построенный граф Callgraph до сих пор.-rt N прерывает сбор результатов через n секунд и возвращает результаты, полученные до сих пор.Обратите внимание, что тайм -ауты являются аддитивными. Все три этапа должны завершить или столкнуться с тайм -аутом для инструмента для возврата и получения результатов.
Если вы хотите включить Flowdroid в качестве библиотеки в свое собственное решение, вы можете напрямую ссылаться на соответствующие файлы JAR. Если вы используете Maven, вы можете добавить Flowdroid в качестве эталона и иметь Maven решить все необходимые компоненты. В зависимости от того, что вы хотите проанализировать (приложения для Android или Java -программы), ваши зависимости могут различаться.
В этом разделе мы будем собирать код и фрагменты конфигурации для общих задач с FlowDroid.
Чтобы запустить простой анализ потока данных, вы можете использовать следующий код. Вам необходимо заменить androidJarFolder заполнителя на местоположение каталога platforms в вашей установке Android SDK. Заполнитель apkPath относится к полному пути файла файла APK. Результаты потока данных доступны через класс InfoflowResults .
SetupApplication app = new SetupApplication(androidJarFolder, apkPath);
app.setTaintWrapper(new SummaryTaintWrapper(new LazySummaryProvider("summariesManual")));
InfoflowResults results = app.runInfoflow();
Анализ потока данных использует резюме библиотеки StubDroid по умолчанию. В конфигурации по умолчанию эти резюме хранятся в папке summariesManual , и нет необходимости менять.
Если вы хотите прочитать подробности о том, как работает Flothdroid, докторская диссертация Стивена Арцта - хорошее место для начала.
Вклад всегда приветствуются. Flowdroid - это проект с открытым исходным кодом, который мы опубликовали в надежде, что он будет полезен для исследовательского сообщества в целом. Если у вас есть новая функция или исправление ошибки, которое вы хотели бы увидеть в официальном репозитории кода, откройте запрос на слияние здесь, на GitHub и свяжитесь с нами (см. Ниже) с кратким описанием того, что вы сделали.
Flowdroid лицензируется по лицензии LGPL, см. Файл лицензии. Это в основном означает, что вы можете использовать инструмент (даже в коммерческих проектах с закрытым исходным кодом). Однако, если вы расширяете или измените инструмент, вы также должны сделать свои изменения в LGPL. Это гарантирует, что мы можем продолжать улучшать инструмент в качестве усилий сообщества.
Если у вас есть какие -либо проблемы, вы можете попросить о помощи в списке рассылки сажи. Вы также можете связаться с нами по адресу [email protected].