Speicher manipulation



  • 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