以下代码将注入dll并将调用DllMain.我如何从DLL中调用特定函数,而不仅仅是DllMain?
DWORD pid; HANDLE hd; LPVOID gp, rs, proc; gp = (LPVOID)GetProcAddress(GetModuleHandle(L"Kernel32.dll"), "LoadLibraryA"); pid = 6096; hd = OpenProcess(PROCESS_ALL_ACCESS, 0, pid); rs = (LPVOID)VirtualAllocEx(hd, 0, sizeof(DLL_NAME), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); if (!WriteProcessMemory(hd, (LPVOID)rs, DLL_NAME, strlen(DLL_NAME), 0)) { printf("WriteProcessMemory %d", GetLastError()); } if (!CreateRemoteThread(hd, 0, 0, (LPTHREAD_START_ROUTINE)gp, rs, 0, 0)) { printf("CreateRemoteThread %d", GetLastError()); }
David Heffer.. 5
当您注入的DLL DllMain
第一次运行时,调用CreateThread
创建一个可以执行任何操作的新线程.请注意,您无法DllMain
按照文档中的说明调用任意代码.因此CreateThread
来自的呼吁DllMain
.