Zwei Computer über das Internet miteinander verbinden

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Kaeru Gaman hat geschrieben:DANKE!
Np :wink:
das bedeutet aber ja im gegenzug, dass wenn ich meinen buffer im Datensegment habe,
das keine execute-rechte besitzt, ein buffer-overflow mir nichts anhaben kann,
jedenfalls kein code zur ausführung kommen kann... oder?
Das ist richtig. Aber ist es nicht so, dass heutzutage (durch das Flat-Model) Daten- und Code-Segment zu einem Segment verschmolzen sind? Mir ist so.
Mehrere Segmente kenne ich nur von DOS-Programmen.
besser auf jeden fall sauber begrenzen. :allright:
Jo :allright:
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Benutzeravatar
Eric
Beiträge: 303
Registriert: 05.09.2004 09:50
Wohnort: Göttingen

Beitrag von Eric »

In einer c't gab es einen Artikel zu dem Thema. (Ich weiß leider nichtmehr in welcher Außgabe)

Das ganze funktioniert, weil die lokalen Variablen auf dem Stack abgelegt werden
und der Stack von 'oben' nach 'unten' wächst.

Erst kommen die Parameter, dann die Rücksprungadresse, evtl. noch einige
gesicherte Register und danach die lokalen Variablen.

So kann die Rücksprungadresse überschrieben und dadurch beliebiger Code
ausgeführt werden.


Mal ein Beispiel:

Code: Alles auswählen

Procedure Test(a,b)
  Dim Buffer.b(100)
  ReceiveNetworkData(a, @Buffer, b)
EndProcedure
Der Stackaufbau innerhalb von Test()
(Die Adressen der Elemente nehmen nach unten ab, d.h. der Buffer liegt
vor der Rücksprungadresse im Speicher.)

Code: Alles auswählen

Parameter B
Parameter A
Rücksprungadresse
(gesicherte Register ebp...)
Buffer
Solange b<=100 ist, ist alles ok, aber wenn b>100 ist, werden erst die
gesicherten Register überschrieben und danach die Rücksprungadresse.
Wenn die Rücksprungadresse überschrieben ist,
kehrt ProcedureReturn nicht an die Stelle von wo die Prozedur aufgerufen wurde
zurück, sondern Springt an die manipulierte Adresse.
Das Programm kann dann durch einen ungültigen Speicherzugriff abstürzen
oder aber etwas ganz anderes ausführen.

Wobei ich mir nicht sicher bin, ob Dim überhaupt lokale Variablen auf dem Stack ablegt.
El_Choni_work: cant't you just spit the binary data to sqlite, as you would spit a hamster into a microwave oven?
* Fangles falls off the chair laughing
Bild
Benutzeravatar
DataMiner
Beiträge: 220
Registriert: 10.10.2004 18:56

Beitrag von DataMiner »

Nur mal so ein Tipp am Rande: Hamachi oder i2p
http://de.wikipedia.org/wiki/Hamachi
http://de.wikipedia.org/wiki/I2P

VNP's leichtgemacht.
__________________________________________
Weniger glauben - mehr wissen!
------------------------------------------------------
Proud beneficial owner of SpiderBasic, PureBasic 3.x, 4.x, 5.x and PureVisionXP
Benutzeravatar
PBZecke
Beiträge: 399
Registriert: 02.09.2004 17:34

Beitrag von PBZecke »

Erstmal Danke an alle für die informativen Beiträge!

Was ich letzten endes daraus entnehmen kann ist, dass ich es besser sein
lasse. Um das einigermaßen sicher zu machen, müsste ich mich mehr mit
dieser Materie befassen, da dies meine derzeitigen Fähigkeiten
überschreiten würde. :cry: Dies würde auch den Aufwand nicht lohnen, da ich
von Anfang an keine kommerzielle Verwertung diesbezüglich in Betracht
gezogen hatte.
Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... :lol:
Antworten