Totaler Noob versucht Arbeitsspeicher auszulesen und scheitert an Zeile 15



  • Du kannst den Arbeitsspeicher nicht auslesen. Was sollte das auch bringen, du weißt doch gar nicht, was da gerade drin ist.



  • Okay... ich hab's jetzt auf folgende Art hinbekommen:

    LPCWSTR charToLPCWSTR(LPCSTR ansistr){
    	int len = MultiByteToWideChar(CP_ACP, 0, ansistr, strlen(ansistr)+1, NULL, 0);
    	LPWSTR unicodestr = (LPWSTR)malloc(len);
    	int a = MultiByteToWideChar(CP_ACP, 0, ansistr, strlen(ansistr)+1, unicodestr, len);
    	return((LPCWSTR) unicodestr);
    }
    
    int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){
    
    	MEMORYSTATUSEX statex;
    	statex.dwLength = sizeof(statex);
    	GlobalMemoryStatusEx(&statex);
    	char messg[100];
    	sprintf(messg, "Arbeitsspeicher: %d", statex.dwMemoryLoad);
    	LPCWSTR  messgout = charToLPCWSTR((LPCSTR) messg);
    	MessageBox(0, messgout, L"Fehler", MB_OK);
    }
    

    Der 4. Parameter von "MultiByteToWideChar()" musste die Länge der Zeichenkette sein... Naja und Naps Link hat mir jetzt auch geholfen: THX Leute 😃



  • @M@st3rhack3r
    warum sollte man den arbeitsspeicher nicht auslesen können...

    man kann es und man kann sogar werte darin verändern...

    kuck dir mal das Memory Management unter anderem die funktionen ReadProcessMemory & WriteProcessMemory an...

    @Miikku
    hier noch 2 links die dich brennend interesieren dürften
    Teil 1
    Teil 2



  • @rT!f@Ct schrieb:

    @M@st3rhack3r
    warum sollte man den arbeitsspeicher nicht auslesen können...

    man kann es und man kann sogar werte darin verändern...

    kuck dir mal das Memory Management unter anderem die funktionen ReadProcessMemory & WriteProcessMemory an...

    Damit kannste nur den virtuellen Adressraum anderer Prozesse auslesen. Das ist nicht das gleiche.



  • Ich habe mir mal dieses Tutorial angeschaut doch wenn ich das "Opferprogramm" starte und danach das hier (in C umgeschrieben) erkennt er den Prozess nicht.

    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    
    main(){
        HWND hWnd; 
    
        hWnd = FindWindow(0,"Opfer"); 
        if(!hWnd){ 
           printf("Prozess nicht gefunden\n"); 
        }
        else{ 
           printf("Prozess wurde gefunden"); 
        }
        Sleep(10000);
    }
    

    Kann mir einer sagen woran das liegt?



  • heist den dein programm dessen werte du verändern willst als Fenstername auch "Opfer"?



  • Ja es heißt so. Ich habs auch schon mit Opfer.exe versucht und es auf 2 weiteren Rechners ausprobiert aber auch ohne Erfolg.



  • LOL 😃
    habs doch gewusst.
    wenn du es so gemacht hast wie in dem tutorial beschrieben, dann kann dein memorytool NIX finden denn dein Opfer programm heist nicht OPFER sondern zB.
    C:\Pfad\zum\Opferprogramm\Name_des_Opferprogramm.exe

    wenn du dein opferprogramm startest, kuck auf die NonClientArray (der blaue balken) das was dort geschrieben steht ersetzt du für "Opfer" in FindWindow

    hWnd = FindWindow(0,"C:\\Pfad\\zum\\Opferprogramm\\Name_des_Opferprogramm.exe");
    

    und lies dir mal durch was unter FindWindow in der MSDN steht vieleicht verstehst du's dann eher.



  • Ich danke dir. 🙂
    Vielleicht hätte ich vorher mal googlen sollen. 😃
    Auf jeden Fall tolles Forum 👍 👍 👍



  • Hä? FindWindow braucht doch einen Fenstertitel, nicht die .exe Datei und Pfad?!



  • Ja das stimmt. Aber in diesem Fall ist es eine Konsolenanwendung und somit der Name = Pfad.



  • Oops, sorry, verpennt.


Anmelden zum Antworten