如何从目标进程卸载 DLL?

How to unload a DLL from a target Process?

本文关键字:卸载 DLL 进程 目标      更新时间:2023-10-16

我正在使用注射器,但是当我尝试取消注入/卸载目标进程时,它直接关闭,我不知道为什么会这样。

这是我如何将 DLL 注入/加载到目标进程中的代码。执行 ID是它的目标进程,它是 PID。最后,我正在等待LoadLibraryA函数的完成。

HANDLE proc;
HANDLE thread;
LPVOID remoteString, loadLib;
proc = OpenProcess(CREATE_THREAD_ACCESS, FALSE, executionId);
loadLib = (LPVOID)GetProcAddress(GetModuleHandleA("kernel32.dll"), "LoadLibraryA");
remoteString = (LPVOID)VirtualAllocEx(proc, NULL, strlen(library.c_str()), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(proc, (LPVOID)remoteString, library.c_str(), strlen(library.c_str()), NULL);
thread = CreateRemoteThread(proc, NULL, NULL, (LPTHREAD_START_ROUTINE)loadLib, (LPVOID)remoteString, NULL, NULL);
std::cout << "Finished" << std::endl;
WaitForSingleObject(thread, INFINITE);
VirtualFreeEx(proc, remoteString, strlen(library.c_str()) + 1, MEM_RELEASE);
CloseHandle(thread);
CloseHandle(proc);

现在我正在尝试在进程中取消注入/卸载 DLL。我在 DLL 中执行此操作:

FreeLibrary(hModule, 0);

此代码正在关闭我的目标进程,其中 DLL 是。 有什么想法或解决方案吗?

它崩溃了,因为在 FreeLibrary 调用(返回到 Windows 线程起始代码的结语代码(之后仍有代码要运行,但该代码在 FreeLibrary 调用后消失了。

使用 FreeLibraryAndExitThread 而不是 FreeLibrary,你应该很好。