
[Официальный] Инструмент обратной разработки Android, ориентированный на автоматизацию динамической инструментации с использованием Frida. Он дизассемблирует dex, статически анализирует его, генерирует хуки, обнаруживает отражённые методы, сохраняет перехваченные данные и создаёт на их основе новые возможности. Его цель — быть единой платформой для обратной разработки Android.

Dexcalibur — это платформа для обратной разработки Android, ориентированная на автоматизацию инструментирования. Её особенность заключается в использовании динамического анализа для улучшения эвристик статического анализа. Она нацелена на автоматизацию рутинных задач, связанных с динамическим инструментированием, таких как:
Хотите чем-то поделиться или вам нужна помощь? Присоединяйтесь к нашим официальным чатам:
Telegram — самый быстрый способ получить ответ
Официальная документация доступна здесь (веб-сайт — в разработке).
Последние новости смотрите здесь: http://docs.dexcalibur.org/News.html
Видеодемонстрации Dexcalibur: Демо: Меньше минуты, чтобы захукать 61 метод? Не проблема. (youtube)
Вносите вклад!
Не стесняйтесь! Есть несколько способов внести вклад:
Перейдите к документации по установке
Альтернатива: использовать Docker
adb (и эмулятор Android, если необходимо)docker-compose build android-dexcaliburdocker run --rm -it --net=host -v /tmp/dexcalibur:/shared -p 8000:8000 dexcalibur:2023.01 /bin/bashДля Linux и MacOS
Установка через NPM: Если Dexcalibur был установлен глобально с помощью NPM (опция -g), то Dexcalibur можно запустить из терминала командой $ dexcalibur, иначе его можно запустить командой $ node $(node root -g dexcalibur)/dexcalibur/dexcalibur.js.
Установка из исходного кода: из папки dexcalibur выполните $ dexcalibur или $ node dexcalibur.js.
Для Windows
Установка через NPM: Даже если Dexcalibur установлен глобально с помощью NPM (опция -g), Dexcalibur необходимо запускать из терминала следующей командой: node <NPM_ROOT>/dexcalibur/dexcalibur.js.
Установка из исходного кода: из папки dexcalibur в терминале выполните команду node dexcalibur.js.
Вы используете предыдущую версию Dexcalibur?
Выполните те же шаги, что и для новой установки, и когда потребуется ввести путь к рабочей области, укажите ваше текущее расположение рабочей области.
Просто выполните:
$ npm install -g dexcalibur
Существующая конфигурация и рабочая область будут обнаружены автоматически.
Следующие скриншоты иллюстрируют автоматическое обновление xrefs во время выполнения.


На данный момент самое большое ограничение — Dexcalibur не может генерировать исходный код хуков, нацеленных на нативные функции (в библиотеках JNI). Однако вы можете вручную объявить Interceptor Frida, отредактировав хук.
Учитывая, что Dexcalibur (пока) не предоставляет функций для анализа нативной части, такой как библиотеки JNI или JNA, описаны только функции и ограничения, связанные с Java-частью.
Точность анализа зависит от полноты образа Android API, используемого на ранних этапах анализа. Это означает, что если вы используете DEX-файл, сгенерированный из файла Android.jar из Android SDK, некоторые ссылки на внутренние методы, поля или классы из Java API Android могут отсутствовать. Лучшие результаты достигаются, когда анализ начинается с файла "boot.oat", извлечённого непосредственно с реального устройства, работающего под ожидаемой версией Android.
TODO : написать текст
TODO : написать текст
Отслеживаемое поведение
Статический анализатор, задействованный в действии "Выполнить smali (VM)", способен обнаруживать и принимать, но отслеживает следующее поведение:
На данный момент обработчики/прослушиватели для таких недопустимых инструкций не поддерживаются, но события отслеживаются и отображаются.
Dexcalibur IR
ВМ создаёт кастомное упрощённое промежуточное представление (IR), которое отображается только для помощи аналитику в проведении анализа.
В зависимости от глубины стека вызовов и конфигурации, IR может включать или не включать инструкции, выполненные внутри вызванной функции. Если выполнение входит в try-блок и продолжается до возврата, но никогда не выполняет catch, то catch-блок не будет отображён. Фактически цель Dexcalibur IR — отображать только то, "что выполняется" или "что может быть выполнено в зависимости от значения некоторых символов" в контексте ВМ.
Dexcalibur IR помогает читать очищенную версию байт-кода, удаляя бесполезные goto и непрозрачные предикаты. Dexcalibur IR может быть сгенерирован ВМ с двумя уровнями упрощения:
1-й уровень IR, может использоваться, если вы не доверяете 2-му уровню IR:
2-й уровень: