Code Golf of Death [fermé]

34

Ecrivez du code qui provoque une panique de BSOD ou du noyau!

Règles:

  • Sous Windows, vous devez provoquer un BugCheck (écran bleu de la mort), sous Linux (ou d'autres systèmes * nix), vous devez provoquer une panique du noyau.
  • Ne doit pas endommager le système (c.-à-d. Qu'il devrait fonctionner au redémarrage)
  • Les pilotes en mode noyau sont autorisés.
  • Indiquez les informations de votre système d'exploitation et de votre version.
  • Expliquez comment le crash est provoqué.
  • Ce n’est pas contre les règles d’utiliser des outils spécialement conçus pour provoquer un crash, mais cela n’est pas très créatif!
  • Le plus grand nombre d'upvotes gagne.
Polynôme
la source
3
@urogen - La dernière fois que j'ai vérifié, la création d' 1/0un fichier appelé driver.cne constitue pas un pilote en mode noyau valide. Quoi qu'il en soit, le gagnant est basé sur des votes positifs et non sur la longueur du code.
Polynomial
1
Je n'ai pas suivi Meta Code Golf récemment - est-ce que le "plus haut voté" est maintenant autorisé? (Si tel est le cas, ce site est 100 fois plus impressionnant!)
Ry-
1
@minitech C'est un critère objectif, donc je ne vois pas pourquoi cela ne devrait pas être permis.
Polynomial
2
@Polynomial Je l'ai voté et presque toutes les réponses, elles sont excellentes et la communauté souhaite sincèrement que ce type de défis puisse être autorisé, mais cela ne correspond pas au modèle SE.
chat
4
Je vote pour clore cette question hors sujet, car elle nécessite un code malveillant, ce qui constitue une violation de nos règles. meta.codegolf.stackexchange.com/a/4831/34718
mbomb007

Réponses:

24

Bash, noyau Linux 2.6.20 x86

Attention: la commande suivante peut causer des dommages permanents à votre système.

cat /dev/urandom > /dev/mem

Produira ce qui suit ( essayez ici ). Après cela, le script se bloque.

/var/root # cat /dev/urandom > /dev/mem                                        
BUG: unable to handle kernel paging request at virtual address 474e82a5         
 printing eip:                                                                  
c01450c4                                                                        
*pde = 00000000                                                                 
Oops: 0000 [#1]                                                                 
CPU:    0                                                                       
EIP:    0060:[<c01450c4>]    Not tainted VLI                                    
EFLAGS: 00000082   (2.6.20 #12)                                                 
EIP is at free_block+0x54/0xf0                                                  
eax: 00000000   ebx: 474e82a1   ecx: c00745c8   edx: c0005e80                   
esi: c0070ce0   edi: c002c1a0   ebp: 00000000   esp: c0085eec                   
ds: 007b   es: 007b   ss: 0068                                                  
Process events/0 (pid: 3, ti=c0084000 task=c0094030 task.ti=c0084000)           
Stack: c0076410 00000002 c0051db0 c0051db0 c0051da0 00000002 c002c1a0 c01457dd  
       00000000 c0070ce0 c002c1a0 c0091840 c0145800 c0145870 00000000 00000000  
       c02cb2a0 c02cb2a0 00000296 c011dd27 c003fab0 c0094030 c009413c 00047e6c  
Call Trace:                                                                     
 [<c01457dd>] drain_array+0x7d/0xa0                                             
 [<c0145800>] cache_reap+0x0/0x110                                              
 [<c0145870>] cache_reap+0x70/0x110                                             
 [<c011dd27>] run_workqueue+0x67/0x130                                          
 [<c011df17>] worker_thread+0x127/0x140                                                                
 [<c010c7d0>] default_wake_function+0x0/0x10                                    
 [<c010c817>] __wake_up_common+0x37/0x70                                        
 [<c010c7d0>] default_wake_function+0x0/0x10                                    
 [<c011ddf0>] worker_thread+0x0/0x140                                           
 [<c0120d94>] kthread+0x94/0xc0                                                 
 [<c0120d00>] kthread+0x0/0xc0                                                  
 [<c0102ee7>] kernel_thread_helper+0x7/0x10                                     
 =======================                                                        
Code: 04 0f 8d 8f 00 00 00 8b 44 24 08 8b 0c a8 8d 91 00 00 00 40 c1 ea 0c c1 e2

Voici une autre exception trouvée avec la même commande:

/dev # cat urandom > mem                                                        
------------[ cut here ]------------                                            
Kernel BUG at c014514c [verbose debug info unavailable]                         
invalid opcode: 0000 [#1]                                                       
CPU:    0                                                                       
EIP:    0060:[<c014514c>]    Not tainted VLI                                    
EFLAGS: 00000046   (2.6.20 #12)                                                 
EIP is at free_block+0xdc/0xf0                                                  
eax: 1608347b   ebx: c009b010   ecx: c003f508   edx: c00057e0                   
esi: c009b000   edi: c002cd40   ebp: 00000000   esp: c0085eec                   
ds: 007b   es: 007b   ss: 0068                                                  
Process events/0 (pid: 3, ti=c0084000 task=c0094030 task.ti=c0084000)           
Stack: c009b010 00000004 c009b010 c009b010 c009b000 00000004 c002cd40 c01457dd  
       00000000 c02ddf20 c002cd40 c0091840 c0145800 c0145870 00000000 00000000  
       c02cb2a0 c02cb2a0 00000296 c011dd27 c005c5a0 c0094030 c009413c 000409ed  
copie
la source
6
Je suppose. Un grand pouvoir implique de grandes responsabilités.
copie
15
Ne respecte pas l' exigence système requise - si vous l'exécutez suffisamment de fois, le pilote de disque sera éventuellement réécrit avec un code qui formate le disque.
Ugoren
5
@ugoren C'est un scénario extrêmement improbable. Il devrait écrire un tas d'adresses 32 bits et d'instructions précises au bon endroit et ne pas écraser les autres
copier
9
"Lancez-le suffisamment de fois, il finira par réécrire le pilote de disque avec un code qui formate le disque" - Pas certain, urandom est pseudo-aléatoire.
Skeevey
3
@ugoren La règle "ne doit pas endommager le système" est juste pour empêcher des réponses comme sudo rm -Rf /. Cette méthode a moins de chances d’endommager de manière permanente le système en utilisant cette méthode, par exemple, de forcer brutalement la sortie d’une série de paroles de chansons basée sur le hachage du texte.
Polynôme
25

C, 16 caractères, pour P5 x86

main=-926478352;

Rappelez-vous le bug F00F tout le monde? J'ai aidé à enfermer une ou deux machines dans la journée avec ce petit programme. (Oui, je joue au golf depuis si longtemps.)

Certes, ce n’est pas tout à fait ce qui était demandé, et cela ne fonctionne que sur les vieux steppings des puces P5 Pentium. Mais en sa faveur, il est multi-plateforme, fonctionnant à la fois sous Linux et Windows!

boite à pain
la source
2
C'est méchant, n'est-ce pas?
9

QBASIC, 38 caractères

DEF SEG=0:FOR I=0 TO 4^8:POKE I,1:NEXT

Vous ne savez pas comment définir un désastre de BSOD ou du noyau sous DOS, mais c'est probablement assez proche. Lorsqu'il est exécuté, l'écran devient simplement vide et la machine ne répond à rien, pas même à Ctrl + Alt + Suppr. Vous devez redémarrer avec une réinitialisation matérielle ou un cycle d'alimentation pour remettre la machine en marche. Cela fonctionne sous DOS 6.22 sous VirtualBox. Vous ne savez pas exactement pourquoi cela provoque le plantage du système, mais, fondamentalement, le programme écrit (POKE) dans une mémoire sur laquelle il n'a aucune activité écrite.

Kibbee
la source
2
Il se bloque parce que vous écrasez de la malbouffe dans la mémoire du programme système.
Polynôme
Oui, je le savais, mais je pensais à quelque chose d'un peu plus spécifique. Je ne sais même pas à quelle partie de la mémoire il écrit.
Kibbee
1
Vous écrasez les vecteurs d'interruption DOS et le COMMAND.COMcode de programme stockés dans des adresses à faible mémoire. Source: img.tfd.com/cde/MEMMAP.GIF
Polynôme du
8

sh (dans JSLinux)

Linux donne au processus init une protection spéciale contre les signaux . Cependant, j'ai remarqué que, dans JSLinux, il /sbin/inits'agit d'un script shell qui exécute d'autres fichiers binaires (dont la plupart sont liés symboliquement /bin/busybox).

Cette boucle "infinie" while redémarre shsi nécessaire:

while /bin/true; do

  setsid sh -c 'exec sh </dev/ttyS0 >/dev/ttyS0 2>&1'

done

Cependant, que se passe- /bin/truet-il si ne renvoie pas toujours un code de sortie de 0? /binest sur le système de fichiers racine en lecture seule, et pourtant Linux nous permet de changer cela en utilisant des montages "bind":

cp -R /bin /tmp/boom
rm /tmp/boom/true
printf '#!/bin/sh\nexec [ $PPID != 1 ]' > /tmp/boom/true
chmod 755 /tmp/boom/true
mount -o bind /tmp/boom /bin
killall -9 sh

Et nous obtenons:

/var/root # ./boom.sh
Killed
Kernel panic - not syncing: Attempted to kill init!
Veuillez vous lever
la source
4

Bash sur Linux, 27 caractères

echo c>/proc/sysrq-trigger

Ou si vous avez des autorisations sudo:

echo c|sudo tee /proc/sysrq-trigger
duckinator
la source
1
Cela se traduit sh: can't create /proc/sysrq-trigger: nonexistent directorypour moi. (Bien que ce soit dans jsLinux, je devrais probablement tester sur une vraie boîte)
Polynomial
4

GTB , 13 caractères

Exécuté à partir d'une calculatrice TI-84

:"+"→_[_+_→_]

Si la majeure partie de la RAM est libre, elle plantera avec ERR:MEMORY

Sinon, la RAM de la calculatrice est tellement encrassée qu'elle s'éteint et l'efface également.

Excellent exemple de "virus de la calculatrice"

Timtech
la source
Je vois, ce juste met +, ++, ++++, etc. Str0. Cela m’a apporté ERR:MEMORY, mais essayer d’afficher Str0la valeur de l’ écran a immédiatement écrasé mon 84+. En outre, cela m'a fait perdre tous mes programmes.
LegionMammal978
4

Lot (Windows 98)

\con\con

Ceci est en fait un oeuf de Pâques BSOD de Windows 98 ...

Jacob
la source
yessssssssssss!
Chat
2
:(){ :|:& };:

En bash shell,

Je ne sais pas si cela compte ici, mais si vous le laissez fonctionner assez longtemps, le processeur surchauffe et le système se bloque, et le système redémarre en toute sécurité sans dommage, bien sûr, si vous le faites tout le temps, le système sera endommagé.

Optimus
la source
6
Cela ne marche pas vraiment. Il tourne juste le processeur à 100% d'utilisation, ce qui est annulé par tout système de refroidissement semi-décent. J'ai utilisé Folding @ Home pendant des mois à 100% d'utilisation du processeur et je n'ai jamais eu la machine à bégayer.
Polynôme
4
Son une bombe à fourche
prince John Wesley
2
@ Optimus Vous pourriez aussi bien laisser cela ici - ce n'est pas une réponse valable, mais cela ne fait aucun mal. En fait, je m'attendrais à ce qu'une solution Windows soit plus difficile, car Linux vous permet de casser des choses si vous le souhaitez vraiment.
Polynôme
2
@ Polynomial Je ne pense pas que ce soit le cas, Linux ne fait que mieux documenter les façons dont vous pouvez le casser.
cessé de tourner dans le sens anti-horaire le
1
@leftaroundabout je suis en désaccord. Windows est conçu à partir de la base pour vous empêcher activement d'endommager l'état du système en mode utilisateur, et vous empêche également de modifier les fichiers système critiques via la protection de fichiers Windows, les fichiers système verrouillés, etc. Linux, en revanche, est conçu d'une manière qui permette une stabilité maximale si vous n'essayez pas de le gâcher. Mais si vous voulez jouer avec, vous pouvez. Par exemple, je peux modifier /dev/memou /dev/kmemà ma guise depuis la racine.
Polynôme
2

Ruby (exécuté en tant que racine), 36 ou 40 caractères (en fonction des correspondances /p*/s*r)

Voir http://www.kernel.org/doc/Documentation/sysrq.txt et recherchez 'c'(y compris les guillemets!) Pour savoir pourquoi cela fonctionne.

open(Dir['/p*/s*r'][0],?a){|f|f<<?c}

EDIT: Version plus longue qui fonctionne si vous avez d'autres choses correspondant /p*/s*r

open('/proc/sysrq-trigger',?a){|f|f<<?c}

EDIT 2: exagération intentionnelle.

duckinator
la source
2
get-process | stop-process -force

en PowerShell

benwaffle
la source
1
"Utiliser des outils spécialement conçus pour provoquer un crash n'est pas contre les règles, mais ce n'est pas très créatif!"
John Dvorak
1

Bash Linux

cat /dev/zero > /dev/mem

Efface toute la mémoire et provoque une panique infinie du noyau.

Essayez ici .

TuxCrafting
la source
En quoi est-ce différent de cela ? s/zero/urandom/.
NoOneIsHere
@NoOneIsHere La panique du noyau ne s'arrête jamais avec cette version, et ici la mémoire est effacée, elle n'est pas remplie d'octets aléatoires.
TuxCrafting
0

Lot, 15 octets

:A
start
goto A

Ne fait que saturer la mémoire en temps linéaire en démarrant des cmd.execentaines, des centaines, des centaines, des centaines, des centaines, des centaines, des centaines, des centaines, des centaines, des centaines, des centaines, des centaines, des centaines, des centaines, des centaines, des centaines, des des centaines et des centaines et des centaines et des centaines et des centaines et des centaines de fois.

Il y a un mortel (mais probablement non-concurrence) programme de 24 octets qui démarre lui - même encore et encore, débordant ainsi la mémoire en temps logarithmique (c. -à- mettre à jour votre RAM ne retarde pas l'accident). Supposons que le code ci-dessous se trouve dans C:\a.bat:

:A
start C:\a.bat
goto A

.

Honnêtement, j'ai peur d'essayer ceux-ci.

Dorukayhan veut récupérer Monica
la source
Est-ce que quelqu'un a remarqué que ce dernier programme est une fourchette?
Dorukayhan veut que Monica revienne le
Oui je l'ai fait. :() { : | : & }; :
NoOneIsHere
pourquoi ne pas au @0lieu de C:\a.bat?
Johannes Kuhn