loadlibrary()
DLL をユーザー定義メモリ アドレスにロードする方法、または関数を使用して DLL をロードした後に DLL アドレスを変更することは可能ですか。
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"));