Prozess Speicher



  • Guten,

    wenn ich ein HANDLE zu einem Prozess habe (OpenProcess) und dann aus dem Prozess lesen möchte (ReadProcessMemory) muss ich ja ein offset angeben. Angenommen ich möchte einfach den gesamten Prozessspeicher auslesen, wie bekomme ich jetzt das Anfangs-offset?



  • 0x00000000 - 0x7FFFFFFF (je Prozess)



  • Hm.. bin mir ja nicht so sicher ob das relative offsets sind, denn bei 0x00 bekomme ich eine Fehlermeldung von ReadProcessMemory(). (GetLastError() = 299)

    Edit:
    Ok, es sind relative offsets. Zudem tritt dieser Fehler aufgrund der "protection" der "memory section" auf.
    Dann hätte ich aber trotzdem noch eine Frage an die Experten hier 😃
    Man kann aus sections mit gesetztem PAGE_NOACCESS oder PAGE_GUARD nichts auslesen. ( http://msdn.microsoft.com/en-us/library/aa366786(v=vs.85).aspx )
    Könnte man seine eigenen Variablen so gegen Zugriff von außen schützen? Kann man diese "Sperre" mit Windows-Mitteln umgehen?


  • Mod

    Wenn Du dieses Guard Flags oder noaccess flags sett, dann kannst Du auch dort nichts mehr auslesen...

    Man kann Daten lecht gegen andere Prozesse absichern indem man zum Beispiel EncodePointer/DecodePointer verwendet. Leicht und einfach innerhalb des eigenen Prozesses zu verwenden. Die Daten außerhalb des Prozesses sind dann wertlos.
    Gegen Injection nützt das dennoch nichts.

    Lies mal "Jeffrey Richter - Advanved Windows Programming" Dann wird Dir vielleicht einiges klarer wie das Speichermanagement von Windows arbeitet.



  • Mit QueryVirtualMemoryEx alle Memory-Regionen durchgehen und komplett kopieren.



  • Ethon schrieb:

    Mit QueryVirtualMemoryEx alle Memory-Regionen durchgehen und komplett kopieren.

    Naja gut, danke für den Tipp aber das Problem ward bereits gelöst wie man meinem voherigen Beitrag entnehmen kann 😉


Anmelden zum Antworten