Intellidroid - это инструмент анализа для приложений Android, который извлекает пути вызовов, ведущих к конкретному поведению и выполняет эти пути точно во время выполнения. При получении набора целевых поведений статический компонент анализа пересекает график вызовов приложения, чтобы найти пути к этим поведению. Он также извлекает ограничения пути, которые используются для определения входных значений, которые могут запустить эти пути. Динамический компонент принимает извлеченные пути/ограничения и вводит входные значения в устройство Android, запуская целевое поведение.
Для получения дополнительной информации, пожалуйста, смотрите нашу газету и слайды (NDSS 2016).
«FrameworkAnalysis» выполняет статический анализ для создания ограничений для Android -структуры. В настоящее время мы предоставляем ограничения на выходной структуре, чтобы их можно было добавить в ограничения приложения, создаваемые компонентом «Аппанализ».
Каталог «Appanalysis» содержит код, который генерирует ограничения для приложений Android.
| Каталог | Описание |
|---|---|
| предварительная обработка | Сценарии для извлечения и предварительного обработки APK -файла перед передачей его в инструмент. |
| SRC | Файлы исходного кода. |
| либера | Зависимости, включая необходимые библиотеки Wala. 1 |
| Android | Скомпилированные файлы Android Framework (для анализа), из версии AOSP 4.4.2_R2. |
1 Мы внесли небольшие изменения в генерации графов вызовов Вала, чтобы повысить производительность Intellidroid. Модифицированный исходный код можно найти здесь.
Этот проект использует систему сборки Gradle. Выходные файлы расположены в build/ каталоге. Сценарий Gradlew - это обертка для машин, на которых уже нет Gradle. Если ваша машина разработки уже содержит Gradle, вы можете использовать свою собственную установку, заменив ./gradlew на gradle в приведенных ниже командах. Сетевое соединение требуется при первой компиляции кода, чтобы Gradle мог автоматически загружать зависимости.
Включенные файлы Android Framework в каталоге android были составлены с использованием JDK 1.6, но apktool , используемый в сценариях предварительной обработки, требует JDK 1.7. Мы рекомендуем использовать JDK 1.7, так как это, кажется, работает лучше всего. При необходимости вы можете заменить файлы в каталоге android , чтобы попробовать разные версии AOSP или JDK.
Целевой файл APK, который должен быть проанализирован, должен сначала быть предварительно обработан с помощью сценариев в папке preprocess . Полученный каталог (содержащий файл APK и извлеченные ресурсы) может затем быть передан в статический анализ.
Сценарии предварительной обработки используют APKTool и Dare для извлечения пакета APK. Вы можете использовать свои собственные инструменты извлечения, но вам, возможно, придется изменить код анализа приложений, чтобы Intellidroid мог найти файлы Bytecode и Manifest для данного приложения.
./preprocess/PreprocessAPK.sh <APK file>
./preprocess/PreprocessDataset.sh <directory of APK files>
./gradlew build
./IntelliDroidAppAnalysis -o <output directory> <preprocessed app directory>
Чтобы увидеть другие параметры командной строки, запустите:
./IntelliDroidAppAnalysis --help
Выходной каталог используется для хранения файла приложения JSON и файлов ограничений Z3. Если не указано, эти файлы будут храниться в ./pathOutput . Выходные файлы используются инструментом IntelliDroidDynamicClient для определения путей вызовов и для создания входных данных для запуска этих путей.
Файлы appInfo.json и constraintX_X.py , созданные в выходном каталоге, необходимы для динамического клиента, но не очень читаемы. Флаг -y может использоваться для получения более читаемой (но тяжелой) версии результатов пути/ограничений (напечатана в Stdout).
Каталог «DynamicClient» содержит программу Python, которая связывается с устройством Android и отправляет входы, которые запускают желаемые события.
Программа ожидает, что к системе подключено устройство для Android или эмулятор. Это устройство должно запускать пользовательскую ОС Android, содержащую IntellidroidService (которая интерпретирует команды, которые отправляет эта программа, и делает фактический вызов события). Программа DynamicClient будет автоматически подключаться к устройству с помощью сокета на порте TCP: 12348. Инструмент adb будет использоваться для настройки подключения и запуска определенных команд, и его следует достичь по PATH (это можно сделать, добавив каталог инструментов Android SDK в переменную PATH или настройку среды сборки AOSP до работы DynamicClient.
Кроме того, DynamicClient использует решатель ограничений Z3 через свой Python API (Z3-PY). Инструкции по созданию и установке Z3 с привязками Python доступны здесь.
Пользовательская ОС Android, используемая Intellidroid, предоставляется в виде серии файлов DIFF, которые можно применить к базовому дереву исходного дерева AOSP. Intellidroid в настоящее время реализован для Android 4.3 (ASOSP Branch android-4.3_r1 ). Пожалуйста, обратитесь к документации AOSP для инструкций о том, как загрузить и построить Android.
После того, как вы загрузили и собрали правильную версию AOSP, вы можете применить патчи Intellidroid, которые расположены в каталоге androidPatches . Файлы patch.sh и unpatch.sh предоставляются для автоматизации этого процесса. После исправления восстановление AOSP (мы обнаружили, что вам, возможно, придется make дважды; в противном случае определенные файлы на эмуляторе становятся непоследовательными). Вам также может потребоваться запустить make update-api вместе с make . После построения вы можете использовать logcat , чтобы убедиться, что класс IntelliDroidService запускается как системная служба, когда устройство загружается.
cd androidPatches
./patch.sh <path to AOSP directory>
./IntelliDroidDynamicClient.py
HELP (получите описание команд)
INSTALL <APK file>
START <directory to app information, generated by IntelliDroidAppAnalysis>
TRIGGER <call path ID to trigger, as specified in appInfo.json>
EXECUTE <command to send to IntelliDroidService> 1
INFO <info requested from IntelliDroidService> 1
CLOSE
KILL
1 Эти команды предназначены только для целей отладки. Вы должны использовать их только в том случае, если вы знаете точные параметры, которые ожидает IntellidroidService.
Интеграция с TyaintDroid довольно проста. Для компонента «Appanalysis» используйте флаг -t , чтобы указать другой список целевых методов (то есть предоставленный файл taintdroidTargets.txt ).
./IntelliDroidAppAnalysis -t taintdroidTargets.txt <preprocessed app directory>
С динамической стороны следуйте инструкциям здесь, чтобы загрузить и построить TaintDroid для Android 4.3. После того, как вы убедились, что ваша сборка TyaintDroid работает, примените патчи в DynamicClient/androidPatches так же, как и для немодифицированного AOSP.
Intellidroid изначально был разработан в качестве магистерского диссертационного проекта Мишель Вонг в Университете Торонто, под руководством доктора Дэвида Ли.
Для любых запросов, пожалуйста, свяжитесь:
Следующее внесло код в интеллектуальность:
Intellidroid выпускается по лицензии MIT.