Загрузка DLL на определенный пользователем адрес - PullRequest
0 голосов
/ 12 декабря 2018

Как загрузить DLL в определяемый пользователем адрес памяти или возможно ли изменить адрес DLL после загрузки DLL с помощью функции loadlibrary ().

Я пытался использовать VirtualAllocEx () для выделения адреса памятии загрузить DLL в удаленный процесс.DLL загружается в удаленный процесс, но адрес не тот.

//virtually allocating the memory address
DWORD *arg = (PDWORD)VirtualAllocEx(process, /*(LPVOID)0x81200000*/0, strlen(buffer), MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
if(arg == NULL) {
    return 1;
}

//Write the argument to LoadLibraryA to the process's newly allocated memory region.
int n = WriteProcessMemory(process, arg, buffer, strlen(buffer), NULL);
if(n == 0) {
    return 1;
}

//Inject our DLL into the process's address space.
HANDLE threadID = CreateRemoteThread(process, NULL, 0, (LPTHREAD_START_ROUTINE)address, arg, NULL, NULL);

Я также пытался использовать функцию rebaseimage (), но адрес памяти менялся после загрузки DLL.

//rebaseimage function to change the base address of the DLL
ret = ReBaseImage("WinMemoryDLL.dll","",TRUE,TRUE,FALSE,0,&OldImage,&OldImageBase,&NewImageSize,&NewImageBase,0);

hinstLib = LoadLibrary(TEXT("WinMemoryDLL.dll"));
...