Lade-Endlade von DLL
-
Hallo Gemeinede,
mache mir gerade ein kleines Tool für Lade und Endladeroutinen von DLL´s.
Mein Problem, ich bekomme den belegten Speicher nicht frei zum Entladen.load...
bool LadeFunktion() { if(EnableDebugPrivilege()==true) { printf("Privilege accept!\n"); } hDll = LoadLibrary("KERNEL32"); is.LoadLibrary = (fpLoadLibrary)GetProcAddress(hDll, "LoadLibraryA"); is.GetProcAddress = (fpGetProcAddress)GetProcAddress(hDll, "GetProcAddress"); strcpy(is.path, "C:\\DLL.dll"); funcsize = (DWORD)threadend-(DWORD)threadstart; printf("ID: "); scanf("%d", &id); hProc = OpenProcess(PROCESS_ALL_ACCESS, false, id); if(hProc !=0) { printf("Prozess Handle: %x & %p\n", hProc,hProc); }else{ printf("Prozess Handle Errorcode : %d\n", GetLastError()); return false; } start = VirtualAllocEx(hProc, 0, funcsize+sizeof(INJECTSTRUCT), MEM_COMMIT, PAGE_EXECUTE_READWRITE); if(start !=0) { printf("Memory:%x & %p\n", start,start); }else{ printf("Memory Error : %d\n",GetLastError()); return false; } if(WriteProcessMemory(hProc, start, (LPVOID)&is, sizeof(INJECTSTRUCT), NULL)==0) { printf("WriteProcessMemory Error : %d\n",GetLastError()); } thread = (LPVOID)((DWORD)start+sizeof(INJECTSTRUCT)); if(WriteProcessMemory(hProc, thread, (LPVOID)threadstart, funcsize, NULL)==0) { printf("WriteProcessMemory Error : %d\n",GetLastError()); } if(CreateRemoteThread(hProc, 0, 0, (LPTHREAD_START_ROUTINE)thread, start, 0, 0)==0) { printf("CreateRemoteThread Error : %d\n",GetLastError()); } CloseHandle(hProc); return true; }
unload
bool EndladeFunktion() { if(EnableDebugPrivilege()==true) { printf("Privilege accept!\n"); } printf("ID: "); scanf("%d", &id); hProc = OpenProcess(PROCESS_ALL_ACCESS, false, id); if(hProc !=0) { printf("Prozess Handle: %x & %p\n", hProc,hProc); }else{ printf("Prozess Handle Errorcode : %d\n", GetLastError()); return false; } if(VirtualFree(start,funcsize+sizeof(INJECTSTRUCT),MEM_DECOMMIT)==0) { printf("VirtualFree error : %d\n",GetLastError()); }else { printf("Memory begin Start : %d - Funktionsgroesse+Vars : %d\n",start, funcsize+sizeof(INJECTSTRUCT)); } CloseHandle(hProc); return true; }
Danke für eure Hilfe!
Gruß
-
Was ist INJECTSTRUCT? Eigentlich müsste man nur den Pfad zur Dll in den Prozess schreiben, sonst nix.
UND WAS GENAU IST JETZT DER FEHLER?
-
Ich meine da fehlt noch ein FreeLibrary(..)
bool EndladeFunktion() { ... FreeLibrary(hDll); ... }
Wo immer das jetzt Sinn macht.