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

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

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

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

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

Категории

Все категории
Loading categories
rustdllproxy — Generate Proxy DLLs in Rust | Kitploit
Инструменты/GitHubGitHub/johnswiftc/rustdllproxy
Генерация полезной нагрузкиМеханизмы персистентностиПост-эксплуатацияТестирование на ПроникновениеRed TeamingРазработка Полезной Нагрузки
GitHubjohnswiftc/rustdllproxy

rustdllproxy

Generate Proxy DLLs in Rust

Репозиторий
56442 месяцев назадПроверено Kitploit

Популярное

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

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

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

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

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

rustdllproxy


Крейт-утилита на Rust для простой генерации и разработки прокси-DLL для приложений Windows.

Установка

root@kitploit:~
cargo install rustdllproxy

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

В настоящее время этот крейт поддерживает только стандартный PE-формат DLL.

Текущие ограничения

  • При перехвате функций с помощью пользовательского кода сигнатура функции должна быть известна
    • Её можно определить с помощью дизассемблеров и инструментов реверс-инжиниринга, таких как Ghidra

Команды

Rustdllproxy поставляется с двумя подкомандами:

Скачать инструмент
КомандаНазначение
rustdllproxy newСгенерировать новый крейт-cdylib-прокси из одной или нескольких существующих DLL.
rustdllproxy buildСинхронизировать файл .def с src/lib.rs и собрать крейт.
root@kitploit:~
rustdllproxy --help        # общая справка
rustdllproxy new --help    # флаги генерации
rustdllproxy build --help  # флаги сборки

Создание нового крейта

Краткое замечание о стратегии

Перед генерацией крейта решите, как должен работать ваш прокси. Типичный подход — перехват через порядок поиска (search order hijacking): вы переименовываете целевую DLL, например в target_.dll, и используете скомпилированный прокси как target.dll. Это создаёт поток вида binary -> target.dll -> target_.dll

Дальнейшие шаги зависят от вашего сценария использования. Если же вам нужно переименовать проксируемую DLL, обновите сгенерированный файл .def соответствующим образом.


root@kitploit:~
rustdllproxy new -p path/to/target_.dll -n my_proxy

Совет: rustdllproxy — это CLI, построенный на clap. Выполните rustdllproxy --help, чтобы увидеть все опции и флаги.

Написание хуков

Библиотека макросов поддерживает 3 основных типа хуков: prehook, posthook и fullhook.

Шаги по реализации хука

  1. Замените директиву #[no_mangle] на макрос хука (оставьте завершающий комментарий //<dllname>.dll на месте)

    root@kitploit:~
    #[prehook("dllbeingproxied.dll", "function_name")] //dllbeingproxied.dll
    
  2. Заполните сигнатуру функции (объявите входные параметры как mut, чтобы иметь возможность их изменять)

  3. Соберите проект с помощью rustdllproxy build.

Типы хуков

prehook

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

root@kitploit:~
#[prehook("target.dll", "my_function")] //target.dll
fn my_function(mut param1: i32, mut param2: &str) {
    // Ваш код здесь — выполняется до оригинальной функции
    param1 *= 2;  // При необходимости измените параметры
}

posthook

Выполняет код после оригинальной функции. Просматривайте и изменяйте возвращаемое значение с помощью магической переменной ret.

root@kitploit:~
#[posthook("target.dll", "calculate")] //target.dll
fn calculate(input: i32) -> i32 {
    // Сначала выполняется оригинальная функция
    // Затем выполняется ваш код с доступом к 'ret'
    ret = ret * 2;  // Изменение возвращаемого значения
}

Примечание: Переменная ret автоматически определяется как изменяемая. Если она не нужна, её можно не использовать.

fullhook

Предоставляет полный контроль над выполнением функции. Управляйте возвращаемым значением и вызовом функции вручную.

root@kitploit:~
#[fullhook("target.dll", "do_multi_add")] //target.dll
fn do_multi_add(mut a: i32, mut b: i32, mut c: i32) -> i32 {
    // Предварительная обработка
    a += 10;
    b += 20;

    // Вызов оригинальной функции с помощью магической func()
    let mut return_value: i32 = func(a, b, c);

    // Постобработка
    return_value *= 2;

    // Необходимо явно вернуть значение
    return_value
}

Сборка крейта

Запускайте из каталога прокси-крейта (или передайте его первым аргументом):

root@kitploit:~
rustdllproxy build [PATH] [--profile <name>] [--no-build] [-- <extra cargo args>]
ФлагПо умолчаниюДействие
PATH.Путь к корню прокси-крейта.
--profile <name>releaseПрофиль сборки Cargo (release, dev, пользовательский).
--no-buildвыклПерегенерировать файл .def, но пропустить cargo build.
-- <args>—Передаётся в cargo build без изменений.

Предостережения

  • Файл .def полностью перегенерируется при каждой сборке, ручные изменения будут перезаписаны. Если вам нужно внести ручные правки в процесс сборки rustdllproxy, для этого можно использовать cargo.
  • Система сборки использует сгенерированные комментарии, экспорты .def и имена хуков для определения имени проксируемой DLL перед сборкой. Если информации недостаточно, будет выдана ошибка с объяснением, как восстановить ситуацию.

Пример рабочего процесса

Допустим, вы хотите изменить office.dll, используемую в офисном ПО, через перехват порядка поиска DLL:

Шаг 1: Подготовьте оригинальную DLL

root@kitploit:~
# Переименуйте оригинальную DLL
mv office.dll office_.dll

Шаг 2: Сгенерируйте прокси-крейт

root@kitploit:~
rustdllproxy new -p office_.dll -n office_proxy

Шаг 3: Реализуйте хуки

root@kitploit:~
#[prehook("office_.dll", "open_window")] //office_.dll
fn open_window() {
    // Ваш пользовательский код здесь...
    println!("Окно сейчас откроется!");
}

Шаг 4: Сборка и развёртывание

root@kitploit:~
cd office_proxy
rustdllproxy build

Файлы сборки находятся в каталоге /target

Рекомендации по объединению DLL

Можно проксировать несколько целевых DLL одним крейтом. Эта возможность используется редко и имеет ряд важных ограничений.

При объединении нескольких DLL:

  • Порядковые номера (ordinals) функций могут измениться из-за порядка экспорта
  • Это редко вызывает проблемы, поскольку современное ПО использует имена экспортов для совместимости
  • В основном полезно для анализа и разработки пользовательских приложений

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

Примечания к релизам находятся в CHANGELOG.md.

Вклад в проект

Вклад приветствуется! Пожалуйста, свободно создавайте issue и pull request.