Code Golf of Death [chiuso]


34

Scrivi del codice che provoca un panico nel kernel o nel BSOD!

Regole:

  • Su Windows, devi causare un BugCheck (Blue Screen of Death), su Linux (o altri sistemi * nix) devi causare un panico nel kernel.
  • Non deve danneggiare il sistema (cioè dovrebbe funzionare al riavvio)
  • I driver in modalità kernel sono consentiti.
  • Indica il tuo sistema operativo e le informazioni sulla versione.
  • Spiega come è causato l'incidente.
  • Non è contro le regole usare strumenti appositamente progettati per causare un arresto anomalo, ma farlo non è molto creativo!
  • Il punteggio più alto vince.

3
@urogen - L'ultima volta che ho verificato, inserire 1/0un file chiamato driver.cnon costituisce un driver valido in modalità kernel. Indipendentemente da ciò, il vincitore si basa su voti, non sulla lunghezza del codice.
Polinomio

1
Ultimamente non seguo Meta Code Golf: ora è consentito il "voto più alto"? (Se questo è il caso, questo sito web è appena diventato 100 volte più fantastico!)
Ry

1
@minitech È un criterio oggettivo, quindi non vedo perché non dovrebbe essere permesso.
Polinomio

2
@Polynomial L'ho votato a fondo e quasi tutte le risposte, sono fantastiche e la comunità desidera sinceramente che questo tipo di sfide possano essere permesse, ma non si adatta al modello SE.
gatto

4
Sto votando per chiudere questa domanda come fuori tema perché richiede codice dannoso, che viola le nostre regole. meta.codegolf.stackexchange.com/a/4831/34718
mbomb007

Risposte:


24

Bash, kernel Linux 2.6.20 x86

Avvertenza: il seguente comando può causare danni permanenti al sistema.

cat /dev/urandom > /dev/mem

Verrà visualizzato quanto segue ( provare qui ). Dopo questo, lo script si blocca.

/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

Ecco un'altra eccezione trovata con lo stesso comando:

/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  

6
Credo di si. Con un grande potere viene una grande responsabilità.
copia il

15
Viola il Non deve danneggiare i requisiti di sistema : se lo esegui abbastanza volte, alla fine riscriverà il driver del disco con il codice che formatta il disco.
ugoren,

5
@ugoren Questo è uno scenario estremamente improbabile. Dovrebbe scrivere un sacco di indirizzi e istruzioni a 32 bit accurati nel posto giusto e non sovrascrivere gli altri
copia il

9
"eseguilo abbastanza volte, alla fine riscriverà il driver del disco con il codice che formatta il disco" - Non certo, urandom è pseudocasuale.
Skeevey,

3
@ugoren La regola "non deve danneggiare il sistema" è solo per impedire risposte simili sudo rm -Rf /. Le probabilità di causare danni permanenti al sistema usando questo metodo sono inferiori alle probabilità, per esempio, di forzare bruscamente l'output di una serie di testi di canzoni basati sull'hash del testo.
Polinomio

25

C, 16 caratteri, per P5 x86

main=-926478352;

Ricordi il bug F00F per tutti? Ho aiutato a bloccare una o due macchine nel corso della giornata con questo piccolo programma. (Sì, ho giocato a golf per così tanto tempo.)

Certo, non è proprio quello che è stato richiesto e funziona solo su vecchi gradini dei chip P5 Pentium. Ma a suo favore, è multipiattaforma, funziona sia su Linux che su Windows!


2
È dannoso, non è vero?

9

QBASIC, 38 personaggi

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

Non sono sicuro di come definirebbe un panico BSOD o Kernel in DOS, ma questo è probabilmente abbastanza vicino. Quando viene eseguito, lo schermo diventa vuoto e la macchina non risponde a nulla, nemmeno Ctrl + Alt + Canc. È necessario riavviare con un hard reset o un ciclo di accensione per riavviare la macchina. Questo è in esecuzione su DOS 6.22 in VirtualBox. Non so esattamente perché causi l'arresto anomalo del sistema, ma fondamentalmente il programma sta scrivendo (POKE) in memoria a cui non ha intenzione di scrivere.


2
Il motivo per cui si arresta in modo anomalo è perché stai sovrascrivendo la memoria del programma di sistema con junk.
Polinomio,

Sì, lo sapevo, ma stavo pensando a qualcosa di un po 'più specifico. Non sono nemmeno sicuro di quale parte della memoria stia scrivendo.
Kibbee,

1
Stai sovrascrivendo i vettori di interrupt DOS e il COMMAND.COMcodice del programma memorizzati in indirizzi di memoria insufficiente. Fonte: img.tfd.com/cde/MEMMAP.GIF
Polynomial

8

sh (in JSLinux)

Linux offre al processo init una protezione speciale contro i segnali . Tuttavia, ho notato che in JSLinux,/sbin/init è uno script di shell che esegue altri binari (la maggior parte dei quali è simbolicamente collegata /bin/busybox).

Questo ciclo while "infinito" si riavvia shcome necessario:

while /bin/true; do

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

done

Tuttavia, cosa succede se /bin/truenon restituisce sempre un codice di uscita pari a 0? /binè sul file system di root di sola lettura, eppure Linux ci consente di cambiare questo usando i montaggi "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

E otteniamo:

/var/root # ./boom.sh
Killed
Kernel panic - not syncing: Attempted to kill init!

4

Bash su Linux, 27 caratteri

echo c>/proc/sysrq-trigger

O se hai i permessi sudo:

echo c|sudo tee /proc/sysrq-trigger

1
Questo risulta sh: can't create /proc/sysrq-trigger: nonexistent directoryper me. (anche se questo è in jsLinux, quindi dovrei probabilmente provare su una scatola reale)
Polynomial

4

GTB , 13 caratteri

Eseguito da una calcolatrice TI-84

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

Se la maggior parte della RAM è libera, si bloccherà ERR:MEMORY

Altrimenti, la RAM della calcolatrice è così ostruita da spegnersi e cancellarla.

Ottimo esempio di "virus calcolatrice"


Vedo, questo a soli mette +, ++, ++++, ecc Str0. Mi ha dato ERR:MEMORY, ma il tentativo di visualizzare Str0il valore ha subito un crash del mio 84+. Inoltre, questo mi ha fatto perdere tutti i miei programmi.
LegionMammal978,


2
:(){ :|:& };:

In bash shell,

Non sono così sicuro se questo conta qui, ma se lo fai funzionare abbastanza a lungo la CPU si surriscalda e si arresta in modo anomalo e si riavvia in modo sicuro senza danni, ovviamente se lo fai tutto il tempo ci saranno alcuni danni al sistema.


6
Questo non funziona davvero. Fa girare la CPU al 100% di utilizzo, il che è negato da qualsiasi sistema di raffreddamento decente. Ho eseguito Folding @ Home per mesi al 100% di utilizzo della CPU e la macchina non ha mai avuto problemi di stuttering.
Polinomio


2
@Optimus Potresti anche lasciarlo qui - non è una risposta valida, ma non sta facendo alcun male. In realtà mi aspetterei che una soluzione Windows sia più difficile, dal momento che Linux ti consente di interrompere le cose se lo desideri.
Polinomio,

2
@Polynomial Non credo sia vero, Linux documenta solo meglio i modi in cui puoi romperlo.
cessò di girare in senso antiorario il

1
@leftaroundabout Non sono d'accordo. Windows è progettato da zero per impedirti attivamente di danneggiare lo stato del sistema dalla modalità utente e ti impedisce anche di modificare i file di sistema critici tramite Protezione file di Windows, file di sistema bloccati, ecc. Linux, d'altra parte, è progettato in un modo che consente la massima stabilità se non provi a rovinarlo. Ma, se non si vuole pasticciare con essa, è possibile. Ad esempio, posso modificare /dev/memo /dev/kmemcome desidero dalla radice.
Polinomio

2

Ruby (esegui come root), 36 o 40 caratteri (a seconda delle corrispondenze per /p*/s*r)

Vedi http://www.kernel.org/doc/Documentation/sysrq.txt e cerca 'c'(comprese le virgolette!) Per vedere perché funziona.

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

EDIT: versione più lunga che funziona se hai altre cose corrispondenti /p*/s*r

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

EDIT 2: intenzionalmente eccessivo.


2
get-process | stop-process -force

in PowerShell


1
"Non è contro le regole utilizzare strumenti appositamente progettati per causare un arresto anomalo, ma farlo non è molto creativo!"
John Dvorak,

1

Linux bash

cat /dev/zero > /dev/mem

Cancella l'intera memoria e causa un panico infinito nel kernel.

Provalo qui .


Quanto è diverso da questo ? s/zero/urandom/.
NoOneIsHere

@NoOneIsHere Il panico del kernel non si ferma mai con questa versione, e qui la memoria viene cancellata, non piena di byte casuali.
TuxCrafting

0

Lotto, 15 byte

:A
start
goto A

Trabocca semplicemente la memoria in tempo lineare avviando cmd.exe centinaia e centinaia e centinaia e centinaia e centinaia e centinaia e centinaia e centinaia e centinaia e centinaia e centinaia e centinaia e centinaia e centinaia e centinaia e centinaia e centinaia e centinaia e centinaia e centinaia e centinaia e centinaia e centinaia e centinaia e centinaia e centinaia e centinaia di volte.

Esiste un programma più pericoloso (ma probabilmente non competitivo) a 24 byte che si riavvia da solo , rigurgitando la memoria in tempo logaritmico (ovvero l'aggiornamento della RAM non ritarda l'arresto anomalo). Supponiamo che il seguente codice si trovi in C:\a.bat:

:A
start C:\a.bat
goto A

.

Onestamente ho paura di provarli.


Qualcuno ha notato che quest'ultimo programma è una bomba a forcella?
Dorukayhan vuole che Monica ritorni il

Si l'ho fatto. :() { : | : & }; :
NoOneIsHere

perché non @0invece di C:\a.bat?
Johannes Kuhn,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.