Speicher von anderem Programm lesen



  • Hallo! Ich möchte zu Analysezwecken den Speicher eines Programms auslesen.

    Ich verwende dafür die Funktion

    HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
    

    bekomme auch den gewünschten Prozess raus.

    Danach versuche ich den Heap zu lesen mit

    hHeapSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPHEAPLIST, entry.th32ProcessID);
    

    Und hier ist das Problem. Ich bekomme ein als rückgabe INVALID_HANDLE_VALUE.
    Und mit GetLastError() hab ich rausbekommen das es sich um ERROR_ACCESS_DENIED handelt.
    Frage: Wie kann ich trotzdem (lese-)Zugriff auf den Speicher bekommen?
    Bzw. woran liegt es das ich keinen zugriff habe? Bei firefox z.B. bekomm ich kein ERROR_ACCESS_DENIED.



  • Habs selber gelöst, bin aber nicht zufrieden mit der Lösung.
    Man muss Visual Studio mit Adminrechten starten.
    Muss aber auch anders gehen oder?
    Keiner 'ne Idee?



  • Versuch mal, ob es auch mit dem Release außerhalb der Visual Studio Umgebung mit Admin Rechten geht. Dort wird es noch komplizierter es hinzubekommen.


  • Mod

    Und warum attached Du Dichnicht einfach mit dem Debugger?



  • Martin Richter schrieb:

    Und warum attached Du Dichnicht einfach mit dem Debugger?

    Noch nie gemacht. Interessiert mich aber sehr.
    Wie würde ich den z.B. für den Windows Taschenrechner(calc.exe) den Speicher auslesen? Nehmen wir an ich hätte 12345679 eingetippt, bekomm ich das irgendwie damit raus?
    Habe jetzt Visual Studio gestartet dann Debuggen->Attach to Process, dann die calc.exe ausgewählt.

    Danach läd er kurz und ich sehe nix im VS.
    Drücke ich Pause sehe ich assembler code, und nu?
    Sorry habe noch nie damit gearbeitet.



  • dudeldu schrieb:

    Wie würde ich den z.B. für den Windows Taschenrechner(calc.exe) den Speicher auslesen? Nehmen wir an ich hätte 12345679 eingetippt, bekomm ich das irgendwie damit raus?

    Ich vermute mal du willst wissen an welcher Stelle im Speicher 12345679 steht, da solltest du dich mal mit Reverse Code Engineering beschäftigen.

    Schau dir mal das hier an:
    http://tuts4you.com/download.php?view.122

    Da gibts eine ganze Tutorial Serie.


Anmelden zum Antworten