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

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

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

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

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

Категории

Все категории
Loading categories
moonwalk — найти базовые адреса DLL без обхода PEB | Kitploit
Инструменты/GitHubGitHub/teach2breach/moonwalk
Пост-эксплуатацияАнализ Бинарных ФайловОбучение и ОбразованиеRed TeamingРазработка Полезной Нагрузки
GitHubteach2breach/moonwalk

moonwalk

найти базовые адреса DLL без обхода PEB

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

Популярное

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

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

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

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

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

moonwalk: поиск базового адреса DLL

Эта библиотека и CLI-инструмент на Rust демонстрируют альтернативный метод поиска базового адреса загруженных DLL без обхода Process Environment Block (PEB). Этот метод особенно полезен в сценариях, где обход PEB может быть обнаружен или заблокирован.

Различия веток

Этот репозиторий содержит две ветки с разными подходами:

Основная ветка (Main)

  • Использует крейт winapi и VirtualQuery для проверки памяти
  • Функции библиотеки (lib.rs) не содержат операторов вывода для чистой интеграции
  • CLI-инструмент (main.rs) включает отладочный вывод для демонстрации концепции
  • Подходит для изучения и понимания метода

Ветка OPSEC

  • Без внешних зависимостей — полностью самодостаточна
  • Без вызовов Windows API — использует прямой доступ к памяти с обработкой исключений вместо VirtualQuery
  • Без операторов вывода в функциях библиотеки
  • Повышенная скрытность — не совершает вызовов API
  • Лучше подходит для имплантов/инструментов — оставляет меньше следов и её сложнее обнаружить

Обе ветки безопасны в использовании, но ветка OPSEC даёт дополнительные преимущества операционной безопасности для сценариев, где вызовы API могут отслеживаться или блокироваться.

Как это работает

Программа использует подход с обходом стека для поиска DLL:

  1. Доступ к Thread Environment Block (TEB):

    • Использует встроенный ассемблер для чтения указателя TEB из сегментного регистра GS (GS:[0x30])
    • Извлекает базу стека (GS:[0x08]) и предел стека (GS:[0x10]) из TEB
  2. Обход стека:

    • Начинает с текущего указателя стека (RSP)
    • Поднимается по стеку в поисках адресов возврата
    • Проверяет каждый адрес на исполняемую память
    • Основная ветка: использует VirtualQuery для проверки областей памяти
    • Ветка OPSEC: использует прямой доступ к памяти с обработкой исключений
  3. Идентификация модуля:

    • Для каждого потенциального адреса возврата проверяет, указывает ли он на исполняемую память
    • Когда исполняемая память найдена, идёт назад для поиска PE-заголовка
    • Проверяет модуль по следующим признакам:
      • Сигнатура MZ (DOS-заголовок)
      • Сигнатура PE
      • Характеристики DLL
      • 64-битная архитектура
      • Имя модуля из каталога экспорта
  4. Проверка:

    • Подтверждает, что модуль является целевой DLL, проверяя его имя в каталоге экспорта
    • Убеждается, что все структуры PE-заголовка корректны

Почему такой подход?

Традиционные методы поиска DLL часто включают обход списка модулей PEB. Несмотря на эффективность, такой подход может:

  • Быть обнаруженным программным обеспечением безопасности
  • Быть заблокированным в определённых средах

Метод обхода стека предлагает альтернативу, которая:

  • Не полагается на PEB
  • Может работать в средах, где обход PEB заблокирован
  • Ветка OPSEC: не совершает вызовов API

Требования

  • Rust (ночной тулчейн)
  • Windows x64
  • Основная ветка: крейт winapi
  • Ветка OPSEC: без внешних зависимостей

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

Как библиотека

Добавьте в ваш Cargo.toml:

Основная ветка:

root@kitploit:~
[dependencies]
moonwalk = { git = "https://github.com/Teach2Breach/moonwalk.git" }

Ветка OPSEC:

root@kitploit:~
[dependencies]
moonwalk = { git = "https://github.com/Teach2Breach/moonwalk.git", branch = "opsec" }

Пример использования в вашем коде:

root@kitploit:~
use moonwalk::find_dll_base;

fn main() {
    // Найти ntdll.dll
    if let Some(ntdll_base) = find_dll_base("ntdll.dll") {
        println!("ntdll.dll base: 0x{:X}", ntdll_base);
    }

    // Без учёта регистра, расширение .dll необязательно
    if let Some(kernel32_base) = find_dll_base("KeRNEl32") {
        println!("kernel32.dll base: 0x{:X}", kernel32_base);
    }
}

Как CLI-инструмент

Сборка:

root@kitploit:~
cargo build --release

Запуск:

root@kitploit:~
# Найти ntdll.dll (по умолчанию)
cargo run --release

# Найти конкретную DLL (без учёта регистра, расширение .dll необязательно)
cargo run --release kernel32.dll
cargo run --release KeRNEl32
cargo run --release USER32

Пример

Операторы вывода больше не включены. Это изображение включено в образовательных целях.

Демонстрация Moonwalk DLL Base Address Finder

Примечания

  • Имена DLL не чувствительны к регистру, расширение .dll необязательно
  • Работает только с DLL, присутствующими в стеке вызовов
  • Основная ветка: использует VirtualQuery для безопасной проверки доступа к памяти
  • Ветка OPSEC: использует прямой доступ к памяти с обработкой исключений для максимальной скрытности
  • Обе ветки имеют чистые библиотечные интерфейсы без отладочного вывода
Скачать инструмент