Привет,
Есть известные способы, которые позволяют загружать 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 в исполняемый файл. У них такие же ограничения?