[.NET] BaseAdress herrausfinden.

01/20/2013 20:49 GodHacker#1
Hallo,
ich würde gerne wissen, ob es möglich ist mit .NET (C# oder ggf. VB) die BaseAdress auszulesen (also die, die sich nicht ändert).
Wenn es möglich ist, würde ich mich freuen, wenn es mir jemand erklärt, da die dauernde Suche mit CE nicht gerade schön ist (wenn es nicht geht benutze ich weiterhin CE, aber währe schon schön, wenn es auch "automatisch" geht).

Außerdem habe ich das Problem, dass wenn ich z.B. bei Solitär den Offset mit der BaseAdress addieren will, dass dann eine falsche Adresse/Pointer raus kommt.
(Ich benutze CE 6.2)
Mit einer älteren Version von CE ging es noch... (ist bei 6.2 etwas anders?)


Ich hoffe, dass mir jemand helfen kann.

PS: Ich habe Windows 7 64bit.


*Keiner da ... ?*
01/21/2013 18:24 Jeoni#2
Hey,
die Baseadresse eines Moduls muss nicht immer statisch sein (von kernel32 und user32 mal abgesehen, soweit ich weiß), aber bei dem Hauptmodul (der '.exe') ist sie meist 0x00400000. Jedes Modul kann eine gewünschte Baseadresse in seinem [Only registered and activated users can see links. Click Here To Register...] (das ImageBase-Feld) angeben, die soweit möglich vom Windows Loader (das, was hinter LoadLibrary steht) berücksichtigt wird.
Um unter .net die Baseadresse eines bestimmten Moduls innerhalb eines bestimmten Prozesses herauszufinden, würde ich die [Only registered and activated users can see links. Click Here To Register...] durchgehen, beim korrekten praktisch 'anhalten' und für diesen Prozess die [Only registered and activated users can see links. Click Here To Register...] durchgehen und bei dem gesuchten (kann man ja die Namen einfach vergleichen) die Baseadresse aus dem 'BaseAddress'-Feld der entsprechenden Modulklasse entnehmen.

Zu CE:
Kann es sein, dass du einen Pointer hinzufügst, die Pointerbase die BaseAddress ist und das 1. Offset dann das entsprechenden Offset? Das wäre so wohl falsch, da die ersten Bytes eines Moduls immer 4D5A sind und das ja wohl kaum irgendein sinnvoller Pointer sein kann.

Hoffe, dass ich helfen konnte ;)
Jeoni
01/22/2013 17:49 GodHacker#3
Quote:
Originally Posted by Jeoni View Post
Hey,
die Baseadresse eines Moduls muss nicht immer statisch sein (von kernel32 und user32 mal abgesehen, soweit ich weiß), aber bei dem Hauptmodul (der '.exe') ist sie meist 0x00400000. Jedes Modul kann eine gewünschte Baseadresse in seinem [Only registered and activated users can see links. Click Here To Register...] (das ImageBase-Feld) angeben, die soweit möglich vom Windows Loader (das, was hinter LoadLibrary steht) berücksichtigt wird.
Um unter .net die Baseadresse eines bestimmten Moduls innerhalb eines bestimmten Prozesses herauszufinden, würde ich die [Only registered and activated users can see links. Click Here To Register...] durchgehen, beim korrekten praktisch 'anhalten' und für diesen Prozess die [Only registered and activated users can see links. Click Here To Register...] durchgehen und bei dem gesuchten (kann man ja die Namen einfach vergleichen) die Baseadresse aus dem 'BaseAddress'-Feld der entsprechenden Modulklasse entnehmen.

Zu CE:
Kann es sein, dass du einen Pointer hinzufügst, die Pointerbase die BaseAddress ist und das 1. Offset dann das entsprechenden Offset? Das wäre so wohl falsch, da die ersten Bytes eines Moduls immer 4D5A sind und das ja wohl kaum irgendein sinnvoller Pointer sein kann.

Hoffe, dass ich helfen konnte ;)
Jeoni
Danke für die Erklärung, ich werde es mir mal genau ansehen und alles probieren.

Zu CE:
Oh... ja, das war dann wohl der Fehler (*schäm*)... :D
Hab eben nur eine alte Version aufm PC gehabt und damit auch einige Zeit nicht gearbeitet...