Quote:
Originally Posted by Juppi2000
wie kann es sein das mit einem Paket von aussen den WM down bringt
|
Durch nen Bufferoverflow? Beim WM kann ich mir nen Heap-Überlauf sehr gut
vorstellen. "Heap-Overflow" ist ein Bufferoverflow, der auf dem dynamischen Speicher stattfindet. Speicher auf dem Heap wird zugewiesen, wenn Programme dynamischen Speicher anfordern, z.B über malloc() in C++.
Wird in diesen Puffer ohne überprüfung der Länge etwas geschrieben und ist die Datenmenge größer als die Größe des Puffers, so wird darüber hinausgeschrieben und es kommt zum Overflow. Das resultat:
ACCESS_VIOLATION -> App Crash.
Schau dir z.B Offi Fiesta an. Es gibt immernoch Spieler, die wegen einem
Unicode Character aus dem Kanadian Letter Pack crashen. Der grund ->
Bufferoverflow. Wärend die normalen Zeichen aus dem UCS-2, also die ersten
256 von 65.536 mit 8 Bytes kodiert werden, werden die restlichen Zeichen
mit 16 Bytes kodiert. Demnach verbraucht ein Unicode Zeichen 1 Byte
mehr Speicher, was bei einer fehlerhaften oder nicht vorhandenen
überprüfung zum Bufferoverflow führt.
Quote:
Originally Posted by Juppi2000
Wie und wo fixt man dieses?
|
Gibt mehrere möglichkeiten.
Entweder den WM nachschreiben und ne überprüfung einbauen oder
du schreibst ein Prog, welches als Proxy dient, dass die Pakets
überprüft und an den WM weiterleitet. Daher, ein zwischenprogram
welches die ein/ausgehenden Pakets überprüft und bei entsprechenden
Exceptions etwas anderes macht.
Daher läuft alles erst durch den Proxy und wird nicht direkt an den WM
gesendet.
Die andere möglichkeit wäre, die betreffende Stelle im WM zu finden
und per Inline-Assambler zu patchen.
Quellen zum besseren verstehen:
http://de.wikipedia.org/wiki/Puffer%C3%BCberlauf
http://de.wikipedia.org/wiki/Dynamischer_Speicher