Tiro является гибридной итерационной структурой Deobfuscation для приложений Android. Его название означает четыре шага: Target , Instrument , Run и Observe . Подход Тиро использует идею целевого выполнения (см. Наш предыдущий инструмент, Intellidroid), чтобы статически определить местоположения возможного запутывания и определить входные данные для запуска этих местоположений кода. Обращая эти местоположения и выполняя их с использованием информации о таргетировании, информация о деобфускации времени выполнения может быть собрана и передана обратно в статический анализ, чтобы деобеобразовать приложение и достичь более полных результатов анализа.
Для получения дополнительной информации, пожалуйста, смотрите нашу статью, опубликованную в Usenix Security 2018.
В настоящее время код в этом репозитории содержит базовый код для Target шага и в основном является портом статического компонента интеллектуального положения для платформы сажи. Мы планируем выпустить код для других шагов Тиро в будущем.
Статический анализ Тиро состоит из Target и шагов Instrument . На Target этапе определяются местоположение запутывания, и пути вызовов в эти местоположения извлекаются. Для каждого пути Тиро собирает ограничения, которые определяют входные данные, которые должны быть введены для динамического запуска пути. В настоящее время мы используем решатель ограничений Z3 и преобразуем ограничения в форматы Z3-PY и Z3-Java.
Компонент статического анализа требует Java 8 (JDK 1.8).
Этот репозиторий содержит зависимость от репозитория android-platforms , который содержит библиотеки Android Framework, используемые приложениями. Эта зависимость является подмодулем в рамках проекта. Чтобы клонировать Тиро с подмодулем, беги:
git clone --recursive [email protected]:miwong/tiro.git
В качестве альтернативы, если у вас уже клонировали Тиро без подмодуля, запустите:
git submodule update --init --recursive
Это займет несколько минут, так как библиотеки Android Framework большие.
Этот проект использует систему сборки Gradle. Выходные файлы расположены в build/ каталоге. Сценарий Gradlew - это обертка для машин, на которых уже нет Gradle. Если ваша машина разработки уже содержит Gradle, вы можете использовать свою собственную установку, заменив ./gradlew на gradle в приведенных ниже командах. Сетевое соединение требуется при первой компиляции кода, чтобы Gradle мог автоматически загружать зависимости.
Построить:
./gradlew build
Чтобы построить и запустить:
./TIROStaticAnalysis <APK>
По умолчанию Тиро пишет статический анализ результатов в каталоге tiroOutput . Параметры -o позволяют изменить это. Чтобы увидеть другие параметры командной строки, запустите:
./TIROStaticAnalysis --help
В настоящее время вывод статического анализа Tiro (то есть appInfo.json ) не совместим с интеллектуальной. Когда мы выпускаем динамический компонент TIRO, мы также обновим динамический клиент, используемый в интеллекте Intellidroid, чтобы извлечение ограничений TiRO может быть интегрировано в динамический анализ.
Тиро построен на основе статического анализа сажи. Было внесено несколько модификаций в генерацию вызового графа Soot для улучшения вызового графа с ребрами, представляющими специфический для андроида поток выполнения (например, намерения). Модификации опубликованы в отдельном репозитории здесь.
Поскольку приложения Android ориентированы на события, точки входа в приложение должны быть рассчитаны для достижения полного анализа. Тиро использует обнаружение входной точки, реализованное в Flowdroid. Незначительные модификации были внесены в этот код входа для извлечения информации, требуемой анализом Тиро; Эти изменения хранятся в static/src/soot/ и static/src/tiro/target/entrypoint/ .
Следующее внесло код в Тиро:
Тиро был разработан в качестве доктора философии Мишель Вонг в Университете Торонто. Для любых запросов, пожалуйста, свяжитесь с Мишель по адресу [email protected].
Tiro выпущена по общему общедоступной лицензии GNU, версии 2.1.