Назад к обновлениям
New releaseAug 10, 2026

r2frida v6.2.0

Radare2 и Frida — лучше вместе.

Поделиться

r2frida

Radare2 и Frida — лучше вместе ci radare2

Описание

Автономный плагин для radare2, который включает frida и позволяет инспектировать локальные или удалённые процессы с помощью команд r2 вместо (но не ограничиваясь) скриптов Frida.

Проект radare предоставляет полный инструментарий для реверс-инжиниринга, активно поддерживается и предлагает хорошо поддерживаемые функциональные возможности, расширяя свои возможности другими языками программирования и инструментами.

Frida — это набор для динамической инструментации, упрощающий инспекцию и управление запущенными процессами путём внедрения собственного JavaScript-кода и, при необходимости, взаимодействия с вашими скриптами.

Возможности

  • Запуск немодифицированных скриптов Frida (используйте команду :.)
  • Выполнение сниппетов на C, JavaScript или TypeScript в любом процессе
  • Возможность присоединения, порождения или запуска в локальной или удалённой системе
  • Вывод секций, символов, экспортов, протоколов, классов, методов
  • Поиск значений в памяти внутри агента или с хоста
  • Замена реализаций методов или создание хуков короткими командами
  • Загрузка библиотек и фреймворков в целевой процесс
  • Поддержка интерфейсов Dalvik, Java, ObjC, Swift и C
  • Управление файловыми дескрипторами и переменными окружения
  • Отправка сигналов процессу, продолжение, точки останова
  • Плагин ввода-вывода r2frida также является бэкендом файловой системы fs и отладки debug
  • Автоматизация r2 и frida с помощью r2pipe
  • Чтение/запись памяти процесса
  • Вызов функций, системных вызовов и сырых фрагментов кода
  • Подключение к frida-server через USB или TCP/IP
  • Перечисление приложений и процессов
  • Трассировка регистров, аргументов функций
  • Протестировано на x64, arm32 и arm64 для Linux, Windows, macOS, iOS и Android
  • Не требует установки frida на хост (не нужны frida-tools)
  • Расширение команд r2frida плагинами, работающими в агенте
  • Изменение прав страниц, патчинг кода и данных
  • Разрешение символов по имени или адресу и импорт их как флагов в r2
  • Запуск команд r2 на хосте из агента
  • Использование API r2 и выполнение команд r2 внутри удалённого целевого процесса
  • Нативные точки останова через API :db
  • Доступ к удалённым файловым системам через API r_fs.

Установка

Рекомендуемый способ установки r2frida — через r2pm:

$ r2pm -ci r2frida

Бинарные сборки, не требующие компиляции, скоро будут поддерживаться в r2pm и r2env. А пока вы можете загрузить последние сборки со страницы Releases.

Компиляция

Зависимости

  • radare2
  • pkg-config (не требуется на Windows)
  • curl или wget
  • make, gcc
  • npm, nodejs (скоро будет удалено)

В GNU/Debian необходимо установить следующие пакеты:

$ sudo apt install -y make gcc libzip-dev nodejs npm curl pkg-config git

Инструкции

$ git clone https://github.com/nowsecure/r2frida.git
$ cd r2frida
$ make
$ make user-install

Windows

  • Установите meson и Visual Studio
  • Распакуйте последний zip-релиз radare2 в корневую директорию r2frida
  • Переименуйте его в radare2 (вместо radare2-x.y.z)
  • Чтобы сделать компилятор VS доступным в PATH (preconfigure.bat)
  • Запустите configure.bat, а затем make.bat

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

Для тестирования используйте r2 frida://0, так как присоединение к pid0 в frida — это специальная сессия, работающая локально. Затем выполните команду :? для получения списка доступных команд.

$ r2 'frida://?'
r2 frida://[action]/[link]/[device]/[target]
* action = list | apps | attach | spawn | launch
* link   = local | usb | remote host:port
* device = '' | host:port | device-id
* target = pid | appname | process-name | program-in-path | abspath
Local:
* frida://?                        # показать эту справку
* frida://                         # список локальных процессов
* frida://0                        # присоединиться к frida-helper (без spawn)
* frida:///usr/local/bin/rax2      # абсолютный путь для spawn
* frida://rax2                     # то же, если local/bin есть в PATH
* frida://spawn/$(program)         # породить новый процесс в текущей системе
* frida://attach/(target)          # присоединиться к целевому PID на текущем хосте
USB:
* frida://list/usb//               # список процессов на первом USB-устройстве
* frida://apps/usb//               # список приложений на первом USB-устройстве
* frida://attach/usb//12345        # присоединиться к заданному pid на первом USB-устройстве
* frida://spawn/usb//appname       # породить приложение на первом определённом USB-устройстве
* frida://launch/usb//appname      # spawn+resume приложения на первом USB-устройстве
Remote:
* frida://attach/remote/10.0.0.3:9999/558 # присоединиться к pid 558 по TCP на удалённом frida-server
Environment: (Используйте команду `%` для изменения окружения во время выполнения)
  R2FRIDA_SAFE_IO=0|1              # Обход бага Frida на Android/thumb
  R2FRIDA_DEBUG=0|1                # Отладка поведения разбора аргументов
  R2FRIDA_COMPILER_DISABLE=0|1     # Отключение нового компилятора TypeScript Frida (`:. foo.ts`)
  R2FRIDA_AGENT_SCRIPT=[file]      # путь к файлу агента r2frida

Примеры

$ r2 frida://0     # то же, что frida -p 0, подключается к локальной сессии

Вы можете присоединяться, порождать или запускать любую программу по имени или pid. Следующая строка присоединяется к первому процессу с именем rax2 (запустите rax2 - в другом терминале, чтобы проверить эту строку)

$ r2 frida://rax2  # присоединиться к первому процессу с именем `rax2`
$ r2 frida://1234  # присоединиться к заданному pid

Использование абсолютного пути к бинарнику для spawn запустит процесс:

$ r2 frida:///bin/ls
[0x00000000]> :dc        # продолжить выполнение целевой программы

Также работает с аргументами:

$ r2 frida://"/bin/ls -al"

Для отладки iOS/Android-приложений через USB используйте следующие действия. Обратите внимание, что spawn можно заменить на launch или attach, а имя процесса может быть bundleid или PID.

$ r2 frida://spawn/usb/         # перечислить устройства
$ r2 frida://spawn/usb//        # перечислить приложения на первом iOS-устройстве
$ r2 frida://spawn/usb//Weather # запустить приложение Weather

Команды

Это наиболее часто используемые команды; изучите их и добавляйте ? для получения справки по подкомандам.

:i        # получить информацию о цели (pid, имя, home, arch, bits, ..)
.:i*      # импортировать детали целевого процесса в локальный r2
:?        # показать все доступные команды
:dm       # список карт. Используйте ':dm|head' и перейдите к базовому адресу программы
:iE       # список экспортов текущего бинарника (seek)
:dt fread # трассировать функцию 'fread'
:dt-*     # удалить все трассы

Плагины

Плагины r2frida работают на стороне агента и регистрируются с помощью API r2frida.pluginRegister.

Смотрите директорию plugins/ для дополнительных примеров скриптов плагинов.

[0x00000000]> cat example.js
r2frida.pluginRegister('test', function(name) {
  if (name === 'test') {
    return function(args) {
      console.log('Hello Args From r2frida plugin', args);
      return 'Things Happen';
    }
  }
});
[0x00000000]> :. example.js   # загрузить скрипт плагина

Команда :. работает как команда . в r2, но выполняется внутри агента.

:. a.js  # запустить скрипт, который регистрирует плагин
:.       # список плагинов
:.-test  # выгрузить плагин по имени
:.. a.js # вечный скрипт (остаётся работать после отключения)

Termux

Если вы хотите установить и использовать r2frida нативно на Android через Termux, есть некоторые особенности с библиотечными зависимостями из-за разрешения символов. Способ заставить это работать — расширить переменную окружения LD_LIBRARY_PATH, указав системную директорию перед директорией termux libdir.

$ LD_LIBRARY_PATH=/system/lib64:$LD_LIBRARY_PATH r2 frida://...

Устранение неполадок

Убедитесь, что вы используете современную версию r2 (желательно последний релиз или git).

Выполните r2 -L | grep frida, чтобы проверить, загружен ли плагин. Если ничего не выводится, используйте переменную окружения R2_DEBUG=1 для получения отладочных сообщений и выяснения причины.

Если у вас проблемы с компиляцией r2frida, вы можете использовать r2env или загрузить готовые сборки со страницы релизов GitHub. Учтите, что должны совпадать только версии MAJOR.MINOR: например, r2-5.7.6 может загрузить любой плагин, скомпилированный для версии от 5.7.0 до 5.7.8.

Архитектура

 +---------+
 | radare2 |     Инструмент radare2, работающий поверх остального
 +---------+
      :
 +----------+
 | io_frida |    Плагин ввода-вывода r2frida
 +----------+
      :
 +---------+
 |  frida  |     Хостовые API Frida и логика взаимодействия с целью
 +---------+
      :
  +-------+
  |  app  |      Целевой процесс, инструментируемый Frida с помощью Javascript
  +-------+

Благодарности

Этот плагин разработан pancake (он же Sergi Alvarez, автор radare2) для NowSecure.

Я хочу поблагодарить Ole André за написание и поддержку Frida, а также за его доброту в упреждающем исправлении ошибок и обсуждении технических деталей по любым вопросам, необходимым для успешной интеграции. Спасибо.

Категории