Как выгрузить DLL из целевого процесса? - PullRequest
0 голосов
/ 17 октября 2019

Я работаю в Injector, но когда я пытаюсь удалить / выгрузить целевой процесс, он закрывается напрямую, и я не знаю, почему это так.

Вот код, как я вливаю /Загрузка DLL в целевой процесс. executeId - это целевой процесс, его 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. Есть идеи или решения?

1 Ответ

0 голосов
/ 17 октября 2019

Это происходит сбой, потому что после вызова FreeLibrary все еще существует код, который должен выполняться (код эпилога, возвращающийся к начальному коду потока Windows), но этот код пропал после вызова FreeLibrary.

Используйте FreeLibraryAndExitThread вместоFreeLibrary и вам должно быть хорошо.

...