Andere Programme "manipulieren"

Tobias K.

Erfahrenes Mitglied
moin


Ich beschäftige mich zur Zeit damit, den Speicher anderer Programme zu manipolieren.
Also z.B. den Wert einer bestimmten Variable eines anderen Programms zu verändern.

Das geht aber mit der Methode nur wenn ich die adresse der Variable kenn, wie gehe ich im Prinzip vor wenn ich nur den Wert der Variable weiss?


mfg
umbrasaxum
 
Hm, das wird sowieso schwer, heutzutage läuft das meiste im Protected Mode, da kannst du gar nicht auf Speicher zugreifen, der nicht zu deinem Programm gehört.
Möglichkeiten, das zu umgehen, kenne ich nicht, außer den Prozess per LoadLibrary für dich zugänglich zu machen, es gibt aber sicher noch weitere.

Und wenn du nur Werte einer Variablen kennst, dann ist die einzige Möglichkeit, den Speicher zu durchsuchen.... das würde ich an deiner Stelle nicht machen.
 
moin


Ich hätte dazu nochmal sagen sollen das ich das schon gemacht hab und es ist nciht schwierig die nötigen Rechte dafür zubekommen, eigentlich isses ein Kinderspiel!

Ja speicher durchsuchen das verfahren ist mir bekannt, auch wie man eingrenzen kann wo man suchen muss. Auch kein großes ding!

Dachte mehr an sowas das ich in den Programmcode des fremden Programm gehe und dort gucken wie die Variable heisst oder irgendwas in der Art, weiss es ja auch nicht.


mfg
umbrasaxum
 
Im Programmcode eines fremden Programms stehen keine Variablennamen mehr.
Die verschwinden bei der Compilation.

Achja nebenbei: kannst ja auch gleich schreiben, wie du die nötigen Rechte bekommen hast.
 
Zur Laufzeit tauchen überhaupt keine Namen mehr auf.
Zur Laufzeit wird nur noch mit Offsets und Speicheraddressen gearbeitet.
Normalerweise wird es (grob) so geregelt: Globale Variablen erhalten eine Programm-globale Addresse (welche schon zur Kompilationszeit bekannt ist), lokale Variablen erhalten einen Offset zum ebp-Register, welches auf eine Stelle im Stack zeigt. Bei Betritt einer Funktion wird ebp gesichert, dann neu zugewiesen.

Wenn ich noch näher beschreibe, bringt dir das auch nichts, dafür müsstest du mit Assembler umgehen können.
 
Jo, die Programmierer von denen ham sich die Spiele disassembliert, dann den Assembler-Code ganz genau angeschaut und dann daraus gefolgert, an welchen Stellen sie etwas manipulieren können.
Aber was meinst du, warum es relativ wenige Trainer gibt? Es ist schwer, das zu tun.

Erstmal musst du dafür Assembler schreiben und Lesen können und wenn du soweit bist,
versuch mal ein Programm in Assembler zu verstehen, erstmal ein kleines selbstprogrammiertes, dann mal ein größeres eigenes oder irgendwann mal ein fremdes (wo du selbst einen Ablauf, Sinn erkennen musst).....
 
Naja die alten Trainer waren ja zu Amiga Zeiten ziemlich "primitiv" . Die Speicherbereiche überwacht und wenn ein Leben verloren wurde , wurden halt die Unterschiede untersucht und wenn man clever ist findet man relativ schnell wo sich die Information für die Anzahl Leben befindet.

Wie kann man den Speicher eines anderen Prozesses lesen ? Ich bräuchte das weil ich mir ein Visual Studio Plug IN geschrieben habe dass den Speicherbereich zeichnet aber das ist ziemlich unperformant, da ständig einzelne array Werte über die COM Schnittstelle abgefragt werden müssen ... und wenn ich den Speicher direkt lesen könnte wäre das perfekt
 
Zurück