Speicher manipulation



  • Hy,
    ich versuche gerade einen Trainer für mich, für spiele zu erstellen.
    Da ich dafon überhaupt keine ahnung habe/hatte. Hab ich mich in den letzten tagen via msdn / code-project & tutorials darüber etwas schlauer gemacht. Mittlerweile dreht sich mir aber der kopf und ich weis nicht mehr weiter.

    Ich hab es geschaft das wenn ich eine Addresse einer Variablen in einem Programm hab das ich diese im Speicher Auslesen und verändern kann. Leider ist es aber in spielen oft so, das sich die Adressen der Variablen schon zur laufzeit des spiels ändern.
    Die Adressen hab ich mir alle mit verschiedenen Tools wie TSearch / Cheat Engine oder wie sie alle heisen rausgesucht und es sind jedesmal die selben Adressen.

    Laut einiger Tutorials die ich gelesen hab, heist es, das wenn man die addresse der variable hat, die man verändern möchte, man nach der Addresse (die die funktion enthät) suchen muß, die auf die Addresse schreibt. Hier liegt dann auch mein problem. Dieser weg zäumt das pferd von hinten auf.

    Mein problem ist das ich die Funktionaddresse kenne die auf die gesuchte Addresse schreibt. Ich aber bisher keine Info darüber gefunden habe wie ich über die Funktionsaddresse an die gesuchte Addresse komme.

    weis da jemand rat?



  • Was genau hast du vor?
    Du möchstest dir also einen "Cheat" schreiben, der dir z.B. 1000 Gold oder 100% Health gibt, oder?

    Bevor du damit anfängst - schau erst mal, wie du in den Adressraum eines anderen Programmes schreiben kannst ...



  • Danke für den hinweis aber

    Ich hab es geschaft das wenn ich eine Addresse einer Variablen in einem Programm hab das ich diese im Speicher Auslesen und verändern kann. Leider ist es aber in spielen oft so, das sich die Adressen der Variablen schon zur laufzeit des spiels ändern.
    Die Adressen hab ich mir alle mit verschiedenen Tools wie TSearch / Cheat Engine oder wie sie alle heisen rausgesucht und es sind jedesmal die selben Adressen.



  • Wo war jetzt die Frage?



  • Meine Frage ist:
    Wie bekomme ich von der Funktionsaddresse raus auf welche Addresse(Variable) die Funktionsaddresse schreibt.

    Zum besseren verständniss:
    Funktionsaddresse:
    Damit meine ich die Addresse(im Speicher), die die Funktion enthält die zb. die Munitionvariable bei jedem schuß im eines runter setzt.

    Addresse(Variable):
    Ist zb. die Munitionvariable von dieser Addresse lesen andere Funtionen und zeigen dann auf dem bildschirm an wieviel schuß man noch im Magazien hat.



  • Disassemblieren und schauen wie der Befehl aussieht... abhängig davon kann es einfach oder etwas komplexer sein...



  • hmm und wie geh ich da vor?
    auser das Disassembler eine Maschinensprache ist weis ich jetzt nicht allzuviel darüber.



  • LowFly schrieb:

    hmm und wie geh ich da vor?
    auser das Disassembler eine Maschinensprache ist weis ich jetzt nicht allzuviel darüber.

    Ich will nicht böse sein - aber du weißt nix darüber.

    Disassemblieren ist der Vorgang MaschinenCode wieder in einigermaßen lesbaren AssemblerCode zu bringen.



  • Ich will nicht böse sein - aber du weißt nix darüber

    bist du aber weil ich schon von mir aus darauf hingeweisen hab

    Da ich dafon überhaupt keine ahnung habe/hatte. Hab ich mich in den letzten tagen via msdn / code-project & tutorials darüber etwas schlauer gemacht.

    und ich glaube nicht das es nötig ist es nochmal zu betohnen das ich darüber nix (o. nur sehr wenig) weis.

    ich bin ja gerne bereit mir helfen zu lassen, aber viel hilfe kam ja bis jetzt von dir nicht. 😉



  • LowFly schrieb:

    ich bin ja gerne bereit mir helfen zu lassen, aber viel hilfe kam ja bis jetzt von dir nicht. 😉

    3:0 für dich. Entschuldige mein Verhalten.



  • vergeben & vergessen 😉



  • Ok, jetzt mal wie man es machen könnte.
    Du musst den Code von dem Spiel dissassemblieren. (Wird schon schwer, wenn das auf verschiedene DLLs aufgeteilt wird.)
    Wenn sie die Symboltabelle rausgeschmissen haben -> Pech.
    Sonst -> Gut.

    Dann musste das Spiel eben mit einem Debugger starten und "spielen".
    Wenn du dann im Spiel ein Hausbaust und dafür 100Gold zahlen musst, dann wird vll. im Code ein call 0x2382347 stehen.
    Davor wird vll. ne -100 auf den Stack geschoben.
    Damit ruft das Spiel dann seine "aktualisiere Geldbestand"-Funktion auf.

    Wenn die Symboltabelle noch drin ist, dann könntest sogar einen Namen erwisschen.



  • hmm, ich hab jetzt mal was über disassembler gelesen und diesbezüglich etwas schlauer.

    ich bin über einen Artikel auf Code-Project gestollpert. Wenn ich das richtig verstanden hab, hat jede function einen Stack in dem die Werte stehen wohin was geschrieben wird.

    hab ich das richtig verstanden wenn ja dann wäre das ja schonmal eine Antwort.

    nur wirft das zugleich aber die frage auf wie kommt man an den Stack der Funktionsadresse?


Anmelden zum Antworten