WriteProcessMemory funktioniert nicht



  • Folgendes Problem, dass Programm funktioniert einwandfrei, bis auf die WriteProcessMemory Funktion. Irgendwie scheitert die immer, hat irgendjemand eine Idee warum?
    Vielen Dank schonmal im Vorraus 🙂

    #include <iostream>
    #include <string>
    #include <Windows.h>
    
    
    using namespace std;
    
    void get_proc_id(const char * Name, DWORD &processID) {
    	GetWindowThreadProcessId(FindWindowA(NULL, Name), &processID);
    }
    
    void error(const char * messagebox, const char *messagetitle) {
    	MessageBox(NULL, messagetitle, messagebox, NULL);
    	exit(-1);
    }
    
    bool fileExist(string fileName) {
    	struct stat buffer;
    	return stat(fileName.c_str(), &buffer);
    }
    int main() {
    	
    	DWORD processID = NULL;
    	char dllPath[MAX_PATH];
    	const char* dllName = "DllInejektionsdatei.dll";
    	const char* windowTitle = "Unbenannt - Paint";
    
    	if (fileExist(dllName)) {
    		error("file error", "File exestiert nicht");
    	}
    	if(!GetFullPathName(dllName, MAX_PATH, dllPath, nullptr)) {
    		error("Path fehler", "Der Path konnte nicht gefunden werden");
    	}
    
    	
    	get_proc_id(windowTitle, processID);
    	if(processID == NULL){
    		error("Fehler bei Prozess", "Der Prozess konnte nicht er,ittelt werden");
    	}
    	HANDLE h = OpenProcess(PROCESS_VM_WRITE | PROCESS_VM_READ | PROCESS_ALL_ACCESS, NULL, processID);
    		if(!h){
    			error("Error Prozess", "Fehler bei Überschreibung der Prozessrechte");
    		}
    
    	
    	void* allocated_memory = VirtualAllocEx(h, nullptr, MAX_PATH, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
    
    	if(!allocated_memory)
    	{
    		error("Fehler bei Speicher", "Fehler beim lokalisieren des Speichers");
    }
    	WriteProcessMemory(h, nullptr, dllPath, MAX_PATH, nullptr);
    		
    	//	error("Fehler Memory", "Fehler beim überschreiben der Dll");
    //	}
    	
    	HANDLE h_thread = CreateRemoteThread(h, nullptr, NULL, LPTHREAD_START_ROUTINE(LoadLibraryA), allocated_memory, NULL, nullptr);
    		if (h == NULL) {
    			error("fehler", "Fheler bei create remothe thread");
    		}
    	CloseHandle(h);
    	VirtualFreeEx(h, allocated_memory, NULL, MEM_RELEASE);
    		MessageBox(NULL,"Sucesfully", "Dll wurde platziert", NULL);
    �} 
    
    
    
    


  • @HabeEineFrage sagte in WriteProcessMemory funktioniert nicht:

    Irgendwie scheitert die immer

    Program terminated. Reasom: Ich bin gescheitert



  • Wie meinst?


  • Mod

    Er meint "scheitert" ist eine unbrauchbar magere Fehlerbeschreibung. Du gehst ja auch nicht zur Autowerkstatt und sagst nur "wenn ich Gas gebe, dann scheitert's". Was erwartest du? Warum? Was passiert stattdessen? Bei Fehlermeldungen, bitte genaue Angabe, am besten per Copy&Paste.



  • Das ist ja das Problem es kommt keine Fehlermeldung, also bis auf die kleine Fehlermeldung die ich eingebaut habe, aber wenn ich die halt weglasse führt sich das Programm bis zum Ende aus. Eigentlich soll es ein Dll injector sein der eine Dll in paint injiziert und dadurch in paint eine Nachricht ausgegeben wird. So weit kommt es aber nicht da die Dll nicht injetiert wird.



  • @HabeEineFrage sagte in WriteProcessMemory funktioniert nicht:

    führt sich das Programm bis zum Ende aus

    Ja echt komisch, wenn man nicht einfach bedingungslos exit aufruft, läuft das Programm durch.

    If the function succeeds, the return value is nonzero.

    If the function fails, the return value is 0 (zero). To get extended error information, call GetLastError. The function fails if the requested write operation crosses into an area of the process that is inaccessible.

    https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-writeprocessmemory



  • Ja ok, die geht Last error Variable gibt was zurück also funktioniert es, aber wo liegt dann mein Fehler?



  • @HabeEineFrage sagte in WriteProcessMemory funktioniert nicht:

    Ja ok, die geht Last error Variable gibt was zurück also funktioniert es, aber wo liegt dann mein Fehler?

    Also ich fühle mich jetzt verarscht...



  • Es sorry kannst du es mit bitte erklären ich verstehe es echt grad komplett gar nicht 😅😅



  • @HabeEineFrage sagte in WriteProcessMemory funktioniert nicht:

    WriteProcessMemory(h, nullptr, dllPath, MAX_PATH, nullptr);
    

    ...

    Ja ok, die geht Last error Variable gibt was zurück also funktioniert es, aber wo liegt dann mein Fehler?

    Du liest nicht richtig. Es geht nicht darum ob GetLastError etwas zurückgibt (was nicht Null ist), sondern darum was WriteProcessMemory zurückgibt.
    Und wenn du gesehen hast dass WriteProcessMemory Null zurückgegeben hat, dann holst du dir den Wert von GetLastError und gibst ihn aus.

        if (!WriteProcessMemory(h, nullptr, dllPath, MAX_PATH, nullptr))
        {
            DWORD const error = GetLastError();
            error("meh", ("WriteProcessMemory fehler" + std::to_string(error)).c_str());
        }
    


  • Oh ich hab grad meinen Fehler gefunden, ja war nen bissel dumm der Fehler ich habe anstatt den lokalisierten Speicher nen nullpointer angegeben, sorry falls ich hier welche getriggered haben sollte 😅


Anmelden zum Antworten