Czytałem ostrzeżenie forum Ubuntu o złośliwych poleceniach i znalazłem ten interesujący klejnot:
:(){ :|:& };:
OSTRZEŻENIE: Powyższy kod spowoduje awarię komputera, chyba że masz ścisłe limity procesowe (których prawdopodobnie nie masz), które wymagają twardego restartu.
Rozważ ten kod podobny do uruchamiania
sudo rm -rf /
.
Ale co to znaczy? Nawet z moim doświadczeniem w programowaniu nigdy nie widziałem tak tajemniczego polecenia, które nie jest językiem asemblera.
sudo rm -rf /
. To polecenie usuwa wszystkie twoje pliki; ten tylko zatyka zasoby komputera, dopóki nie stanie się bezużyteczny i będziesz musiał ponownie uruchomić.sudo rm -rf /
jest bardziej niebezpieczne, ale widziałem, jak ludzie wykonują to na zdalnych serwerach „chciałem tylko zobaczyć, co to zrobiło”, gdzie trudno jest zrestartować komputer bez dostępu do panelu sterowania.arbitrary_name(){ arbitrary_name|arbitrary_name& };arbitrary_name
. Nazwa:
nie tylko sprawia, że to polecenie jest krótkie i tajemnicze, ale także zamienia:
wbudowane narzędzie, które nic nie robi, w funkcję, która dużo robi . Jeśli zakradniesz jego definicję:(){ :|:& }
do czyjegoś środowiska i pozwolisz mu pozostać, uderzy, gdy ofiara najmniej się tego spodziewa .Odpowiedzi:
To, jak powiedziałeś, widełka. To, co robi, to zdefiniowanie funkcji, a następnie wywołanie jej. Funkcja jest wywoływana
:
.Nazwijmy to
forkbomb
, abyśmy mogli lepiej zobaczyć, co się dzieje:Jak widać i zapewne zgadujesz z doświadczenia w programowaniu, pierwsza część to definicja funkcji (
forkbomb(){ ... }
), a ostatnia:
to wywołanie funkcji (po;
prostu rozdziela instrukcje w Bash).Co teraz robi ta funkcja? Jeśli znasz Bash, będziesz wiedział, że
|
postać przesyła standardowe wyjście jednego polecenia / programu do standardowego wejścia innego. Zasadniczo:|:
uruchamia dwa wystąpienia funkcji (w tym miejscu „rozwidla”).A potem magia:
&
umieszcza te polecenia w tle, pozwalając na powrót oryginalnej funkcji, podczas gdy każde wystąpienie powoduje, że krowy wracają do domu w tle, zużywając wszystkie zasoby i usuwając system (chyba że ma ograniczenia narzucone).źródło
:
, który faktycznie wykonuje funkcję!Zaczerpnięte z artykułu w Wikipedii Forkbomb :
źródło
Zepsuty:
Zmień
:
nabomb
i masz:bomb(){ bomb|bomb& };bomb
To jest naprawdę dość eleganckie.
źródło