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

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

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

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

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

Категории

Все категории
Loading categories
manul — Manul — это параллельный фаззер, управляемый покрытием, для бинарных файлов с открытым исходным кодом и чёрного ящика на Windows, Linux и MacOS. | Kitploit
Инструменты/GitHubGitHub/mxmssh/manul
Динамический анализ (песочница)Анализ уязвимостейФаззингАнализ Бинарных Файлов
GitHubmxmssh/manul

manul

Manul — это параллельный фаззер, управляемый покрытием, для бинарных файлов с открытым исходным кодом и чёрного ящика на Windows, Linux и MacOS.

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

Популярное

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

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

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

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

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

Manul

Travis AppVeyor

Логотип

Manul — это фаззер с отслеживанием покрытия, работающий параллельно, для бинарных файлов с открытым и закрытым исходным кодом на Windows, Linux и macOS (бета), написанный на чистом Python.

Быстрый старт

root@kitploit:~
pip3 install psutil
git clone https://github.com/mxmssh/manul
cd manul
mkdir in
mkdir out
echo "AAAAAA" > in/test
python3 manul.py -i in -o out -n 4 "linux/test/test_afl @@"

Установка Radamsa

root@kitploit:~
sudo apt-get install gcc make git wget
git clone https://gitlab.com/akihe/radamsa.git && cd radamsa && make && sudo make install

Нет необходимости устанавливать radamsa на Windows, Manul распространяется с нативной библиотекой radamsa на этой платформе.

Список публичных CVE

CVE IDsПродуктОбнаруживший
CVE-2019-9631 CVE-2019-7310 CVE-2019-9959PopplerMaksim Shudrak
CVE-2018-17019 CVE-2018-16807 CVE-2019-12175Bro/ZeekMaksim Shudrak

Если вам удалось найти новую ошибку с помощью Manul, пожалуйста, свяжитесь со мной, и я добавлю вас в список.

Демонстрация

Короткая демонстрация

Зависимости

  1. Python3 (Python2 устарел с 1 января 2020 года, но Manul всё ещё должен работать нормально под Python2)
  2. psutil
  3. pywin32 (pip install pywin32) на платформе Windows (требуется только для режима постоянной работы DBI).

Фаззинг с отслеживанием покрытия

В настоящее время Manul поддерживает два типа инструментирования: на основе AFL (afl-gcc, afl-clang и afl-clang-fast) и DBI.

Фаззинг с отслеживанием покрытия (режим инструментирования AFL)

Инструментируйте вашу цель с помощью afl-gcc или afl-clang-fast и Address Sanitizer (рекомендуется для лучших результатов). Например:

root@kitploit:~
CC=afl-gcc CXX=afl-g++ CFLAGS=-fsanitize=address CXXFLAGS=-fsanitize=address cmake <путь_к_вашей_цели>
make -j 8
root@kitploit:~
USE_ASAN=1 CC=afl-clang-fast CXX=afl-clang-fast++ cmake <путь_к_вашей_цели>
make -j 8

Подробнее см. эти инструкции.

Фаззинг с отслеживанием покрытия в режиме DBI

В этом режиме вам не нужно инструментировать цель, но необходимо загрузить последнюю версию фреймворка DynamoRIO для Windows или Linux.

Manul распространяется с предварительно скомпилированными клиентами x86/x64 для Linux и Windows. Вы можете найти их в следующих папках:

root@kitploit:~
linux/dbi_32|dbi_64/libbinafl.so (клиент DynamoRIO)
win/dbi_32|dbi_64/binafl.dll

К сожалению, DynamoRIO официально не поддерживается на MacOS.

Использование DynamoRIO для фаззинга бинарных файлов с закрытым исходным кодом

Вы можете найти последние пакеты релизов DynamoRIO на странице загрузки DynamoRIO.

Вы должны раскомментировать следующие строки в файле manul.config и указать правильный путь к загрузчику и клиенту DynamoRIO.

root@kitploit:~
# Выберите фреймворк DBI для предоставления покрытия обратно в Manul ("dynamorio" или "pin"). Пример dbi = dynamorio
dbi = dynamorio
# Если параметр dbi не None, необходимо указать путь к загрузчику DBI и клиенту DBI.
dbi_root = /home/max/DynamoRIO/bin64/drrun
dbi_client_root = /home/max/manul/linux/dbi_64/libbinafl.so
dbi_client_libs = None

Кроме того, вы можете повысить производительность вашей кампании фаззинга с закрытым исходным кодом, используя постоянный фаззинг в памяти. В этом режиме вы должны указать Manul инструментировать конкретную функцию (да, вам нужно найти её, дизассемблировав ваш бинарный файл), и он будет запускать её в цикле, раскомментировав следующие строки:

root@kitploit:~
dbi_persistence_mode = 1
dbi_target_module = afl_test
dbi_target_method = open_file
#dbi_target_offset = 0x3198 # опционально можно указать смещение этой функции вместо имени
dbi_fuzz_iterations = 1000

Авторы winAFL предоставляют очень хорошее объяснение того, как это работает на самом деле здесь. Manul использует большую часть кода библиотеки инструментирования winAFL для связи с целью и её инструментирования.

ВАЖНОЕ ПРИМЕЧАНИЕ: Для фаззинга 32-битных бинарных файлов следует использовать 32-битный загрузчик и 32-битный клиент, а для 64-битных бинарных файлов — 64-битный загрузчик и 64-битный клиент!

Компиляция библиотеки клиента DynamoRIO

Для компиляции библиотеки инструментирования необходимо использовать последнюю версию DynamoRIO. Исходный код библиотеки инструментирования можно найти в dbi_clients_src, расположенной в главной папке Manul.

root@kitploit:~
64-битный Linux

cd dbi_clients_src
wget <DynamoRIO-x86_64-Linux-X.XX.XXXX-X.tar.gz> - загрузите последнюю версию DynamoRIO
tar xvf DynamoRIO-x86_64-X.XX.XXXX-X.tar.gz
mkdir client_64
cd client_64
cmake ../dr_cov/ -DDynamoRIO_DIR=/home/max/manul/dbi_clients_src/DynamoRIO-x86_64-Linux-X.XX.XXXX-X.tar.gz/cmake
make
root@kitploit:~
32-битный Linux
cd dbi_clients_src
wget <DynamoRIO-i386-Linux-X.XX.XXXX-X.tar.gz> - загрузите последнюю версию DynamoRIO
tar xvf DynamoRIO-x86_64-X.XX.XXXX-X.tar.gz
mkdir client_64
cd client_64
CFLAGS=-m32 CXXFLAGS=-m32 cmake ../dr_cov/ -DDynamoRIO_DIR=/home/max/manul/dbi_clients_src/DynamoRIO-i386-Linux-X.XX.XXXX-X.tar.gz/cmake
make

На Windows проще всего скомпилировать библиотеку, установив Visual Studio (протестировано на версиях 2017 и 2013), запустив Командная строка перекрестных средств VS20XX и выполнив следующие команды:

root@kitploit:~
64-битная Windows
cd dbi_clients_src
<Загрузите и извлеките последнюю версию DynamoRIO>
mkdir client_64
cd client_64
cmake -G"Visual Studio 15 Win64" ..\dr_cov\ -DDynamoRIO_DIR=C:\Users\max\manul\dbi_clients_src\DynamoRIO-Windows-XXXX.XX.X.X\cmake
cmake --build . --config RelWithDebInfo (или просто Debug, если нужно)
root@kitploit:~
32-битная Windows
cd dbi_clients_src
<Загрузите и извлеките последнюю версию DynamoRIO>
mkdir client_32
cd client_32
cmake -G"Visual Studio 15" ..\dr_cov\ -DDynamoRIO_DIR=C:\Users\max\manul\dbi_clients_src\DynamoRIO-Windows-XXXX.XX.X.X\cmake
cmake --build . --config RelWithDebInfo (или просто Debug, если нужно)

Использование Intel PIN для фаззинга бинарных файлов с закрытым исходным кодом на Linux

Manul изначально поддерживал фаззинг с отслеживанием покрытия с помощью Intel PIN, но из-за низкой производительности и высоких затрат на обслуживание эта возможность больше не поддерживается.

Аргументы командной строки

Наиболее часто используемые параметры можно указать через командную строку. Больше параметров поддерживается с помощью файла конфигурации (manul.config).

root@kitploit:~
Пример: python3 manul.py -i corpus -o out_dir -n 40 "target @@"

positional arguments:
  target_binary  Целевой бинарный файл и параметры для выполнения (не забудьте заключить в кавычки, например "target e @@").

optional arguments:
  -h, --help     показать это справочное сообщение и выйти
  -n NFUZZERS    Количество параллельных фаззеров
  -s             Запустить слепой фаззинг (без инструментирования кода)
  -c CONFIG      Путь к файлу конфигурации с дополнительными параметрами (см. раздел Параметры файла конфигурации ниже)
  -r             Восстановить предыдущий сеанс

Required parameters:
  -i INPUT       Путь к каталогу с начальным корпусом
  -o OUTPUT      Путь к выходному каталогу

Параметры файла конфигурации

Manul распространяется с файлом manul.config по умолчанию, в котором пользователь может найти все поддерживаемые параметры и примеры использования. Параметры должны быть указаны в следующем формате Формат: <имя_параметра> = <значение>. Символ # можно использовать для игнорирования строки.

Словарь

dict = /home/max/dictionaries/test.dict. Стратегия мутации AFL позволяет пользователю указать список пользовательских токенов, которые могут быть вставлены в случайные места в фаззированном файле. Manul поддерживает эту функцию через данный параметр (предпочтительны абсолютные пути).

Веса мутаторов

mutator_weights=afl:7,radamsa:2,my_mutator:1. Веса мутаторов позволяют пользователю указать Manul, сколько мутаций на 10 выполнений должен выполнять определённый фаззер. В этом примере мутатор AFL будет выполнен в 7/10 мутаций, Radamsa 2/10, а некоторый пользовательский my_mutator получит 1/10. Если вы хотите отключить определённый мутатор, его вес должен быть установлен в 0 (например, mutator_weights=afl:0,radamsa:1,my_mutator:9).

Детерминированное начальное значение (Параметр Radamsa)

deterministic_seed = False|True. Установив True, мутации Radamsa станут детерминированными, и каждый запуск Manul будет приводить к одинаковым выходам.

Печать сводки по каждому потоку

print_per_thread = False|True. Включив этот параметр, Manul будет печатать сводку для каждого выполняемого потока вместо общей сводки.

Отключение изменчивых путей

disable_volatile_bytes = False|True Включив этот параметр, Manul не будет заносить изменчивые пути в чёрный список.

Fork-сервер AFL (только UNIX)

forkserver_on = False|True Включить или отключить fork-сервер AFL.

Параметры DBI

dbi = dynamorio|pin. Этот параметр сообщает Manul, какой фреймворк DBI будет использоваться для инструментирования цели.

dbi_root = <путь>. Этот параметр сообщает Manul, где найти основной загрузчик фреймворка DBI.

dbi_client_root = <путь>. Этот параметр сообщает Manul, где найти клиент DBI для выполнения инструментирования.

dbi_client_libs = имя_#1,имя_#2|None. Этот параметр можно использовать для указания списка библиотек, которые необходимо инструментировать вместе с основной целью (например, у вас есть исполняемый файл, который загружает целевую библиотеку и несколько других, в которых вы хотите искать ошибки).

dbi_persistence_mode = 0|1|2. Этот параметр используется для выбора между режимами постоянной работы DBI. 0 — без постоянства, 1 — стандартное постоянство (обёртывание функций), 2 — пока не поддерживается.

Если dbi-persistence_mode = 1|2, должны быть указаны следующие параметры:

dbi_target_module = <имя модуля>. Manul попытается найти целевую функцию в указанном здесь модуле.

dbi_target_method = <имя функции>. Имя функции, которую нужно обернуть для постоянства.

dbi_target_offset = <смещение функции, например 0x3198>. Смещение функции, которое нужно обернуть для постоянства. Этот параметр можно использовать вместо dbi_target_method, если отладочные символы недоступны.

dbi_fuzz_iterations = 500. Количество итераций фаззинга, выполняемых в памяти до полного перезапуска программы. Вы можете играть с этим аргументом, чтобы найти значение, которое лучше всего подходит для вашей цели.

dbi_thread_coverage = False. Инструментировать покрытие только от потока, выполнившего целевую функцию (пока не поддерживается).

Тайм-аут

timeout = 10. Время ожидания перед завершением цели и отправкой следующего тестового случая.

init_wait

init_wait = 1. Этот параметр можно использовать для установки тайм-аута, необходимого для инициализации цели.

Параметры Netslave и Netmaster

Параметры net_config_master и net_config_slave используются для распределения экземпляров Manul по сети. Вам необходимо выполнить следующие 3 шага для запуска распределённого фаззинга.

  1. Создайте файл со списком хостов в следующем формате: IP:port, где будут выполняться ваши подчинённые.
  2. Запустите все подчинённые экземпляры Manul на удалённых машинах (со всеми необходимыми параметрами и путём к целевому бинарному файлу) и включите следующий параметр: net_config_slave = 0.0.0.0:1337. Manul запустит экземпляр и будет ждать входящего соединения от главного экземпляра на порту 1337.
  3. Запустите главный экземпляр и укажите файл со списком подчинённых экземпляров, созданный на шаге 1, с помощью net_config_master = имя_файла.

Режим отладки

debug = False|True - печатать отладочную информацию.

logging_enable = False|True - сохранять отладочную информацию в журнале.

Логотип

manul_logo = False|True - печатать логотип Manul в начале.

Отключить статистику

no_stats = False|True - сохранять статистику.

Частота синхронизации битовой карты (рекомендуется 5000 для режима DBI)

sync_freq = 10000. Позволяет пользователю изменять частоту синхронизации битовой карты покрытия. Этот параметр сообщает Manul, как часто он должен синхронизировать покрытие между параллельными экземплярами фаззинга. Более низкое значение снижает производительность, но повышает координацию между экземплярами.

Пользовательский путь для сохранения вывода

#custom_path = test_path - этот параметр позволяет сохранять тестовый случай в пользовательской папке (если цель хочет загрузить его из некоторого предопределённого места).

Фаззинг командной строки (экспериментальный)

cmd_fuzzing = True|False. Если этот параметр включён, Manul будет передавать ввод цели через командную строку вместо сохранения в файл.

Игнорирование сигналов

user_signals = 6,2,1|None. Пользователь может указать Manul, какие сигналы от цели следует игнорировать (не считать сбоем).

Сетевой фаззинг (экспериментальный)

target_ip_port = 127.0.0.1:7715|None - используется для указания IP и порта цели. target_protocol = tcp|tcp - используется для указания протокола отправки ввода в цель по сети. net_sleep_between_cases = 0.0. Этот параметр можно использовать для задания задержки между тестовыми случаями, отправляемыми в цель.

В настоящее время сетевой фаззинг является экспериментальной функцией (см. issues для получения дополнительной информации).

Добавление пользовательского мутатора

Пользовательский мутатор можно добавить за следующие три шага: Шаг 1. Создайте файл Python (.py) и дайте ему имя (например, example_mutator.py)

Шаг 2. Создайте две функции def init(fuzzer_id) и def mutate(data). См. example_mutator для получения дополнительной информации. Manul будет вызывать функцию init во время инициализации фаззинга и mutate для каждого файла, передаваемого в цель.

Шаг 3. Включите мутатор, указав его имя с помощью mutator_weights в manul.config. Например: mutator_weights=afl:2,radamsa:0,example_mutator:8.

ПРИМЕЧАНИЕ: Мутаторы AFL и Radamsa всегда должны быть указаны. Если вы хотите отключить AFL и/или Radamsa, просто присвойте им веса 0.

Технические детали

TBD

Экран состояния

Экран состояния

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