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.


Anmelden zum Antworten