
[Официальный] Инструмент обратной разработки 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-й уровень:
Android API mock
TODO
Детали
Smali-ВМ выполняет следующие шаги:
Как ВМ обрабатывает инструкции invoke-*?
Анализ манифеста (ОГРАНИЧЕННЫЙ)
Перед первым запуском анализируется Android-манифест приложения. На данный момент аномалии в манифесте, такие как небезопасная конфигурация, действительно обнаруживаются на этом уровне.
Единственная цель парсинга Android-манифеста — заполнение других типов анализаторов.
Анализ разрешений
Все разрешения, извлечённые из манифеста, перечисляются, идентифицируются и сравниваются со спецификацией Android для целевой версии Android API.
Dexcalibur предоставляет (только в некоторых случаях) описание назначения разрешения, минимальную версию Android API и т.д.
Анализ активностей
Анализ провайдеров
Анализ служб
Анализ приёмников
Мониторинг сети
Мониторинг Intent
Мониторинг доступа к файлам
Не видите меню многопользовательского режима? Не проблема, меню нет, но минималистичная совместная работа возможна.
Dexcalibur запускает веб-сервер. Итак, если несколько человек находятся в одной сети с этим веб-сервером и брандмауэр хоста настроен правильно, вы можете работать совместно над одним экземпляром Dexcalibur.
Текущие ограничения:
Особая благодарность участникам:
Прежде чем углубляться:
dexcalibur --reinstall? Если нет, попробуйте.Сначала проверьте, сохранены ли глобальные настройки в <user_directory>/.dexcalibur/
$ ls -la ~/.dexcalibur
total 8
drwxr-xr-x 3 test_user staff 96 29 avr 11:41 .
drwxr-xr-x+ 87 test_user staff 2784 29 avr 11:47 ..
-rw-r--r-- 1 test_user staff 204 29 avr 11:41 config.json
$ cat ~/.dexcalibur/config.json
{
"workspace":"/Users/test_user/dexcaliburWS3",
"registry":"https://github.com/FrenchYeti/dexcalibur-registry/raw/master/",
"registryAPI":"https://api.github.com/repos/FrenchYeti/dexcalibur-registry/contents/"
}
Затем проверьте, соответствует ли структура рабочей области Dexcalibur следующей (содержимое папки /api может отличаться).
$ ls -la ~/dexcaliburWS/.dxc/*
/Users/test_user/dexcaliburWS/.dxc/api:
total 0
drwxr-xr-x 3 test_user staff 96 29 avr 11:41 .
drwxr-xr-x 7 test_user staff 224 29 avr 11:41 ..
drwxr-xr-x 8 test_user staff 256 29 avr 11:41 sdk_androidapi_29_google
/Users/test_user/dexcaliburWS/.dxc/bin:
total 34824
drwxr-xr-x 4 test_user staff 128 29 avr 11:41 .
drwxr-xr-x 7 test_user staff 224 29 avr 11:41 ..
-rwxr-xr-x 1 test_user staff 17661172 29 avr 11:41 apktool.jar
drwxr-xr-x 18 test_user staff 576 29 avr 11:41 platform-tools
/Users/test_user/dexcaliburWS/.dxc/cfg:
total 8
drwxr-xr-x 3 test_user staff 96 29 avr 11:41 .
drwxr-xr-x 7 test_user staff 224 29 avr 11:41 ..
-rw-r--r-- 1 test_user staff 314 29 avr 11:41 config.json
/Users/test_user/dexcaliburWS/.dxc/dev:
total 0
drwxr-xr-x 2 test_user staff 64 29 avr 11:41 .
drwxr-xr-x 7 test_user staff 224 29 avr 11:41 ..
/Users/test_user/dexcaliburWS/.dxc/tmp:
total 0
drwxr-xr-x 2 test_user staff 64 29 avr 11:41 .
drwxr-xr-x 7 test_user staff 224 29 avr 11:41 ..
Если вы используете физическое устройство, подключённое через USB, убедитесь, что включены режим разработчика и отладка по USB.
Если вы используете виртуальное устройство, перейдите на /splash.html, выберите Device Manager, нажмите Connect over TCP ... и следуйте инструкциям. Если вы не знаете IP-адрес вашего устройства, позвольте Dexcalibur обнаружить его, установив флажок automatic configuration.
Вам нужно зарегистрировать целевое устройство, прежде чем вы сможете его использовать. Во время регистрации Dexcalibur собирает метаданные устройства и отправляет совместимую версию сервера Frida.
Такие метаданные используются для выбора правильных целей frida-server и frida-gadget.
Если в списке устройств на строке отображается красный восклицательный знак !, значит, ваш компьютер не авторизован устройством. Вероятно, вам нужно подтвердить.
Если ваше устройство отображается в DeviceManager и столбец online отмечен, нажмите enroll.
Если ваше устройство отображается в DeviceManager и столбец online отмечен, нажмите enroll.
Версия Dexcalibur < v0.7 не могла автоматически обнаруживать эмулируемые устройства и использовать их из-за неполного разбора вывода ADB.
Начиная с версии >= v0.7, после запуска виртуального устройства перейдите на /splash.html или нажмите на DEXCALIBUR в панели навигации. Нажмите кнопку Device Manager в левом меню, а затем кнопку Refresh в верхней части таблицы.
У вас должна появиться строка, начинающаяся с ADB ID вашего виртуального устройства.
Сначала, как и любое целевое устройство, его необходимо зарегистрировать.
Нажмите Connect over TCP ..., чтобы добавить новое устройство по TCP или подключить зарегистрированное устройство по TCP.
Если устройство никогда не регистрировалось, регистрация будет выполнена по TCP. В некоторых случаях подключение по TCP медленнее, чем по USB. Поэтому регистрация может занять дополнительное время.
Если устройство было зарегистрировано по USB, новым предпочтительным типом транспорта для этого устройства становится TCP.
Создайте pull request в этом репозитории или создайте issue.
Создайте pull request в репозитории dexcalibur-doc.
Документация доступна здесь (сайт документации) и здесь (вики)
![]() |
|---|
| Они предоставили лицензию на All Products <3 |
В настоящее время существует мало документации и учебных ресурсов по Dexcalibur. Если вы успешно использовали Dexcalibur для победы в CTF-задании или для поиска уязвимости, я настоятельно рекомендую вам поделиться своим опытом.