Erhalte die Basisadresse des Prozesses

9

Ich möchte auf eine bestimmte Adresse eines Prozesses zugreifen. Aber dafür muss ich zuerst die Basisadresse des Prozesses bekommen. Ich benutze ein Tool, um zu sehen, ob ich es richtig mache. Das Werkzeug zeigt, dass ich folgendes brauche: "app.exe"+0x011F9B08 = 0x119F8300

Ich dachte, ich könnte die Basisadresse eines Prozesses durch OpenProcess() erhalten, aber das gibt mir: 0x0000005c als Ergebnis. Ich denke nicht, dass das richtig ist? Atleast, nicht was ich brauche.

Ich denke, die Basisadresse, die ich brauche, ist: 0x119F8300 - 0x011F9B08 = 0x107FE7F8 <-- base?

Das ist mein Code:

%Vor%

Wie bekomme ich die Basisadresse des Prozesses, den ich geöffnet habe?

    
Vivendi 22.01.2013, 20:15
quelle

2 Antworten

5

Wenn Sie die virtuelle Adresse im Adressraum des anderen Prozesses erhalten möchten , können Sie das folgendermaßen tun:

  1. Öffnen Sie den Prozess mit OpenProcess - Bei Erfolg ist der zurückgegebene Wert ein Handle für den Prozess, bei dem es sich um ein undurchsichtiges Token handelt, das vom Kernel zur Identifizierung eines Kernel-Objekts verwendet wird. Sein exakter ganzzahliger Wert (in Ihrem Fall 0x5c) hat keine Bedeutung für Programme im Benutzerbereich, außer um ihn von anderen Handles und ungültigen Handles zu unterscheiden.
  2. Rufen Sie GetProcessImageFileName auf Nennen Sie den Namen des ausführbaren Hauptmoduls des Prozesses.
  3. Verwenden Sie EnumProcessModules Aufzählung der Liste aller Module im Zielprozess.
  4. Rufen Sie für jedes Modul GetModuleFileNameEx , um den Dateinamen abzurufen und ihn mit dem Dateinamen der ausführbaren Datei zu vergleichen.
  5. Wenn Sie das Modul der ausführbaren Datei gefunden haben, rufen Sie GetModuleInformation , um den rohen Einstiegspunkt der ausführbaren Datei zu erhalten.

Dies wird Ihnen die virtuelle Adresse geben, aber es gibt nicht viel, was Sie damit tun können, da es nicht in den Adressraum Ihres aktuellen Prozesses eingeordnet ist.

    
Adam Rosenfield 22.01.2013, 20:34
quelle
3

Ich wollte etwas über @Adam Rosenfields Antwort herausfinden. Ich werde hier League of Legends als Beispiel verwenden.

Um den Prozess zu öffnen (Getting a handle) benötigen wir die PID (Process ID). Wir können das über ein Fenster-Handle (HWND) tun, weil normalerweise der Titel des Fensters bekannt ist.

%Vor%

Jetzt, wo wir in der Lage sind, den Prozess in den Griff zu bekommen, machen wir weiter mit

%Vor%

Die GetModule-Funktion

%Vor%

wie für mich persönlich Ich mag es, zwei separate Funktionen zu schreiben, um einen Griff zu bekommen und einen, um das Modul zu bekommen.

Da gehen wir, haben wir erfolgreich die Basisadresse eines fremden Prozesses bekommen.

    
user5166622 08.08.2015 15:24
quelle

Tags und Links