Загрузка DLL из памяти и диалоговые окна
От: edton  
Дата: 01.12.20 09:29
Оценка:
Привет,
Есть известные способы, которые позволяют загружать dll из памяти, а не с диска, например:
https://github.com/fancycode/MemoryModule
Вместо LoadLibrary используется:
HMEMORYMODULE MemoryLoadLibrary(const void *, size_t);

Вместо GetProcAddress:
FARPROC MemoryGetProcAddress(HMEMORYMODULE, LPCSTR);

Обычные функции работы с ресурсами естественно не работают, поэтому например, вместо FindResource:
HMEMORYRSRC MemoryFindResource(HMEMORYMODULE, LPCTSTR, LPCTSTR);

и тд.
Если мы напрямую работаем с ресурсами, то всё OK, но если dll например отображает диалоговое окна:
HWND CreateDialog(HINSTANCE hInstance,
    LPCTSTR lpTemplate,
    HWND hWndParent,
    DLGPROC lpDialogFunc
);

то всё это уже не работает.
Что тут можно сделать? Ставить хуки на API работы с ресурсами, насколько это будет стабилно.
Интересно ещё то, что например, некоторые протекторы позволяют упаковывать dll в исполняемый файл. У них такие же ограничения?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.