Startadresse eines Programmes ermitteln für Game Bot
-
Ich suche nach einer Funktion in der WinAPI, in der ich die Startadresse eines Programmes ermitteln kann.
Ich benötige diese Adresse, da ich dadurch ermitteln kann in welcher relativen Position z.B. der Wert der Lebensanzeige, steht.
Kann mir jemand einen Tipp geben?
-
Die Base-Address eines Programmes ist unter Windows normalerweise 0x400000 (genau 4 MB).
Allerdings ist die Base-Address bei vielen Spielen nicht ausreichend um irgendwas im Speicher anzufinden.
-
GetModuleHandle(0)?
-
Ich glaube er will die Base-Address eines anderen Prozesses ermitteln.
-
Jo, OllyDbg zeigt als Base jeder beliebigen .exe 0x400000 an. Aber was heißt das eigentlich? Und warum können mehrere laufende Prozesse die gleiche .exe Base haben?
Ist das die Adresse relativ zum virtual space des Prozesses? Und wie findet man raus, wo der virtual space des Prozesses beginnt?
-
Dass alle Programme die gleiche Base-Address liegt daran, dass alle Programme ihren eigenen virtuellen Adressraum haben. Die physikalischen Adressen sind natürlich unterschiedlich. Allerdngs hast du die Möglichkeit, mit Funktionen wie WriteProcrssMemory den Speicher anderer Prozesse zu manipulieren.
MfG, Jochen
-
und warum geht das jetzt auf einmal so?
In nem anderen thread hieß es noch groß, dass es nicht geht, weil es unter vista kernel imagebase randomation gibt. Also nicht immer bei 400000
-
http://msdn.microsoft.com/de-de/magazine/cc337897.aspx#S4
Image Randomization (/DynamicBase)
Windows Vista und Windows Server
2008 unterstützen Image Randomization. Das bedeutet, beim Systemstart werden Betriebssystemabbilder im Speicher nach dem Zufallsprinzip verschoben. Der Zweck dieses Features besteht darin, die Vorhersagbarkeit zu verringern und damit Angriffe zu erschweren. Dies wird auch Address Space Layout Randomization (ASLR) genannt. Wenn ASLR von Nutzen sein soll, müssen Sie außerdem DEP aktivieren.
Standardmäßig schiebt Windows
nur Systemkomponenten hin und her. Wenn das Abbild vom Betriebssystem verschoben werden soll (ausdrücklich empfohlen), dann sollten Sie eine Verknüpfung mit der /DynamicBase-Option herstellen. (Diese Option ist im Toolset von Visual Studio 2005 SP1 und höher verfügbar.) Bei der Verknüpfung mit der /DynamicBase-Option gibt es einen interessanten Nebeneffekt: Auch der Stapel wird vom Betriebssystem zufällig angeordnet, was dazu beiträgt, die Vorhersagbarkeit zu verringern. Damit wird es Angreifern wesentlich erschwert, ein System erfolgreich zu beeinträchtigen. Beachten Sie, dass auch der Heap in Windows Vista und Windows Server 2008 zufällig angeordnet wird. Dies geschieht dort jedoch standardmäßig. Es besteht keine Notwendigkeit der Kompilierung oder Verknüpfung mit besonderen Optionen.
-
Module iterieren und die Basisadresse des Hauptmoduls (*Name*.exe) auslesen.
http://msdn.microsoft.com/en-us/library/ms686832(VS.85).aspx
Guckst du hier.
-
@geeky:
1. Der Artikel ist miserabel ins deutsche übersetzt...
2. Ab VS2008 wird für jedes Image das /DYNAMICBASE per default aktiviert; und somit werden auch alle EXE/DLLs randomized
-
Danke für die Hilfe http://msdn.microsoft.com/en-us/library/ms686849%28v=VS.85%29.aspx hat mir geholfen.