Laden...

Änderung eines Wertes im fremden Programm führt zu Programmabsturz

Letzter Beitrag vor 12 Jahren 5 Posts 867 Views
Thema geschlossen
Änderung eines Wertes im fremden Programm führt zu Programmabsturz

Hallo c#-community,

also ich experimentiere immer noch mit dem Ändern von Werten in anderen Programmen herum. Dies klappt auch bei den meisten Werten problemlos (Verwendung von read- und writeprocessmemory). Es gibt aber auch Werte bei denen entweder die Änderung nur temporär sind oder bei denen es zu Programmabstürzen des fremden Programmes führt.

Wieso können einige Werte nicht dauerhaft geändert werden oder führen zu Programmabstürzen? Wie Adressen für die Werte im Programm sind schlüssig mit CE ermittelt worden.

Welche Möglichkeiten gibt es noch, um solche Adressen erfolgreich beschreiben zu können?

MfG
mirrowwinger

Die Adressen der Werte sind bei jedem Programmneustart anders. Das hat mit der Verteilung im Arbeitsspeicher zu tun. Deswegen gibt es Pointer (und auch Pointer auf Pointer), die auf die Addressen "pointen". Diese Pointer kann man auch mit CE rausfinden (mach am Besten mal das Tutorial). Darüber kann man sich dann die eignetliche Addresse ableiten. Siehe dazu auch:
Variable in fremden Prozess ändern, obwohl diese bei jedem Start an anderer Adresse liegt

UZI

Es stürzt ja schon ab, wenn ich in CE die Adresse erittelt habe und über CE den Wert ändern will. Das mit den variablen Speicheradressen hast du natürlich auch recht, aber so weit bin ich bei diesen beiden Arten von Werten noch gar nicht.

Also manche Programme (z.B. Spiele oder Antivir-Programme) haben eine Sicherung dagegen. Wie man die umgeht, oder was es da noch für Möglichkeiten gibt weiß ich nicht (ev. CE mit Adminrechten ausführen). Oder du hast eine falsche Variable geändert, (was ich aber nicht glaube)

Hallo mirrowwinger,

das ein Programm abstützen kann, wenn sein Speicher manipuliert wird, ist doch klar. Nur mal ein einfaches Beispiel.

for (int i = 0; i < list.Count; ++i) {
   // hier
   list [i] = i;
}

In diesem Code, ist sichergestellt, dass der Index i immer im gültigen Bereich liegt. Bei einem normalen, ungestörten Ablauf kann also keine IndexOutOfRange auftreten.

Wenn nun allerdings der Wert von i an der Stelle "hier" von einem fremden Programm auf einen zu hohen oder negativen Wert geändert wird, dann knallt es.

Ähnliches bzw. schlimmeres gilt, wenn z.B. Rücksprungadressen auf dem Stack geändert werden.

Kurz gesagt kann man offensichtlich allen möglichen Mist machen, wenn man im Speicher eines anderen Programms herumändert. Wenn man es richtig machen will, muss man üblicherweise das fremde Programm und seine Arbeitsweise genau kennen. Das ist allerdings normalerweise ausgesprochen schwierig.

Das Änderungen evtl. nur temporär sind, sieht man auch leicht am Beispiel. Wenn man bei "hier" den Wert von i auf 0 zurücksetzt, ist das offensichtlich nicht von Dauer. Mal abgesehen davon, dass sich z.B. Spiele möglicherweise sogar gegen Speichermanipulationen zu schützen versuchen, indem sie Werte mehrfach ablegen und wenn sich nur einer davon ändert, auf die ungeänderten Werte zurückgreifen.

Bitte verwende die Manipulation von fremden Programmen nicht zu rechtswidrigen oder sonstigen unlauteren Zwecken.

herbivore

Thema geschlossen