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

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

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

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

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

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/cracked5pider/ldrlibraryex
Обход IDS/IPSПост-эксплуатацияRed TeamingРазработка Полезной НагрузкиArchived
GitHubcracked5pider/ldrlibraryex

LdrLibraryEx

Небольшая x64-библиотека для загрузки dll в память.

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

Популярное

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

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

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

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

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

LdrLibraryEx

Небольшая x64 библиотека для загрузки DLL в память.

Возможности

  • минимум зависимостей и используемых функций (используется только ntdll.dll)
  • позиционно-независимый код
  • лёгкая и минималистичная
  • простая в использовании
  • загрузка модулей из памяти
  • загрузка модулей с диска
  • поддержка api sets
  • обход image load callbacks (с использованием приватной памяти)
  • поддержка образов с отложенным импортом, tls, seh и т.д.

Документация

Флаги библиотеки

Флаги можно комбинировать.

LIBRARYEX_NONE: Сопоставляет модуль с диска в память и выполняет точку входа.

LIBRARYEX_BYPASS_LOAD_CALLBACK: Сопоставляет модуль с диска в приватную память (без резервного файла), что обходит image load callbacks (PsSetLoadImageNotifyRoutine).

LIBRARYEX_NO_ENTRY: Не выполнять точку входа модуля.

LIBRARYEX_BUFFER: Сопоставляет модуль из памяти, а не с диска.

Функция: LdrLibrary

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

root@kitploit:~
/*!
 * @brief
 *  load library into memory
 *
 * @param Buffer
 *  buffer context to load library
 *  either a wide string or a buffer pointer 
 *  the to PE file to map (LIBRARYEX_BUFFER)
 *
 * @param Library
 *  loaded library pointer
 *
 * @param Flags
 *  flags
 *
 * @return
 *  status of function
 */
NTSTATUS LdrLibrary(
    _In_  PVOID  Buffer,
    _Out_ PVOID* Library,
    _In_  ULONG  Flags
);

Этот пример показывает, как загрузить модуль с диска (из пути System32):

root@kitploit:~
PVOID Module = { 0 };
ULONG Flags  = { 0 };

//
// mapping flags to be used by the library
//
Flags = LIBRARYEX_NONE; 

//
// map file into memory
//
if ( ! NT_SUCCESS( Status = LdrLibrary( L"advapi32.dll", &Module, Flags ) ) ) {
    printf( "[-] LdrLibraryEx Failed: %p\n", Status );
    return; 
}

printf( "[*] Module @ %p\n", Module );

Этот пример показывает, как загрузить модуль из буфера в памяти:

root@kitploit:~
PVOID Module = { 0 };
ULONG Flags  = { 0 };

//
// mapping flags to be used by the library
//
Flags = LIBRARYEX_NONE  | 
        LIBRARYEX_BUFFER; 

//
// read file on disk into memory
//
if ( ! ( Image = ReadFileBuffer( L"C:\\Windows\\System32\\advapi32.dll", NULL ) ) ) {
    puts( "[-] ReadFileBuffer Failed" );
    return;
}

//
// map file into memory
//
if ( ! NT_SUCCESS( Status = LdrLibrary( Image, &Module, Flags ) ) ) {
    printf( "[-] LdrLibraryEx Failed: %p\n", Status );
    return;
}

printf( "[*] Module @ %p\n", Module );

Также можно загружать модули на основе их api set (поддержка только Windows 10+):

root@kitploit:~
//
// map file into memory
//
if ( ! NT_SUCCESS( Status = LdrLibrary( L"api-ms-win-base-util-l1-1-0.dll", &Module, Flags ) ) ) {
    printf( "[-] LdrLibraryEx Failed: %p\n", Status );
    return;
}

printf( "[*] Module @ %p\n",  );

Функция: LdrLibraryEx

LdrLibraryEx позволяет перехватывать определённые функции, чтобы изменить поведение сопоставления библиотеки с памятью.

root@kitploit:~
//
// mapping flags to be used by the library
// and insert the loaded module into Peb
//
Flags = LIBRARYEX_BYPASS_LOAD_CALLBACK |
        LIBRARYEX_NO_ENTRY;

//
// init LibraryEx context
//
if ( ! NT_SUCCESS( Status = LdrLibraryCtx( &Ctx, Flags ) ) ) {
    printf( "[-] LdrLibraryCtx Failed: %d\n", Status );
    goto END;
}

//
// hook function
//
Ctx.LdrLoadDll = C_PTR( HookLdrLoadDll );

//
// map file into memory
//
if ( ! NT_SUCCESS( Status = LdrLibraryEx( &Ctx, L"cryptsp.dll", &Module, Flags ) ) ) {
    printf( "[-] LdrLibraryEx Failed: %p\n", Status );
    return; 
}

Примечание

Эта кодовая база написана и оптимизирована для x86_64-mingw и, скорее всего, не будет работать или компилироваться в Visual Studio.

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

Огромная благодарность следующим ресурсам и проектам:

  • DarkLoadLibrary
  • MDSec: Bypassing Image loader kernel callbacks
  • ReactOS LdrLoadDll
  • Vergilius Project

Этот проект не следует использовать в реальной среде или операции. Я в основном написал его, чтобы понять и узнать больше о том, как работает загрузчик Windows. Я написал его в виде библиотеки, потому что хотел использовать его для других публичных и приватных проектов. Я достиг своей цели. Увидимся.

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