Я использовал этот код, который я нашел где-то в Интернете:
void InjectDLL()
{
char *dllName = "C:\\Project2.dll";
HANDLE proc = OpenProcess(PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_SET_INFORMATION | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_CREATE_THREAD, FALSE, PID);
LPVOID LoadLibAddr = (LPVOID)GetProcAddress(GetModuleHandleA("kernel32.dll"), "LoadLibraryA");
LPVOID dereercomp = VirtualAllocEx(proc, NULL, strlen(dllName) + 1, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
WriteProcessMemory(proc, dereercomp, dllName, strlen(dllName) + 1, NULL);
HANDLE asdc = CreateRemoteThread(proc, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibAddr, dereercomp, 0, NULL);
WaitForSingleObject(asdc, INFINITE);
VirtualFreeEx(proc, dereercomp, strlen(dllName) + 1, MEM_RELEASE);
CloseHandle(asdc);
CloseHandle(proc);
}
Все работает отлично, но после того, как я закончил то, что мне нужно было сделать, я хотел бы удалить внедренную dll либо из программы, которая внедряет dll, либо из самой dll.
FreeLibraryAndExitThread
. Второе решение: ввестиSetWindowsHookEx
;UnhookWindowsHookEx
выгрузит DLL (будьте к этому готовы, это значит: никаких живых окон, никаких приватных потоков) - person manuell   schedule 26.06.2014