Archief - De topics van lang geleden

Overflow main function

14-02-2008, 15:29 door lieque, 8 reacties
Veel buffer overflow's die geschreven worden worden worden
geschreven vanuit een functie in veel voorbeelden. BV. Zoals
voorbeeld van http://www.linuxjournal.com/article/6701

http://rafb.net/p/wCsJhs69.html

Waarbij de void function gebruikt wordt voor een buffer overflow.
In dit voorbeeld zijn er maar twee buffers waar waarden voor zijn
gedeclareerd. En er dus een crash zou moeten op treden.

Wat veel niet weten is dat main zelf ook een functie is en kwets
baar kan zijn voor overflows. Om een simpel voorbeeld te geven

http://rafb.net/p/Qlweac30.html

Niemand zou verwachten dat ( * main) gedeclareerd zou kunnnen
worden in main zelf. Laat staan dat de pointer weg geschreven zou
kunnen worden in combinatie met int main. Dit zelfde proces
kan je ook toepassen bij een van de meest bekende buffer overflows
van strcpy. Een voorbeeld van strcpy overflow is :

http://rafb.net/p/hmtXzJ25.html

Door dat de pointer van *ptr te groot is onstaat er een buffer overflow.
Dit zelfde type kan je ook toepassen op main. Door main zelf als
functie te gebruiken. En de pointer van main te gebruiken.

http://rafb.net/p/PAUvES92.html

=================================================

Error!
=====
Microsoft visual c++ libary

program c:debugcpp1.c
module:I368
File:I368/chkesp.c
line 42

The value of ESP was not properly saved across a function call. This
is usually a
result of calling a function with one calling convention with a function
pointer
declared with a diffrent calling convention.

(press retry to debug the application)
Reacties (8)
14-02-2008, 15:46 door SirDice
In C heb je heel veel mogelijkheden om jezelf op te knopen.
Helemaal als je met pointers gaat rommelen..

En iedere programmeur weet dat main een functie is die
vanuit de crt gestart wordt.

En "de void function"? Void is geen functie maar een return
value. Of beter een void functie levert geen return value.
Normaliter is de functie main() gedefinieerd om een integer
terug te geven ( int main() { } ).
14-02-2008, 16:04 door lieque
Normaliter is de functie main() gedefinieerd om een integer
terug te geven ( int main() { } ).

Dat was ook de doel van dit topic aan te geven dat main veel meer
functies heeft dan alleen , main () , void main() , int main() of int main
( int argc, char *argv[]){ wat veel in andere applicaties weergegeven
wordt. En in main zelf meer mogelijk is.
14-02-2008, 16:16 door SirDice
Main is een functie net als elke andere. Het enige verschil is is dat de (standaard) bootstrap code die aan je programma gelinkt wordt door de definitie van main() weet waar jouw code begint.

Je kan andere bootstrap code maken en het zo doen dat je programma bij de functie start() begint. Het hoeft niet perse main() te zijn ;)
14-02-2008, 16:37 door lieque
Main is een functie net als elke andere. Het enige verschil is
is dat de (standaard) bootstrap code die aan je programma gelinkt
wordt door de definitie van main() weet waar jouw code begint.

Daarom zo je eigenlijk juist verwachten dat main beter beschermd
zou zijn. Dit is nog zo voorbeeld :

#include stdio.h
#include string.h

char main(char (* a),char b[5]){

a = "This is a stupid sring";
strcpy(a,b);
}
14-02-2008, 17:02 door SirDice
Door lieque
Daarom zo je eigenlijk juist verwachten dat main beter beschermd zou zijn.
Juis niet eigenlijk. Want in C is werkelijk niets "beschermd" en heb je alle vrijheid om jezelf in de voet te schieten.
14-02-2008, 17:42 door lieque
Juis niet eigenlijk. Want in C is werkelijk niets "beschermd"
en heb je alle vrijheid om jezelf in de voet te schieten.

Ja daar kom ik nu ook achter gaat echt een nieuwe dementie open :d
14-02-2008, 18:04 door SirDice
Hehehe.. Ik neem aan dat je dimensie bedoelt of ben je nu al aan het dementeren?

Maar goed, juist door deze vrijheid kun je bijna alles doen. Ook te kleine buffers maken en daar veel te veel data in stoppen ;)
14-02-2008, 18:19 door lieque
Hehehe.. Ik neem aan dat je dimensie bedoelt of ben je nu al
aan het dementeren?

Jah bedoelde demensie. Maar inderdaad das nog een nieuw
concept kleine buffers maken.
Reageren

Deze posting is gelocked. Reageren is niet meer mogelijk.