Всем привет!
Когда-то давно писал свой загрузчик DLL, но сейчас на гитхабе наткнулся на более взрослый загрузчик:
Вы должны зарегистрироваться, чтобы увидеть внешние ссылки
Для чего это может-быть нужно:
Стандартные функции Windows API для загрузки внешних библиотек в программу (LoadLibrary, LoadLibraryEx) работают только с файлами на файловой системе. Поэтому невозможно загрузить DLL прямо из памяти.
Но иногда нужно загрузить dll из памяти, вот зачем:
1. Например есть у вас какая-то модульная архитектура, к примеру какой-то ботнет с различным функционалом, вот поставляться-же сам ботнет может просто загрузчиком, а в зависимости от задания на управляющим сервере, качать нужную зашифрованную DLL и запускать её в памяти.
2. Таким образом можно делать криптования длл.
Вот как пользоваться кодом выше, вот пример:
Вы должны зарегистрироваться, чтобы увидеть внешние ссылки
C:
handle = MemoryLoadLibrary(data, size);
if (handle == NULL)
{
_tprintf(_T("Can't load library from memory.\n"));
goto exit;
}
addNumber = (addNumberProc)MemoryGetProcAddress(handle, "addNumbers");
_tprintf(_T("From memory: %d\n"), addNumber(1, 2));
В общем-то всё просто, есть интерфейсные функции:
handle=MemoryLoadLibrary(data, size) - Загрузка самого образа длл из памяти, где data это адрес в ОЗУ куда dll уже загружена (Например скачена с сети), size размер образа.
Далее уже вызывается MemoryGetProcAddress для получения адреса функции.)