den RAM von Anfang bis Ende auslesen



  • Hallo zusammen, einige von euch kennen bestimmt die cheatengine.

    Folgender Abschnitt ist für alle die nicht wissen was die Cheatengine ist:
    Mit ihr kann man sich bei z.B. Spielen Geld cheaten. Man gibt ein wie viel Geld man hat, das Programm sucht dann den RAM nach diesem Wert ab und zeigt alle Adressen des RAMs mit diesem Wert an. Anschließend macht man etwas im Spiel dass man mehr oder weniger Geld als zuvor hatte und gibt dann wieder ein wie viel man hat. Das Programm sucht wieder unter den Speicheradressen die bereits vorher das den richten Wert hatten die heraus, welche jetzt wieder den richten Wert haben. Diese Prozedur wiederholt man bis man nur noch eine Adresse angezeigt bekommt. Dann kann man den Wert dieser Variablen verändern und sich so Geld cheaten.

    Nun möchte ich zu Übungszwecken ein Programm mit der selben Funktion machen. Da man aber glaube ich ziehmlich was kaputt machen kann wenn man im RAM rumpfuscht frage ich lieber nochmal nach.

    Grundlegend denke ich ist das keine allzuschwere Aufgabe, das einzige wo ich nicht genau weis (und auch bis jetzt nichts im Internet dazu gefunden habe) ist:
    Bei welcher Adresse fängt der RAM an und wie kann ich überprüfen ob der Zeiger am Ende des RAMS ist? Und ist das Überhaupt nötig das zu überprüfen? Und welche Risiken habe ich zu erwarten bei so einem Programm? Und liege ich irgendwo falsch in dem was ich geschrieben hab?

    Danke schon mal für jede Hilfe,
    MfG, multipilz5. 🙂


  • Mod

    Du kannst nichts versehentlich kaputt machen, denn deine Vorstellung ist total falsch. Jeder Prozess hat seinen eigenen Speicher, aus dem er nicht ohne spezielle Rechte heraus kann. Wenn dein Prozess die nötigen Rechte hat und weiß, welchen Prozess er untersuchen/manipulieren möchte, dann kann er dessen Speicher tatsächlich anfassen und dabei diesen anderen Prozess auch total kaputt machen.

    Wie das im speziellen geht, das kommt auf das jeweilige Betriebssystem an, denn Prozesse, deren Speicher, und Rechteverwaltung sind allesamt dessen Aufgabenbereich.



  • Also ich bin wirklich noch nicht sehr erfahren im Programmieren (bemerkt man vielleicht) aber in allen c++ Büchern die ich gesehen habe heißt es, dass man mit Pointern auf RAMbereiche zeigen kann, die nicht zu dem Programm gehören und sie so auch verändern kann, was for-schleifen mit Pointern die in- oder dekrementiert werden sehr gefährlich macht.

    Ausprobiert habe ich das genau deswegen nicht... korrigiert mich wenn ich falsch liege aber für mich hört sich das so an als könnte ich einen Zeiger durch den RAM laufen lassen und bei einem treffer über den Zeiger den Wert verändern kann.
    Oder nicht 😕


  • Mod

    Was erwartest du jetzt als Antwort? Natürlich hast du Unrecht und was auch immer du zu beobachten gemeint hast, hast du offensichtlich falsch interpretiert. Wie kommst du darauf, dass die Zeiger, deren Werte du verändert hast, nicht auf Speicher von deinem eigenen Prozess zeigen würden?

    Was du beschreibst gibt es seit über 20 Jahren nicht mehr.



  • Alles klar...
    Die cheatengine gibt es aber ja, das ist eine Tatsache. Also muss es ja irgendwie gehen. Nicht unbedingt mit Zeigern, aber es geht.
    Wie könnte die cheatengine das bewerkstelligen? (Ich erwarte jetzt keine codes aber es wäre cool wenn jemand eine grundlegende funktionsweise schildern könnte, die das möglich macht)



  • Liest du die Antworten eigentlich?





  • Ich habe schon verstanden dass der Prozess (nur) wenn er die Rechte dazu hat auch auf andere Speicherbereiche zugreifen kann als nur seinen eigenen. Aber wo ist festgelegt was für Rechte ein Prozess hat?


  • Mod

    multipilz5 schrieb:

    Aber wo ist festgelegt was für Rechte ein Prozess hat?

    manni66 schrieb:

    Liest du die Antworten eigentlich?

    SeppJ schrieb:

    Wie das im speziellen geht, das kommt auf das jeweilige Betriebssystem an, denn Prozesse, deren Speicher, und Rechteverwaltung sind allesamt dessen Aufgabenbereich.



  • Tut mir leid. Ich korrigiere: Wo ist das bei Windows (10) festgelegt?



  • multipilz5 schrieb:

    Tut mir leid. Ich korrigiere: Wo ist das bei Windows (10) festgelegt?

    kommt auf deinen benutzer an 😉

    hoff das hilft 🙄
    lg



  • Ich fürchte, das ist nicht ganz so einfach.
    Eine Lösung könnte sein, eine DLL in den zu untersuchenden Prozess zu laden (Stichwort DLL Injection), die dann entsprechende Windows Funktionen aufruft (GetProcessHeaps, HeapWalk, etc.) und die Ergebnisse an den aufrufenden Prozess weiterreicht.



  • So kannst du unter Windows die genutzten Speicherbereiche rausfinden:

    https://github.com/KN4CK3R/ReClass.NET/blob/master/NativeCore/Windows/EnumerateRemoteSectionsAndModules.cpp


Anmelden zum Antworten