BaseAddress von Prozess



  • Guten Abend 🙂

    ich möchte ein Programm schreiben, dass aus einem Spiel (Heroes of Newerth) Werte ausließt, nämlich sowas wie Level, Gesundheit etc.
    Mit der CheatEngine bekomme ich auch - wer hätts gedacht - die Adressen raus, aber die ändern sich ja, sobald man das Spiel neu startet.

    Meine erste Frage wäre: Sind die Adressen iwie (Prozessintern) statisch?
    Wenn das so wäre, könnte ich die ja berechnen, indem ich die BaseAddress von der Adresse der Variable abziehe (?)

    Und zweitens: Wie bestimme ich die BaseAddress, also die Adresse im Speicher, wo der virtuelle Prozessspeicher beginnt?

    Danke schön im Voraus!
    DerCoder



  • Erster Schritt in Cheat Engine: Gucken, ob man Adressen/Werte in grün findet, die sind statisch. Dann nur das offset merken (addr-modBase) und beim Prozessstart modBase+offset=addr.

    Für die Modulbasisadressen gibt es /BASE für den Linker, aber wenn das ein Spiel ist, kannst du ja nix bauen. Im Nachhinein ändern, kA, da müssten glaube ich sämtliche in irgendeiner Art damit zusammenhängende Werte geändert werden, vllt. kann das irgendein PE Editor.
    Dürfte aber auch vollkommen unnötig sein.



  • Okay super, danke!

    Und die Werte kann ich dann über DLL-Injektion ändern, ne? Dann brauch ich die modBase gar nicht oder?

    EDIT: Und wenn keine der Adressen grün ist, dann heißt das, ich kann keine auslesen bzw. muss aufwendige Suchverfahren anwenden um die Adresse zu finden? 😞



  • Wenn du deine DLL in den Prozessraum holst, kannst du (wenn der Speicherbreich für dich accessible ist) direkt die Werte ändern (*pointer = newVal), ansonsten (von einem anderen Prozess aus) mit WriteProcessMemory(). Die modBase brauchst du in jedem Fall, sie gibt doch an, in welchem Modul der Wert steckt...

    zB. hups.dll auf 0x10000000 und gewünschter Wert bei 0x100E9730 gefunden.
    Beim Start die base von hups.dll holen (könnte sich ja verschoben haben, zB. nach 0x74C09000), 0xE9730 hinzuaddieren, fertig.

    Keine grünen Werte... je nach Wert vllt. noch andere Optionen, bei float "value between", generell die "writable, executable, copyonwrite" auf grey, also "dont care if". Fast Scan abschalten. Vllt findest mehr.

    Ansonsten den Eintrag doppelklicken in die Liste runter. Rechtsklick "Pointer scan for this address" probieren, vllt. findest du einen statischen Zeiger auf die dynamische Adresse (kann aber auch ne größere depth erreichen, zB staticPtr->dynPtr->dynPtr->dynAddr).
    Oder "Find out what accesses this address" um den Code zu sehen, dann findet man vielleicht mehr heraus, was mit der Adresse so passiert. Für Assembler-view empfehle ich aber OllyDbg.



  • Das führt leider auch zu nichts 😞 Keine grünen Werte.
    Heißt das, dass ich meinen Plan vergessen kann? ^^



  • Äh, der letzte Absatz beschreibt doch, was du dann tun sollst...



  • Vllt hilft dir das weiter: http://www.c-plusplus.net/forum/294706



  • Ich kriegs nicht hin 😞



  • Tja, erfordert halt Übung 😛
    Kann dir ne teamviewer session anbieten, um dir was zu erklären, allerdings nicht kostenfrei 😉



  • Meld dich mal bitte per PN bei mir 🙂



  • Das betreffende Spiel ist doch ein Onlinespiel? Wenn die Programmierer dessen auch nur die geringste Ahnung gehabt haben, dann verwaltet eh der Server deine Lebenspunkte und das was Dir da angezeigt wird dient nur deiner Information. Es würde also gar nichts bringen an den Werten was zu ändern.



  • DerCoder schrieb:

    Meld dich mal bitte per PN bei mir 🙂

    Sry aber bin nicht registriert.



  • Ich möchte an den Werten ja auch gar nichts ändern. Ich möchte sie auslesen.
    Je nachdem, wie viel Leben mein Held dann hat (prozentual) sollen dann unterschiedliche Aktionen geschehen (bei 10% oder weniger läuft er zurück ins Lager).

    Wenn ich das alles auslesen könnte und vielleicht noch wüsste, wie ich Mausklicks an bestimmten Punkten in dieser Welt/diesem Level mache, dann würd das sogar noch was werden 😛

    @Hi Tja, dann kann man wohl nichts machen ...



  • Du sag mal, falls du das hier lesen solltest ...
    Ist dein angebot noch zu haben? Könnte deine hilfe gebrauchen und würde auch dafür zahlen 🙂



  • Ich hab dir auch mal eine PN geschrieben. Momentan hab ich Tagsüber nicht so viel zu tun.

    Geld will ich nicht haben. (Wenn du was überhast dann nehm ich es jedoch gerne.^^)


Anmelden zum Antworten