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

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

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

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

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

Категории

Все категории
Loading categories
rhabdomancer — Ассистент для исследования уязвимостей, который находит вызовы потенциально небезопасных функций API в бинарном файле. | Kitploit
Инструменты/GitHubGitHub/0xdea/rhabdomancer
Статический анализАнализ уязвимостейОбратная инженерияАнализ Бинарных Файлов
GitHub0xdea/rhabdomancer

rhabdomancer

Ассистент для исследования уязвимостей, который находит вызовы потенциально небезопасных функций API в бинарном файле.

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

Популярное

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

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

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

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

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

[![](https://img.shields.io/github/stars/0xdea/rhabdomancer.svg?style=flat&color=yellow)](https://github.com/0xdea/rhabdomancer)
[![](https://img.shields.io/crates/v/rhabdomancer?style=flat&color=green)](https://crates.io/crates/rhabdomancer)
[![](https://img.shields.io/crates/d/rhabdomancer?style=flat&color=red)](https://crates.io/crates/rhabdomancer)
[![](https://img.shields.io/badge/ida-9.4-violet)](https://hex-rays.com/ida-pro)
[![](https://img.shields.io/badge/[email protected])](https://twitter.com/0xdea)
[![](https://img.shields.io/badge/[email protected])](https://infosec.exchange/@raptor)
[![build](https://github.com/0xdea/rhabdomancer/actions/workflows/build.yml/badge.svg)](https://github.com/0xdea/rhabdomancer/actions/workflows/build.yml)
[![doc](https://github.com/0xdea/rhabdomancer/actions/workflows/doc.yml/badge.svg)](https://github.com/0xdea/rhabdomancer/actions/workflows/doc.yml)

> "Дорога к эксплуатируемым уязвимостям вымощена неэксплуатируемыми уязвимостями."
>
> -- Mark Dowd

Rhabdomancer — это молниеносно быстрый headless-плагин для IDA, который находит вызовы потенциально небезопасных API-функций в бинарном файле. Аудиторы могут выполнить обратную трассировку от этих кандидатных точек, чтобы найти пути, позволяющие получить доступ к недоверенному вводу.

![](https://assets.kitploit.com/production/public/readmes/49813/668212019df8d7b843ca6bcd0e68432321528d6d1a229ce774358fa80fbecfb2.png)

## Возможности

- Молниеносно быстрый headless-опыт благодаря IDA 9.x и Rust-биндингам idalib-rs.
- Поддержка бинарных целей на C/C++, скомпилированных для любой архитектуры, реализованной в IDA.
- Местоположения вызовов плохих API-функций выводятся в stdout и помечаются в IDB.
  - Местоположения вызовов в библиотечном коде, распознанном IDA (например, статически слинкованный рантайм, сопоставленный FLIRT-сигнатурами), помечаются как `(lib)`.
  - Вызовы через заглушки (например, записи `.plt` в ELF-бинарниках или импортные заглушки PE- и Mach-O-бинарников, перечисляемые как thunks) трассируются обратно к их вызывающим.
  - В ELF-бинарниках функция намеренно перечисляется дважды с одинаковыми местоположениями вызовов: один раз как её `.plt`-заглушка (помеченная как thunk) и один раз как её импорт. Каждое местоположение вызова помечается в IDB только один раз.
- Известные плохие API-функции сгруппированы по уровням опасности, чтобы помочь расставить приоритеты в аудиторской работе.
  - [BAD 0] Высокий приоритет — функции, которые обычно считаются небезопасными.
  - [BAD 1] Средний приоритет — интересные функции, которые следует проверить на небезопасные сценарии использования.
  - [BAD 2] Низкий приоритет — пути кода, связанные с этими функциями, следует тщательно проверять.
- Список известных плохих API-функций встроен и может быть легко настроен с помощью конфигурационного файла на основе `conf/rhabdomancer.toml`.
- Имена функций сопоставляются без следующих украшений: ведущих точек и подчёркиваний (например, `_strcpy`), префиксов библиотечных псевдонимов (например, `__o_malloc` в Universal CRT, `__libc_system` и `__GI___snprintf` в glibc) и, только для заглушек и подобных псевдонимов, числового суффикса, который IDA добавляет к уже используемым именам (например, `memset_0`).

> [!NOTE]
> Укреплённые функции (например, `__strcpy_chk`, используемая вместо `strcpy` при сборке с `_FORTIFY_SOURCE`) намеренно не сопоставляются, поскольку они являются проверяемыми вариантами перечисленных функций. Чтобы также помечать их вызовы, добавьте их явно в пользовательскую конфигурацию (например, `"__strcpy_chk"` с тем же приоритетом, что и `strcpy`).

## Статьи

- <https://hex-rays.com/blog/streamlining-vulnerability-research-idalib-rust-bindings>
- <https://hnsecurity.it/blog/streamlining-vulnerability-research-with-ida-pro-and-rust>

## См. также

- <https://github.com/0xdea/ghidra-scripts/blob/main/Rhabdomancer.java>
- <https://docs.hex-rays.com/release-notes/9_0#headless-processing-with-idalib>
- <https://github.com/idalib-rs/idalib>
- <https://books.google.it/books/about/The_Art_of_Software_Security_Assessment.html>

## Установка

Самый простой способ получить последнюю версию — через [crates.io](https://crates.io/crates/rhabdomancer):

1. Скачайте, установите и настройте IDA (см. <https://hex-rays.com/ida-pro>).
2. Установите LLVM/Clang (см. <https://rust-lang.github.io/rust-bindgen/requirements.html>).
3. В Linux/macOS установка выполняется следующим образом:
   ```sh
   export IDADIR=/path/to/ida # if not set, the build script will check common locations
   cargo install rhabdomancer --locked
   ```
   В Windows вместо этого используйте следующие команды:
   ```powershell
   $env:LIBCLANG_PATH="\path\to\clang+llvm\bin"
   $env:PATH="\path\to\ida;$env:PATH"
   $env:IDADIR="\path\to\ida" # if not set, the build script will check common locations
   cargo install rhabdomancer --locked
   ```

## Компиляция

В качестве альтернативы можно собрать из [исходного кода](https://github.com/0xdea/rhabdomancer):

1. Скачайте, установите и настройте IDA (см. <https://hex-rays.com/ida-pro>).
2. Установите LLVM/Clang (см. <https://rust-lang.github.io/rust-bindgen/requirements.html>).
3. В Linux/macOS компиляция выполняется следующим образом:
   ```sh
   git clone --depth 1 https://github.com/0xdea/rhabdomancer
   cd rhabdomancer
   export IDADIR=/path/to/ida # if not set, the build script will check common locations
   cargo build --release --locked
   ```
   В Windows вместо этого используйте следующие команды:
   ```powershell
   git clone --depth 1 https://github.com/0xdea/rhabdomancer
   cd rhabdomancer
   $env:LIBCLANG_PATH="\path\to\clang+llvm\bin"
   $env:PATH="\path\to\ida;$env:PATH"
   $env:IDADIR="\path\to\ida" # if not set, the build script will check common locations
   cargo build --release --locked
   ```

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

1. Убедитесь, что IDA правильно настроена и имеет действующую лицензию.
2. При необходимости настройте список известных опасных API-функций: скопируйте
   [`conf/rhabdomancer.toml`](https://github.com/0xdea/rhabdomancer/blob/master/conf/rhabdomancer.toml) (выберите тег,
   соответствующий вашей установленной версии, для получения точного встроенного списка), отредактируйте копию и задайте
   переменную окружения `RHABDOMANCER_CONFIG` с путём к ней. Файл должен определять массивы `high`, `medium` и `low`,
   и никаких других ключей. В противном случае используется встроенный список, который встраивается в бинарный файл во
   время сборки из `conf/rhabdomancer.toml` (редактирование этого файла требует пересборки).
3. Убедитесь, что переменная окружения `IDADIR` задана, если ваша установка IDA находится в нестандартном месте.
4. Запустите следующим образом:
   ```sh
   rhabdomancer <binary_file>
   ```
   Любой существующий файл базы данных `.i64` будет обновлён; в противном случае будет создан новый файл базы данных.
5. Откройте полученный файл базы данных `.i64` в IDA.
6. Выберите `View` > `Open subviews` > `Bookmarks`
7. Наслаждайтесь результатами, удобно собранными в окне IDA.

> [!NOTE]
> Rhabdomancer также добавляет комментарии в отмеченных местах вызовов. И закладки, и комментарии помечаются как
> `[BAD n] <function_name>`, где `n` — уровень приоритета (0 = высокий, 1 = средний, 2 = низкий), чтобы скрипты могли
> искать их в базах данных IDA. Этот формат стабилен между релизами.

## Совместимость

Официально поддерживается только последний релиз IDA, но более старые версии также могут работать. В следующей таблице
приведены последние совместимые релизы для каждой версии IDA:

| Версия IDA | Последний совместимый выпуск |
| ----------- | ------------------------- |
| v9.0.240925 | v0.2.4                    |
| v9.0.241217 | v0.3.5                    |
| v9.1.250226 | v0.6.2                    |
| v9.2.250908 | v0.7.6                    |
| v9.3.260213 | v0.8.1                    |
| v9.3.260327 | v0.9.0                    |
| v9.3.260421 | v0.9.3                    |
| v9.4.260714 | текущий выпуск           |
| v9.4.260915 | текущий выпуск           |

> [!NOTE]
> Дополнительную информацию см. в документации [idalib-rs](https://github.com/idalib-rs/idalib).

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

Разработку этого проекта поддерживали следующие организации:

- [HN Security](https://hnsecurity.it)
- [Hex-Rays](https://hex-rays.com) в рамках их [Contributor Program](https://hex-rays.com/contributor-program)

## Журнал изменений

- [CHANGELOG.md](https://github.com/0xdea/rhabdomancer/blob/master/CHANGELOG.md)

## TODO

- Дальнейшее обогащение списка известных опасных API-функций (см. <https://github.com/0xdea/semgrep-rules>).
- Отслеживание вызовов через thunk-функции вне сегментов `.plt` (например, `j_` thunk-функции инкрементальной компоновки MSVC).
- Рассмотреть возможность пропуска отметки мест вызовов в библиотечном коде, распознанном IDA (сейчас только помечается `(lib)`).
- Реализовать сериализованный вывод для облегчения автоматизированного разбора и анализа.
- Реализовать базовый набор правил в стиле [VulFi](https://github.com/Accenture/VulFi)
  и [VulnFanatic](https://github.com/Martyx00/VulnFanatic).
Скачать инструмент