Voici le code incriminé :
#include <stdio.h> int main( void ) { for(;;) { printf( "Hung up\t\b\b\b\b\b\b" ); } return 0; }Ce programme est tellement simple que planter un OS avec ça, c'est vraiment stupéfiant !
Aller plus loin
- Windows Developper Journal (46 clics)
# vieux
Posté par Emmanuel Blindauer (site web personnel) . Évalué à 10.
ca ne marche pas toujours mais ca fait rebooter la machine aussi.
Pareil pour une fenetre cmd.exe avec dedans des actions réseaux (style un ping ) et un bourrinage de la touche F7
bref ca montre que la segmentation memoire c'est toujours pas ca dans ce systeme
[^] # Re: vieux
Posté par pasBill pasGates . Évalué à 4.
Ils font appel a une fonction en mode kernel, qui elle a un bug, d'ou le crash.
[^] # Re: vieux
Posté par Jean-Yves B. . Évalué à 3.
Quelle fonction du noyau ça pourrait être ?
À part write et exit il n'y a pas beaucoup d'appels noyau apparents (à part le fork/exec implicite au lancement du programme et les inits de bibliothèques). Je dis ça, je ne dis rien, je ne suis pas familier de l'environnement d'exécution NT.
[^] # Re: vieux
Posté par pasBill pasGates . Évalué à 3.
- Entre l'appel a printf, et l'affichage des caracteres a l'ecran tu passes par plein de couches
- Pour afficher un pixel a l'ecran, faut que tu passes par le kernel a un moment ou un autre
- Quand certaines fonctions du kernel sont appelees par des fonctions jugees "sures", elles ne verifient pas les parametres et ecrivent ou on leur dit d'ecrire, car c'est a la fonction appelante de faire le boulot de verif(ca fait moins de boulot cote kernel).
[^] # Re: vieux
Posté par pasBill pasGates . Évalué à 10.
La fonction qui ecrit dans les choux, elle fait partie du sous-systeme Win32, vu que le kernel n'apprecie pas cette chose(en fait la partie verif est dans Win32, la fctn d'ecriture est dans Win32(celle qui crash) et l'AV est la aussi), il kill Win32, et comble de malchance, le kernel n'a rien a faire quand Win32 est kille, donc le kernel affiche un ecran bleu et s'arrete ou reboot selon la config qu'on a.
Je me suis laisse emporter en voyant que le fichier etait dans les repertoires habituellement reserves au kernel, mais ce qui crashe ne tourne pas en mode kernel, simplement le kernel fait un BSOD car il n'a plus rien a faire(sans Win32, le kernel ne sert a rien)
En gros le fautif c'est Win32, pas le kernel(j'esperes que le kernel me pardonnera cette diffamation involontaire).
[^] # Re: vieux
Posté par Jonathan ILIAS-PILLET (site web personnel) . Évalué à 2.
[^] # Re: vieux
Posté par pasBill pasGates . Évalué à 10.
Sous NT t'as les sous-systemes :
- Win32
- Posix
- OS2
par defaut.
Win32 t'apporte l'API win32, les fenetres Windows, blabla...
Posix t'apporte.... Posix :+)
OS2 te permet de faire tourner les softs OS2(16bit only je crois)
Une app tourne dans un et un seul sous-systeme, tu peux pas avoir une API Posix qui joue avec l'API Win32 par exemple.
En gros, en theorie tu pourrais faire tourner un tas de systemes differents par dessus le kernel NT(que j'appelerais personnellement un micro-kernel hybride, car il en a certains traits, mais pas tous).
[^] # Re: vieux
Posté par gle . Évalué à 6.
Il y a un microkernel, et des sous-systèmes qui tournent autour. Sauf que les sous-systèmes tournent dans un ring privilégié au lieu d'un ring user.
J'ai bon pBpG ?
[^] # Re: vieux
Posté par pasBill pasGates . Évalué à 3.
Le process Win32 n'a pas ecrit n'importe ou dans la memoire et fait crasher l'OS, il s'est fait killer par le kernel car il a essaye d'ecrire n'importe ou, et apres le kernel qui continuait a tourner sans prob, s'est rendu compte que sans Win32, ben il n'y a plus rien de faisable --> reboot ou ecran bleu.
[^] # Re: vieux
Posté par Pascal Terjan (site web personnel) . Évalué à 1.
[^] # Re: vieux
Posté par pasBill pasGates . Évalué à 1.
En gros, la solution la plus sure pour eviter de foutre le merdier dans les donnees de l'utilisateur c'est de killer un process qui fait une grosse connerie, quel que soit le process.
[^] # Re: vieux
Posté par the_freeman . Évalué à 4.
(ou alors, y a un truc que j'ai pas piger...).
<mode optimiste>
c'est tellement mieux d'avoir une discussion calme !-)
</mode optimiste>
[^] # Re: vieux
Posté par pasBill pasGates . Évalué à 0.
Sinon, c'est vrai que ca serait tellement mieux si toutes les discussions etaient de ce type.
[^] # Re: vieux
Posté par Neryel . Évalué à 1.
<troll>
Tu veux dire que windows 2000 peut pas gérer les partitions de plus de 2 GO, ou juste que ca su><0r ? ;)
</troll>
[jesors]
[^] # Re: vieux
Posté par rootix . Évalué à 0.
Personne n'a songé à refaire propre win32 pour éviter les problèmes ?
Mais c'est quand même interessant ce que tu dis. (pour une fois)
J'aime bien savoir d'où viennent les écrans bleus.
[^] # Re: vieux
Posté par pasBill pasGates . Évalué à 2.
Notes que dans ce cas la ca vient de Win32, d'autres fois ca peut etre autre chose(bug driver, bug kernel,..).
Lire les ecrans bleus ca donne souvent pas mal d'infos sur la raison du crash.
[^] # screenshot
Posté par furai (site web personnel) . Évalué à 2.
parce que c'est long a recopier ^_^
[^] # Re: screenshot
Posté par pasBill pasGates . Évalué à 1.
Control Panel -> System -> Advanced -> Startup and recovery
[^] # Re: vieux
Posté par Aza . Évalué à 5.
Bon je veux pas etre méchant, je suppose que vous avez des trucs importants a faire chez crosoft, mais ce bug ca fait des tas de mois qu'il est connu et que microsoft est prevenu alors
COMMENT CA SE FAIT QU'IL N'Y AIT TOUJOURS PAS DE PATCH BORDEL!
Tu vas pas me dire que c'est si dur a patcher que ca prend plus de six mois a corriger, d'autant qu'entre temps microsoft a corrigé des bugs découvert après.
Serieuxement y'a une raison particulière qui explique qu'un bug qui a plus de six mois n'a toujours pas de patch ?
[^] # Re: vieux
Posté par Toufou (site web personnel) . Évalué à 1.
[^] # Re: vieux
Posté par pasBill pasGates . Évalué à 0.
Question: est-ce que ce bug est important ?
- Il peut-etre declenche en remote ? Non
- Il arrive frequemment ? Non, il faut le faire explicitement, 99.9999% des softs ne font pas ca.
- Elevation de privilege en local ? Non
...
Bref, ce bug est un petit DoS en local, pas tres utile car le coupable est trouve dans les 30 secondes et se fera empaler sur un pieu.
Resultat: ca merite pas qu'on sorte un hotfix, ca veut pas dire qu'on ne le corrigera pas dans un SP ou SRP cependant.
[^] # Re: vieux
Posté par Pierre Tramo (site web personnel) . Évalué à 1.
[^] # Re: vieux
Posté par pasBill pasGates . Évalué à 1.
Pour ca faut le lancer sur la machine distante, et qu'il ouvre une console.
Si t'as pas les droits necessaires, tu peux te gratter pour faire ca. De meme, pour mettre un truc dans le menu demarrer, faut avoir les droits, tu peux le mettre dans ton propre menu demarrer a toi, mais ca t'avance pas beaucoup.
[^] # Re: vieux
Posté par Pierre Tramo (site web personnel) . Évalué à 1.
Celui de mon école est un bon exemple, il n'y a aucune sécurité, la plupart des disques sont en fat et quand il y a du ntfs, on n'a plus aucun droit d'écriture du tout. Sur certaines machines, il n'y a pas de mots de passe administrateurs, certaines tombent sans raison et quand on perd des données, on nous dit qu'il fallait le mettre sur le serveur ou tout le monde a accés en ecriture, et je ne fait pas trop confiance a cette méthode.
Chaque année, les profs doivent réinstaller les ordis mais ils nous engueulent parce que bien sûr, c'est de notre faute si tout le monde installe des jeux.
[^] # Re: vieux
Posté par pasBill pasGates . Évalué à 0.
Faudrait peut-etre leur acheter "administration pour les nuls", ca pourrait leur servir si ils arrivent a comprendre ce qui est ecrit dedans...
# Optimisons le code quand meme :-)
Posté par Edouard Gomez (site web personnel) . Évalué à 9.
1 - for(;;) { } peut etre remplacé par while(1) c'est plus lisible
2 - le return(0) n'etant jamais atteint... on peut l'oublier :-))
3 - puis ca serait pas mal d'inclure <stdio.h> car un #include rien j'ai jamais vu moi
Au final du code avec un warning (manque le return) ca donne :
#include <stdio.h>
int main()
{
}
Il parait meme qu'on peut se passer du while(1)...
--
Edouard Gomez
Savez vous plantez des Windows, a la modeeeee, a la modeeee... de chez noussssss ?
[^] # Re: Optimisons le code quand meme :-)
Posté par Pascal Terjan (site web personnel) . Évalué à 1.
[^] # Re: Optimisons le code quand meme :-)
Posté par Jar Jar Binks (site web personnel) . Évalué à -7.
Oui mais c'est plus long.
2 - le return(0) n'etant jamais atteint... on peut l'oublier :-))
Ah non, ça fait un warning.
:p
[^] # Re: Optimisons le code quand meme :-)
Posté par Blackknight (site web personnel, Mastodon) . Évalué à 8.
#include <stdio.h>
int main (void)
{
printf("\t\b\b\b ") ;
return EXIT_SUCCESS ;
}
Y a même moins de \b mais j'ai quand même laissé un EXIT_SUCCESS pour faire propre.
# encore plus simple pour planter Windows mais que les versions 9x
Posté par tanguy_k (site web personnel) . Évalué à 2.
cliquez sur Démarrer / Executer
puis entrez dans la boite de dialogue :
c:\con\con
et hop à tous les coups windows 9x affiche un bel écran bleu, reboot garantie :)
c'est con, mais c'est comme ca ...
(c'est pas une blague, ca fonctionne réellement, c'est connu depuis longtemps)
[^] # Re: encore plus simple pour planter Windows mais que les versions 9x
Posté par Ray Mond . Évalué à 4.
Sinon, pour ceux que ça intéresse, il y avait aussi :
c:\nul\nul
c:\aux\aux
Alors là, si jamais pBpG trainait ds le coin, qu'il vienne nous expliquer le pourquoi du comment aussi, on ne peut m pas créer de repertoire aux, nul ou con sous 98 ;o)
[^] # Re: encore plus simple pour planter Windows mais que les versions 9x
Posté par Pierre Tramo . Évalué à 5.
Je suppose qu'il s'agit d'un reste de MS-DOS, où ce nommage de périphériques était utilisé dans les scripts dos. Ces pseudo périphériques sont-ils encore utilisés sous Win (9x, NT ...) ?
[^] # Re: encore plus simple pour planter Windows mais que les versions 9x
Posté par pasBill pasGates . Évalué à -4.
[^] # Re: encore plus simple pour planter Windows mais que les versions 9x
Posté par Miod in the middle . Évalué à 1.
[cf. MSKB Q216654]
[^] # Re: encore plus simple pour planter Windows mais que les versions 9x
Posté par Pierre Tramal (site web personnel) . Évalué à 0.
[^] # Re: encore plus simple pour planter Windows mais que les versions 9x
Posté par Pierre Tramo . Évalué à 3.
NUL, AUX, CLOCK$ et CONFIG$. LPT, COM et PRN ne sont pas en cause ( http://www.securax.org/pers/scx-sa-01.txt(...) ), ce qui est très étonnant, ama.
# Marche pas avec cygwin
Posté par lepoulpe . Évalué à 10.
Certainement dans ce cas là, que l'appel fautif est géré par la dll cygwin et non plus par une bibliothèque système !
[^] # Re: Marche pas avec cygwin
Posté par zeiram . Évalué à 10.
Il serait intéressant de refaire le test en compilant avec l'option que je mentionne ci-dessus. Malheureusement n'ayant pas installé cygwin sur ce poste, je ne peux pas faire ce test moi-même.
[1] L'option -mno-cygwin indique au compilateur de cygwin d'utiliser les librairies de mingw pour les appels systèmes, en lieu et place des librairies de cygwin. Ainsi, on obtient des applications qui peuvent se passer de la DLL de cygwin, mais qui ne peuvent rien faire de plus que ce qui est mis à disposition par Win32.
Zeiram
[^] # Re: Marche pas avec cygwin
Posté par lepoulpe . Évalué à 3.
Effectivement, avec l'option -mno-cygwin, ça plante méchamment !!!
[^] # Re: Marche pas avec cygwin
Posté par wismerhill . Évalué à 0.
[^] # Re: Marche pas avec cygwin
Posté par Didier (site web personnel) . Évalué à 1.
# Planter linux n'est pas non plus très dur...
Posté par patate . Évalué à 3.
#include <stdio.h>
#include <unistd.h>
int main(){
while(1) fork();
}
A l'epoque ou j'avais trouve ca, j'avais cherche une solution equivalente a ULIMIT pour le nombre de process qu'un utilisateur peut lancer pour eviter ce genre de gags. J'avais rien trouve, mais si quelqu'un a une idee...
[^] # Re: Planter linux n'est pas non plus très dur...
Posté par Pierre Dinh-van . Évalué à 5.
sinon, y'a aussi le patch grsecurity(.net) qui peut empecher les "forks bombs" en limitant le nbr de forks/secondes pour certains utilisateurs
[^] # Re: Planter linux n'est pas non plus très dur...
Posté par patate . Évalué à -1.
[^] # Re: Planter linux n'est pas non plus très dur...
Posté par furai (site web personnel) . Évalué à 0.
Ca le charge, tres tres bcp, mais y'a toujours moyen de recuperer le truc:
tu te logues en console, cd proc; kill *
ou alors tu recuperes un shell et tu fais exec killall <le nom de ton programme>
mais ca ne plante pas.
<mode rapide=on>
main(){while(1)fork();}
<off> ca va plus vite
[^] # Re: Planter linux n'est pas non plus très dur...
Posté par patate . Évalué à 3.
tu te logues en console, cd proc; kill *
ou alors tu recuperes un shell et tu fais exec killall <le nom de ton programme>
mais ca ne plante pas.
Bin justement, pour les tests que j'ai faits (pas trop, ca saoule de redemarrer a grands coups de reset), si on laissait tourner le truc plus d'un certain temps, y'avait plus moyen de recuperer le truc, meme avec une console sur le port serie.
Le certain temps en question dependait de la RAM, sur un p200 avec 96M fallait envoyer le kill dans les 15 secondes, sur un pIV 1,7 avec 512M on a une minute environ, apres j'arrive plus a recuperer quoi que ce soit (pas moyen de switcher sur une autre console, ni de se loguer sur un terminal serie).
J'ai pas essaye avec le magic-SysRq, ca marche peut-etre.
[^] # Re: Planter linux n'est pas non plus très dur...
Posté par Laurent Mazet (site web personnel) . Évalué à 4.
C'est en shell mais ca fait la meme chose...
J'etais tres fier de ce code quand je l'ai montre a des collegues. Comme ils ne me croyaient pas, je l'ai lance sur ma machine, et j'ai perdu une demi semaine de simulation... Trop bete.
Laurent
[^] # Re: Planter linux n'est pas non plus très dur...
Posté par Neryel . Évalué à -1.
reboot
[jesors] (comme d'hab)
[^] # Re: Planter linux n'est pas non plus très dur...
Posté par Jar Jar Binks (site web personnel) . Évalué à 3.
:(){ :|:&};:
[^] # Re: Planter linux n'est pas non plus très dur...
Posté par Olivier Jeannet . Évalué à 2.
Et que fait ton mystérieux bout de code ? (qui fait on ne peut plus geek :-)
[^] # Re: Planter linux n'est pas non plus très dur...
Posté par Jar Jar Binks (site web personnel) . Évalué à 0.
# News déjà passé !
Posté par Nicolas Boulay (site web personnel) . Évalué à 2.
"La première sécurité est la liberté"
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.