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

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

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

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

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

Категории

Все категории
Loading categories
frida-fuzzer — Этот экспериментальный фаззер предназначен для использования при фаззинге API в памяти. | Kitploit
Инструменты/GitHubGitHub/andreafioraldi/frida-fuzzer
Динамический анализ (песочница)ЭксплуатацияТестирование безопасности APIФаззингМобильная безопасностьАнализ Бинарных ФайловArchived
GitHubandreafioraldi/frida-fuzzer

frida-fuzzer

Этот экспериментальный фаззер предназначен для использования при фаззинге API в памяти.

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

Популярное

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

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

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

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

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

Frida API Fuzzer

v1.4 Copyright (C) 2020 Andrea Fioraldi [email protected]

Выпущено под лицензией Apache License v2.0

Этот экспериментальный фаззер предназначен для фаззинга API в памяти.

Дизайн сильно вдохновлён и основан на AFL/AFL++.

На данный момент мутатор довольно прост, только стадии havoc и splice от AFL.

Я тестировал только примеры из tests/, это проект в разработке, но известно, что он работает как минимум на GNU/Linux x86_64 и Android x86_64.

Вам нужен Frida >= 12.8.1 для запуска (pip3 install -U frida) и frida-tools для компиляции harness.

Usage

Библиотека fuzz должна быть импортирована в пользовательский harness, а затем скомпилирована с помощью frida-compile для создания агента, который frida-fuzzer внедрит в целевое приложение.

Большая часть логики фаззера находится в агенте.

Harness имеет следующий формат:

root@kitploit:~
var fuzz = require("./fuzz");

var TARGET_MODULE = "test_linux64";
var TARGET_FUNCTION = DebugSymbol.fromName("target_func").address;;
var RET_TYPE = "void";
var ARGS_TYPES = ['pointer', 'int'];

var func_handle = new NativeFunction(TARGET_FUNCTION, RET_TYPE, ARGS_TYPES, { traps: 'all' });

fuzz.target_module = TARGET_MODULE;

var payload_mem = Memory.alloc(fuzz.config.MAX_FILE);

fuzz.fuzzer_test_one_input = function (/* Uint8Array */ payload) {

  Memory.writeByteArray(payload_mem, payload, payload.length);

  func_handle(payload_mem, payload.length);

}

fuzz.fuzzer_test_one_input обязателен. Если вы не укажете fuzz.target_module, то весь выполняемый код будет инструментирован.

Вы также можете установить fuzz.manual_loop_start = true, чтобы сообщить фаззеру, что вы будете вызывать fuzz.fuzzing_loop() в обратном вызове, и поэтому он не должен вызывать его за вас (например, для запуска фаззинга при нажатии кнопки в Android-приложении).

Обратный вызов fuzz.init_callback можно установить для выполнения кода, когда фаззер будет готов начать. См. пример в tests/test_java.js.

fuzz.dictionary — это классический словарь фаззера, массив, в который можно добавлять элементы (допустимые типы: Array, ArrayBuffer, Uint8Array, String), используемые как дополнительные значения в мутаторе. См. пример в tests/test_libxml2.js.

frida-fuzzer принимает следующие аргументы:

Если вы не укажете выходную папку, будет создана временная папка в /tmp. Если вы не укажете папку с начальным seed-файлом, в качестве начального seed-файла будет использован неинформированный seed 0000.

Если вы фаззите локальное приложение, вы можете выполнить system-config перед frida-fuzzer, чтобы настроить параметры вашей системы и ускорить процесс.

Запустив ./frida-fuzzer -spawn ./tests/test_linux64, вы увидите на терминале что-то вроде следующего экрана состояния:

screen

Вы также можете легко добавить собственную стадию в fuzz/fuzzer.js и добавить её в список стадий в fuzz/index.js.

Чтобы настроить фаззер, отредактируйте fuzz/config.js. Переменные, которые вы, возможно, захотите изменить: MAP_SIZE (если фаззингующийся код невелик, вы можете уменьшить его и немного ускориться), MAX_FILE (максимальный размер генерируемого ввода) и QUEUE_CACHE_MAX_SIZE (увеличьте размер кэша очереди для большей скорости, особенно на Android).

Example

Давайте профаззим нативную разделяемую библиотеку в примере Android-приложения в tests.

Убедитесь, что у вас есть root-доступ на виртуальном устройстве:

root@kitploit:~
host$ adb root

Скачайте Android x86_64 frida-server со страницы релизов репозитория и скопируйте его на устройство в /data/local/tmp (используйте adb push).

Откройте оболочку и запустите frida-server:

root@kitploit:~
device# cd /data/local/tmp
device# ./frida-server

Теперь установите тестовое приложение tests/app-debug.apk, перетащив его в окно эмулятора.

Затем откройте приложение.

Скомпилируйте скрипт агента с помощью frida-compile:

root@kitploit:~
host$ frida-compile -x tests/test_ndk_x64.js -o fuzzer-agent.js

Откройте приложение в эмуляторе.

Профаззьте функцию test_func библиотеки libnative-lib.so, поставляемой с тестовым приложением, с помощью команды:

root@kitploit:~
host$ ./frida-fuzzer -U -o output_folder/ com.example.ndktest1

Интересные тестовые примеры и сбои сохраняются в output_folder.

Наслаждайтесь.

screen1

TODO

Привет, сообщество OSS, здесь много TODO, если кто-то хочет внести свой вклад.

  • Фаззинг Java-кода (ожидание дополнительных открытых методов в frida-java-bridge, должно быть легко, почти готово)
  • Стадия splice (объединение двух тестовых примеров в очереди и применение havoc к результату)
  • Поддержка словарей (и соответствующая модификация havoc)
  • Выбор seed-файлов
  • Встроенная инструментация для arm64
  • Оценка производительности (исследование расписания AFL)
  • Структурный мутатор (мутация байтов на основе грамматики, написанной на JSON)
  • CompareCoverage (профилирование субинструкций для обхода препятствий фаззинга)
  • Переписать frida-fuzzer на C с frida-core, чтобы иметь возможность запускать всё на мобильном устройстве

Если у вас есть сомнения по поводу какой-либо из этих функций, не стесняйтесь написать мне в Twitter.

Для предложений функций есть раздел Issues.

Скачать инструмент
-i FOLDERПапка с начальными seed-файлами
-o FOLDERВыходная папка с промежуточными seed-файлами и сбоями
-UПодключение к USB
-spawnЗапустить и присоединиться вместо простого присоединения
-script SCRIPTИмя скрипта (по умолчанию fuzzer-agent.js)