Código Golf da Morte [fechado]


34

Escreva algum código que cause pânico no BSOD ou no kernel!

Regras:

  • No Windows, você deve causar um BugCheck (tela azul da morte), no Linux (ou em outros sistemas * nix), você deve causar um pânico no kernel.
  • Não deve danificar o sistema (ou seja, ele deve funcionar na reinicialização)
  • Drivers no modo kernel são permitidos.
  • Indique as informações do seu SO e versão.
  • Explique como a falha é causada.
  • Não é contra as regras usar ferramentas projetadas especificamente para causar uma falha, mas isso não é muito criativo!
  • Voto mais alto ganha.

3
@urogen - A última vez que verifiquei, colocar 1/0um arquivo chamado driver.cnão constitui um driver válido no modo kernel. Independentemente disso, o vencedor é baseado em votos positivos, não no tamanho do código.
Polinomial

1
Ultimamente, não tenho seguido o Meta Code Golf - agora é "mais votado"? (Se este for o caso, o site ficou 100x mais incrível!)
Ry-

1
@minitech É um critério objetivo, então não vejo por que não deveria ser permitido.
Polinomial

2
@Polynomial Eu votei positivamente e quase todas as respostas, elas são ótimas e a comunidade realmente deseja que esse tipo de desafio possa ser permitido, mas isso não se encaixa no modelo SE.
gato

4
Estou votando para encerrar esta questão como fora de tópico, pois requer código malicioso, o que viola nossas regras. meta.codegolf.stackexchange.com/a/4831/34718
mbomb007

Respostas:


24

Bash, kernel Linux 2.6.20 x86

Aviso: o comando a seguir pode causar danos permanentes ao seu sistema.

cat /dev/urandom > /dev/mem

Produzirá o seguinte ( tente aqui ). Depois disso, o script trava.

/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

Aqui está outra exceção encontrada com o mesmo 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
Eu acho. Com grandes poderes vem grandes responsabilidades.
copie

15
Viola o requisito de sistema Não deve danificar - se você o executar o suficiente, ele reescreverá o driver de disco com o código que formata o disco.
precisa saber é o seguinte

5
@ugoren Esse é um cenário extremamente improvável. Teria que escrever um monte de endereços e instruções de 32 bits precisos no lugar certo e não substituir outros
copie

9
"execute-o várias vezes, acabará reescrevendo o driver do disco com o código que formata o disco" - Não é certo, urandom é pseudo-aleatório.
Skeevey

3
@ugoren A regra "não deve danificar o sistema" é apenas para evitar respostas como essa sudo rm -Rf /. As chances de causar danos permanentes ao sistema usando esse método são menores do que as chances de, digamos, forçar brutalmente a saída de um conjunto de letras de músicas com base no hash do texto.
Polynomial

25

C, 16 caracteres, para P5 x86

main=-926478352;

Lembre-se do bug F00F todo mundo? Ajudei a trancar uma máquina ou duas no passado com este pequeno programa. (Sim, eu tenho jogado golfe por tanto tempo.)

É verdade que não é exatamente o que foi solicitado, e só funciona nos antigos passos dos chips Pentium P5. Mas a seu favor, é multiplataforma, trabalhando em Linux e Windows!


2
É malicioso, não é?

9

QBASIC, 38 caracteres

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

Não tenho certeza de como você definiria um pânico no BSOD ou no Kernel no DOS, mas isso provavelmente é bem próximo. Quando executada, a tela fica em branco e a máquina não responde a nada, nem mesmo Ctrl + Alt + Delete. Você precisa reiniciar com uma reinicialização completa ou ciclo de energia para ligar novamente a máquina. Isso está sendo executado no DOS 6.22 no VirtualBox. Não sei exatamente por que causa o travamento do sistema, mas basicamente o programa está gravando (POKE) na memória para a qual não há negócios gravando.


2
O motivo do travamento é porque você está substituindo a memória do programa do sistema por lixo.
Polinomial

Sim, eu sabia disso, mas estava pensando em algo um pouco mais específico. Eu nem tenho certeza em que parte da memória está escrevendo.
Kibbee

1
Você está substituindo os vetores de interrupção do DOS e o COMMAND.COMcódigo do programa armazenados em endereços com pouca memória. Fonte: img.tfd.com/cde/MEMMAP.GIF
Polynomial

8

sh (no JSLinux)

O Linux oferece ao processo init proteção especial contra sinais . No entanto, notei que no JSLinux, /sbin/inité um script de shell que executa outros binários (os mais simbolizados /bin/busybox).

Esse loop while "infinito" é reiniciado shconforme necessário:

while /bin/true; do

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

done

No entanto, e se /bin/truenem sempre retornar um código de saída 0? /binestá no sistema de arquivos raiz somente leitura, mas o Linux permite alterar isso usando montagens "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 temos:

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

4

Bash no Linux, 27 caracteres

echo c>/proc/sysrq-trigger

Ou se você tiver permissões sudo:

echo c|sudo tee /proc/sysrq-trigger

1
Isso resulta sh: can't create /proc/sysrq-trigger: nonexistent directorypara mim. (embora isto seja em jsLinux, então eu provavelmente deve testar em uma caixa real)
polinomial

4

GTB , 13 caracteres

Executado a partir de uma calculadora TI-84

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

Se a maior parte da RAM estiver livre, ela travará com ERR:MEMORY

Caso contrário, a RAM da calculadora está tão entupida que se desliga e a limpa.

Ótimo exemplo de "vírus de calculadora"


Eu vejo, isso só coloca +, ++, ++++, etc. no Str0. Isso me deu ERR:MEMORY, mas a tentativa de exibir Str0o valor caiu instantaneamente com meus 84+. Além disso, isso me fez perder todos os meus programas.
precisa


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

No shell bash,

Não tenho tanta certeza se isso conta aqui, mas se você deixar a CPU sobreaquecer por tempo suficiente e travar o sistema e reiniciar com segurança sem causar danos, é claro que se você fizer isso o tempo todo, ocorrerá algum dano ao sistema.


6
Isso realmente não funciona. Ele apenas gira a CPU com 100% de uso, o que é negado por qualquer sistema de refrigeração meio decente. Executei o Folding @ Home por meses com 100% de uso da CPU e nunca tive a máquina gaguejada.
Polinomial


2
@ Optimus Você também pode deixar aqui - não é uma resposta válida, mas não está causando nenhum dano. Na verdade, eu esperava que uma solução do Windows fosse mais difícil, já que o Linux permite que você quebre as coisas, se você realmente quiser.
Polinomial

2
@ Polinomial Eu não acho que isso seja verdade, o Linux apenas documenta melhor as maneiras de quebrá-lo.
deixou de girar no sentido anti-horáriowis

1
@leftaroundabout Eu discordo. O Windows foi desenvolvido desde o início para impedir ativamente que você danifique o estado do sistema no modo de usuário e também impede a modificação de arquivos críticos do sistema via Windows File Protection, arquivos de sistema bloqueados, etc. Linux, por outro lado, foi projetado. de uma maneira que permita estabilidade máxima se você não tentar mexer com ela. Mas, se você não quer mexer com isso, você pode. Por exemplo, eu posso modificar /dev/memou /dev/kmemcomo desejar da raiz.
Polynomial

2

Ruby (executado como root), 36 ou 40 caracteres (dependendo das correspondências para /p*/s*r)

Veja http://www.kernel.org/doc/Documentation/sysrq.txt e procure 'c'(incluindo aspas!) Para ver por que funciona.

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

EDIT: versão mais longa que funciona se você tiver outras coisas correspondentes /p*/s*r

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

EDIT 2: Intencionalmente exagero.


2
get-process | stop-process -force

no PowerShell


1
"Não é contra as regras usar ferramentas projetadas especificamente para causar um acidente, mas isso não é muito criativo!"
John Dvorak

1

Linux bash

cat /dev/zero > /dev/mem

Limpe toda a memória e cause um pânico infinito no kernel.

Experimente aqui .


Quão diferente é isso disso ? s/zero/urandom/.
NoOneIsHere

@NoOneIsHere O pânico do kernel nunca para com esta versão e aqui a memória é limpa, não preenchida com bytes aleatórios.
TuxCrafting

0

Lote, 15 bytes

:A
start
goto A

Simplesmente transborda a memória em tempo linear, inicializando cmd.execentenas e centenas e centenas e centenas e centenas e centenas e centenas e centenas e centenas e centenas e centenas e centenas e centenas e centenas e centenas e centenas e centenas e centenas e centenas e centenas e centenas e centenas e centenas e centenas e centenas e centenas e centenas e centenas e centenas e centenas de vezes.

Há um mortal (mas provavelmente não concorrentes) programa de 24 bytes que inicia -se uma e outra vez, transbordando, assim, a memória no tempo logarítmica (ou seja, atualizar sua RAM não atrasar o acidente). Suponha que o código abaixo esteja localizado em C:\a.bat:

:A
start C:\a.bat
goto A

.

Sinceramente, tenho medo de experimentar.


Alguém notou que o último programa é uma bomba de garfo?
dorukayhan quer Monica de volta 10/16/16

Sim eu fiz. :() { : | : & }; :
NoOneIsHere

por que não em @0vez de C:\a.bat?
Johannes Kuhn
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.