Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/plum-umd/redexer
Безопасность AndroidСтатический анализДинамический анализ (песочница)Обратная инженерияАнализ Бинарных ФайловСтатьи и ИсследованияОбучение и Образование
GitHubplum-umd/redexer

redexer

Фреймворк Redexer для двоичной инструментации Dalvik-байткода

Репозиторий
174315 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Сайт

Build Status

redexer

Redexer — это инструмент реинжиниринга для работы с бинарными файлами приложений Android. Он позволяет анализировать DEX-файл и преобразовывать его в структуру данных в памяти; определять, с какими параметрами приложение использует определённые разрешения (эту функцию мы называем RefineDroid); изменять и обратно преобразовывать эту структуру данных для получения выходного DEX-файла (эти функции мы называем Dr. Android, что расшифровывается как Dalvik Rewriting for Android).

Публикации

  • Dr. Android and Mr. Hide: Fine-grained Permissions in Android Applications. Jinseong Jeon, Kristopher K. Micinski, Jeffrey A. Vaughan, Ari Fogel, Nikhilesh Reddy, Jeffrey S. Foster, and Todd Millstein. In ACM CCS Workshop on Security and Privacy in Smartphones and Mobile Devices (SPSM '12), Oct 2012.

Требования

  • OCaml и Ruby

Инструмент протестирован с OCaml 4.09.0 и Ruby 1.8.6(7), поэтому необходимо установить их (или более новые версии).

  • Менеджер пакетов/библиотек OCaml и библиотека SHA

Для работы с SHA-1-подписью (хэшем) в формате DEX мы используем библиотеку OCaml SHA через ocamlfind/findlib, менеджер библиотек OCaml. Проще всего установить их с помощью OPAM, менеджера пакетов OCaml, который содержит оба пакета — OPAM ocamlfind и OPAM sha.

Также можно собрать и/или установить оба пакета напрямую. Если вы используете Linux, вы легко найдёте соответствующие дистрибутивы.

В противном случае (например, на Mac) придётся собирать их самостоятельно. Исходные коды можно найти здесь. Соберите их с помощью make и поместите полученную директорию в корневую директорию site-lib ocamlfind; или выполните sudo make install.

Если вы работаете на ПК, сначала установите ocamlfind/findlib и FlexDLL. Убедитесь, что переменные окружения настроены правильно:

root@kitploit:~
OCAMLLIB=C:\OCaml\lib
CAML_LD_LIBRARY_PATH=%OCAMLLIB%\stublibs
FLEXLINKFLAGS=-L%MinGW%\lib -L%MinGW%\lib\gcc\mingw32\N.N.N
  • Пакеты OPAM:

    • sha
    • str
    • ppx_deriving
    • ppx_deriving_yojson
    • yojson
  • Android SDK (или исходники)

Для распаковки и упаковки apk-файлов мы используем apktool, инструмент реинжиниринга APK с открытым исходным кодом. Поскольку он использует aapt (Android Asset Packaging Tool), необходимо установить Android SDK или исходники. Кроме того, мы используем zipalign, который также входит в Android SDK, для оптимизации перезаписанных приложений.

Пути к базовым инструментам Android можно задать, добавив в профиль следующее:

root@kitploit:~
ANDROID_HOME=$HOME/android-sdk    # ваш собственный путь!
export ANDROID_HOME

PATH=$PATH:$ANDROID_HOME/tools
PATH=$PATH:$ANDROID_HOME/platform-tools
PATH=$PATH:$ANDROID_HOME/build-tools/19.0.0    # номер установленной версии
export PATH
  • RubyGems и Nokogiri

Основные скрипты написаны на Ruby и требуют RubyGems, менеджера пакетов Ruby, и Nokogiri, библиотеки XML для работы с манифест-файлами.

  • (опционально) graphviz dot

Если вы хотите просматривать графы (например, граф вызовов, потоков управления, дерево доминаторов и т.д.), установите graphviz dot.

Сборка

Чтобы собрать redexer, просто выполните make! Исполняемый файл redexer появится в корневой директории.

root@kitploit:~
$ make (clean)

Перед использованием инструмента пользователю необходимо установить последнюю версию платформенного файла для apktool. Например, нужно выполнить

root@kitploit:~
$ java -jar tools/apktool.jar if [подходящий платформенный файл]

Также можно сгенерировать API-документацию в формате html.

root@kitploit:~
$ make api

Использование

  • справка

Вы можете увидеть все доступные опции инструмента:

root@kitploit:~
$ ruby scripts/cmd.rb -h
$ ruby scripts/cmd.rb --help
  • обратное преобразование (unparse)

Подобно dexdump из Android SDK, redexer позволяет просмотреть внутреннее содержимое указанного dex-файла в формате YAML.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd unparse [--to blah.yml]
  • дамп метода

Эта опция выводит инструкции для указанного метода.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd dump_method --mtd cls.mtd
  • идентичность (identity)

Эта функция предназначена для тестирования модулей разбора и дампа redexer. Она, вероятно, генерирует идентичный dex-файл.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd id [--to blah.dex]
  • информация

Вы также можете просмотреть базовую статистику о dex-файле, например, количество инструкций.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd info
  • классы

Эта опция выводит все имена классов, определённых в dex-файле.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd classes

Может быть полезно для поиска сторонних библиотек, например:

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd classes | egrep 'apache'
  • API

Эта опция выводит использование API в dex-файле.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd api [--sdk android.]
$ ruby scripts/cmd.rb target.(apk|dex) --cmd api --sdk com.facebook.
  • статистика кодов операций

Вам не интересно, насколько редко используются некоторые коды операций в байт-коде Dalvik? Будет показана гистограмма всех кодов операций, или вы можете узнать, как часто используется конкретный код операции в указанном приложении.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd opstat [--op opcode1,opcode2,...]

Например,

root@kitploit:~
$ ruby scripts/cmd.rb ~/apps/top24/com.whatsapp.apk --cmd opstat
$ ruby scripts/cmd.rb ~/apps/top24/com.whatsapp.apk --cmd opstat --op div-int/lit16,nop
  • анализ разрешения Intent

Эта опция проводит анализ разрешения Intent на основе распространения и выводит переходы между классами Activity.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd intent
  • граф вызовов

Эта опция генерирует pdf-файл, изображающий граф вызовов указанного файла. Если не указать имя pdf-файла, будет использован cg.pdf.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd cg [--to blah.pdf] [--no-pdf]
  • граф потока управления

Эта опция генерирует pdf-файл, показывающий граф потока управления указанного метода. Добавьте имя метода к имени класса через точку: имя_класса.имя_метода

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd cfg --mtd cls.mtd [--to blah.pdf] [--no-pdf]
  • дерево (пост)доминаторов

Эта опция аналогична предыдущей, за исключением того, что она изображает дерево (пост)доминаторов.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd (p)dom --mtd cls.mtd [--to blah.pdf] [--no-pdf]
  • анализ живости (liveness analysis)

Эта опция выполняет классический обратный анализ потока данных.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd live --mtd cls.mtd
  • анализ распространения констант

Эта опция выполняет классический прямой анализ потока данных.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd const --mtd cls.mtd
  • анализ достигающих определений

Эта опция выполняет классический прямой анализ потока данных.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd reach --mtd cls.mtd
  • зависимые классы

Эта опция находит зависимости классов.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd dependants --mtd cls.mtd
  • запускаемая активность (launcher activity)

Эта опция выводит имя запускаемой активности указанного apk.

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd launcher
  • экспортированные компоненты

Эта опция показывает, какие компоненты доступны извне.

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd exported
  • activity, service, provider, receiver

Эти опции выводят базовые компоненты Android, объявленные в манифесте.

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd [activity | service | provider | receiver]
  • custom_views

Эта опция просматривает определения макетов в ресурсах и выводит пользовательские представления.

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd custom_views
  • fragments

Эта опция просматривает определения макетов в ресурсах и выводит элементы Fragment.

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd fragments
  • buttons

Эта опция просматривает определения макетов в ресурсах и выводит кнопки, а также их id (или текст) и метод обратного вызова (если есть).

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd buttons
  • разрешения, объявленные в манифесте приложения

Эта опция выводит разрешения, которые использует apk.

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd permissions
  • целевая версия SDK

Эта опция выводит, какую версию SDK требует apk.

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd sdk

Если вы не хотите распаковывать apk-файл, фактически, вы можете сделать то же самое с помощью комбинации команд:

root@kitploit:~
$ aapt dump badging target.apk | grep 'targetSdkVersion' | tr -dc 0-9.\\n
  • Hello, DEX

Эта опция генерирует dex-файл, который выводит простое сообщение. Этот dex-файл создаётся только с использованием API redexer.

root@kitploit:~
$ ruby scripts/cmd.rb --cmd hello

Проверьте его внутреннее содержимое:

root@kitploit:~
$ dexdump -d results/classes.dex

Если вам интересно, вы можете протестировать этот dex-файл следующим образом. Предполагается, что путь к ANDROID_SDK установлен.

root@kitploit:~
// создать временный jar, подходящий для Dalvik VM
$ aapt add temp.jar results/classes.dex

// (опционально) если вы не создали avd, создайте его.
$ android create avd -n myAVD1 -t android-8

// запустите эмулятор
$ emulator -avd myAVD1 &

// отправьте временный jar
$ adb push temp.jar /data

// подключитесь к adb shell
$ adb shell

// наконец, запустите dex
# /system/bin/dalvikvm -Xbootclasspath:/system/framework/core.jar \
 -classpath /data/temp.jar Hello
Hello, DEX
#
  • логирование

Это вариант функции перезаписи. С помощью этой функции вы можете записывать поведение приложений с определённых точек зрения. Готовый dex-файл для библиотеки логирования предоставляется: data/logging.dex. Если вы хотите добавить больше функций или утилит, соберите его следующим образом:

root@kitploit:~
$ cd logging
$ gradle copyDex
$ cd ..

Затем используйте следующую команду:

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd logging

trim.py может захватывать последовательности вызовов и возвратов инструментированного приложения. (Сначала вы должны инструментировать тестируемое приложение с помощью redexer.)

Если эти журналы достаточно короткие, то есть телефон (или эмулятор) может хранить всю информацию в памяти, вы можете использовать офлайн-режим скрипта:

root@kitploit:~
$ ./scripts/trim.py -d

Обратите внимание, что все параметры командной строки будут переданы adb logcat, и по умолчанию передаётся org.umd.logging:I *:S для фильтрации нерелевантных сообщений.

Если журналы переполняются, следует использовать онлайн-режим:

root@kitploit:~
$ ./scripts/trim.py

Скрипт перехватывает прерывание клавиши, поэтому вы можете завершить логирование нажатием Ctrl+C.

В любом режиме журналы сохраняются в log.txt и одновременно отображаются на экране. Таким образом, после сбора журналов вам может понадобиться переместить этот файл, например:

root@kitploit:~
$ mv log.txt app.scenario.txt
  • логирование взаимодействий с пользователем

Функция логирования выше является общей в том смысле, что вы можете указать, что логировать на уровне метода. (См. модуль logging для подробностей.) Однако иногда это слишком подробно и может вызывать снижение производительности. Эта функция предназначена для логирования только взаимодействий с пользователем. С её помощью вы можете захватывать только события, связанные с UI. Аналогично, готовый dex-файл для библиотеки логирования предоставляется: data/logging-ui.dex. Если вы хотите изменить подробность информации о UI, соберите его следующим образом:

root@kitploit:~
$ cd logging-ui
$ gradle copyDex
$ cd ..

Затем используйте следующую команду:

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd logging_ui

Библиотека логирования наследуется от android a11y service, которая требует явного согласия пользователя. Таким образом, после установки перезаписанного apk перейдите в Settings/Accessibility и включите службу UI Logging. (Этот шаг аналогичен включению режима отладки устройства.) В logcat сообщения с тегами org.umd.logging_ui.* представляют собой взаимодействия между пользователем и тестируемым приложением.

  • направленное исследование (directed exploration)

Эта опция находит пути перехода между компонентами, ведущие к вызовам целевых методов.

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd directed

Вы можете указать целевые методы для вызова в data/directed.txt

Эти пути перехода между компонентами используются для управления приложениями с целью тестирования уязвимостей безопасности в сторонних библиотеках. Более подробно описано в следующей статье:

root@kitploit:~
* Brahmastra: Driving Apps to Test the Security of Third-Party Components.
R. Bhoraskar, et al., In 23rd Usenix Security Symposium (Security '14).

withTimeout.rb может автоматически создать файл пропуска (skip file) для приложения. Этот скрипт запускает cmd.rb с определённым таймаутом, чтобы ограничить время, затрачиваемое на инструментирование любого отдельного класса. Это временное решение для редких классов, которые зависают в цикле во время инструментирования. Когда этот скрипт находит класс, который вызывает сбой, он добавляет его в файл пропуска и продолжает с того места, где остановился. После завершения withTimeout в директории data будет файл с именем [имя apk]-skip.txt, который можно использовать для создания полностью инструментированного приложения для этого apk. Чтобы использовать withTimeout, просто вызовите

root@kitploit:~
$ ruby scripts/withTimeout.rb ТАЙМАУТ КОМАНДЫ

Где ТАЙМАУТ — длина таймаута в секундах (рекомендуется 300), а КОМАНДЫ — все обычные аргументы командной строки, которые вы бы передали scripts/cmd.rb для этого apk.

Скачать инструмент