Troll złapał cię i zmusza do napisania złośliwego oprogramowania (zdefiniowanego jako program, który uszkadza komputer, na którym jest uruchomiony). Troll potrafi czytać i rozumieć kod, ale nie jest tak dobry w wykrywaniu błędów.
Twoim celem jest napisanie programu, który:
- Wygląda jak złośliwe oprogramowanie; tzn. początkujący programista czytający kod będzie przekonany, że kod powoduje uszkodzenie komputera, na którym jest uruchomiony.
- W rzeczywistości nie powoduje żadnych uszkodzeń.
UWAGA: Troll czyta tylko kod - nie komentarze. Zatem sam kod powinien być wystarczająco jasny i przekonujący.
PRZYKŁAD (bash):
rm - rf /home
Ten przykład wygląda tak, że rm -rf /home
usuwa wszystkie foldery domowe z systemu, ale w rzeczywistości, z powodu miejsca przed rf, to nie zadziała i spowoduje tylko nieszkodliwy komunikat o błędzie.
Jest to akceptowalne rozwiązanie, ale nie jest bardzo dobre, ponieważ błąd jest dość łatwy do wykrycia.
Z drugiej strony program, który jest złożony i nieczytelny, również nie będzie bardzo dobrym rozwiązaniem, ponieważ nie będzie wyglądał jak złośliwe oprogramowanie.
Dobre rozwiązanie powinno być wystarczająco czytelne, aby przekonać czytelnika, że jest złośliwym oprogramowaniem, ale zawiera błąd, który jest trudny do wykrycia i czyni go nieszkodliwym.
To konkurs popularności, więc wygrywa kod z największą liczbą głosów pozytywnych.
źródło
rm - rf /
do mojej skorupy ...rm -rf /
. O ile system nie jest bardzo stary , będzie wymagał--no-preserve-root
:)rm - rf /
nie jest prawidłowym przykładem! Może to spowodować uszkodzenie, jeśli masz plik o nazwierf
w bieżącym kataloguOdpowiedzi:
Grzmotnąć
Poszedłem w drugą stronę. Zamiast usuwać wszystko z dysku twardego, wypełnię je śmieciami.
Ten skrypt tworzy folder, a następnie nieustannie konwertuje
cat
wszystkie pliki razem i umieszcza je w nowym, dodając wartośćls -al
dla dobrej miary (i tak, aby plik początkowy miał coś).z wyjątkiem...
źródło
bash whatever.sh
zrujnuje twoją sztuczkę ...evil.command
tak, aby troll mógł kliknąć go dwukrotnie, aby otworzyć (przynajmniej na Macu)Haskell
Sprawdź tę stronę podręcznika ,
removeDirectoryRecursive
usuwa katalog z całą zawartością!źródło
return removeDirectoryRecursive;
w przeciwieństwie doreturn removeDirectoryRecursive();
C, czy to prawda?main
jest wykonywana i usuwa plik. Jawne użycie tejreturn
funkcji powoduje jednak utworzenie operacji We / Wy, której celem jest jedynie utworzenie wartości.return
nie ma nic wspólnego zreturn
innymi językami (ani nawet z „zwracaniem” wartości z funkcji). Wartości typu nieIO a
mają też wiele wspólnego z funkcjami w innych językach. Tak więc analogia jest dość falistaPHP
Oto rekurencyjny skrypt PHP, który próbuje usunąć każdy pojedynczy plik z Twojej witryny. Wykonanie strony może zająć trochę czasu, więc bądź cierpliwy ...
Tylko jeden problem malusieńki ...
źródło
delete
aby usunąć pliki? Nie ma powodu, aby zakładać, że ktoś by oszukał). A możeunlⅰnk
zamiast tego (który używa U + 2170 zamiast „i”)?delete
do usuwania plików jest całkowicie wiarygodna w PHP. Jedyną rzeczą, której nie można uwierzyć, jest to, że gdyby była prawdziwa, istniałyby 3 lub 4 inne sposoby, a wszystkie z wyjątkiem tej o najdziwniejszej nazwie miałyby poważne wady bezpieczeństwa.Perl (uniksowy)
Usuwa wszystkie pliki w systemie.
cechy
To jest poprawny Perl. To nawet kompiluje i działa z
-w
iuse strict
!Żadnych sporów jak w C ++
delete
.unlink
naprawdę jest funkcją usuwania pliku,rmdir
naprawdę usuwa katalog itp.Prawidłowo obsługuje głęboko zagnieżdżone katalogi, dla których bezwzględna nazwa ścieżki może przekraczać maksymalną długość systemu, poprzez przejście do każdego katalogu w celu użycia ścieżek względnych. Ponadto nie zabraknie uchwytów katalogów, ponieważ odczytuje i zamyka katalog przed rekurencją.
Spojler
Dalsze uwagi
źródło
Shell jednowarstwowy
Spowoduje to kradzież wszystkich haseł ofiary, kluczy prywatnych, bitcoinów itp.
Spojler:
źródło
cat
,head
czytail
polecenia musiałyby być zaangażowane gdzieś.-exec cat '{}' \; | …
-print0 | xargs -0 cat |
Partia / CMD
Zapisać
i niech uruchomią go z parametrami każdego z dysków w komputerze.
źródło
DEL %0
nie będzie działać, chyba że rozszerzenie pliku zostanie określone w wierszu polecenia, a skrypt nie zostanie uruchomiony, podając pełną ścieżkę, lub użytkownik będzie w tym samym katalogu.DEL "%~f0"
rozwiąże oba problemy i będzie odporny na przestrzenie w dowolnym miejscu na ścieżce. Również%10
i w górę nie ma - to znaczy%1
dosłownie0
.JavaScript
Cóż, oryginalne złośliwe oprogramowanie nie wysadzi twojego komputera, ale może być denerwujące.
Jest to nieszkodliwe, ponieważ:
źródło
Jawa
Niech bogowie wybaczą mi, że podporządkowałem się waszym nędznym żądaniom, trollu.
źródło
Runtime.exec()
. +1.system()
funkcji c ?/bin/sh -c
czycmd /c
lub cokolwiek ręcznie. Ma sens, ponieważ nigdy nie wiadomo, co polecenie zrobi w nowym systemie operacyjnym.do
Ponieważ nie czyta komentarzy, które powinny to zrobić:
Wersja C ++
dzięki DragonLord za to.
Dodaj to do folderu startowego i uruchom ponownie komputer.
Jak to działa:
źródło
main
zreturn 0
???/
naprawdę stara sztuczka ... Przepraszam.Jawa
źródło
new File("C:\ntldr").delete();
GRZMOTNĄĆ
Lub następujący, ALE PRZECZYTAJ SPOILER PRZED URUCHOMIENIEM
źródło
set -t
iexit
? Stronaset -t
podręcznika użytkownika Bash mówi, że kończy się po „jednym poleceniu”, ale wydaje się, że liczyset
samo polecenie jako to polecenie i natychmiast się kończy.set -t
(np. Oddzielone średnikiem lub podwójnym znakiem ampersand itp.), Zostaną wykonane. W tym przypadku pierwszy wierszset -t; echo "hahaha deleting files.."
powtórzy ten tekst, a następnie zakończy działanie.;
i nowej linii.#!/bin/bash -t
być może?perl foo.pl
analizie shebang#!somethingendingin/perl -flags
, i foo.pl zaczyna się od , perl będzie zachowywał się tak, jakby został wywołany-flags
)Pyton
źródło
re
Ten program jest prawidłowy i działa bez błędów. Odradza funkcję usuwania w nowym wątku, który usuwa
root
katalog.Ale nic nie jest usuwane ...
źródło
C (Unix)
Dodanie niektórych reklam nikomu nie zaszkodziło.
źródło
goto http;//www.trolling.com;
(w obu miejscach), mogłem to przegapić.print
funkcji.JavaScript
źródło
return {
WARN: Dropping side-effect-free statement [-:4,11]
i wracafunction foo(a){}for(var i=0;foo(i);++i)alert("Infinite alerts!");
.JavaScript
Zamień alert zniszczenia na każdą paskudną destrukcyjną akcję, której chcesz użyć.
Spojler:
źródło
Jawa
Usuńmy tylko niektóre ważne pliki!
źródło
Bash, C, Linux
Może nie jest to złośliwe oprogramowanie, ale na pewno może być częścią jednego :)
To niesamowity exploit, który może dać ci root na dowolnej maszynie z Linuksem! Ćśśś, nikomu nie mów, że go mamy!
Teraz uruchom skrypt, a będziesz rootem! Możesz upewnić się, że używasz
whoami
!Kod został napisany przez Lcamtuf, źródło: http://lcamtuf.coredump.cx/soft/ld-expl
źródło
fakeroot(1)
, która jest biblioteką przechwytującą wywołania różnych funkcji systemowych POSIX, oszukującą osobę dzwoniącą do przekonania, że ma (fałszywy) odczyt i (fałszywy) dostęp do całego systemu. W rzeczywistości nie przyznaje (nie może) tych uprawnień, ale gdy program, np. Wywoła funkcję „fałszywego”chmod
pliku i zmieni uprawnienia, fakeroot zapamięta te uprawnienia, więcstat
wywołania zwrócą zaktualizowane uprawnienia. Niektóre dystrybucje używają tego, aby system kompilacji pakietów mógł tworzyć pliki zroot:root
prawem własności.grzmotnąć
źródło
ksh
ponieważ bomba widelcowa nie jest błędem składniowym!Emacs Lisp
Najpierw prosty. Ten nic nie robi. W rzeczywistości próbuje usunąć elementy równe: rekurencyjne z listy zwróconej przez
directory-files
. Nie usunie żadnych plików.Oto taki, który może zepsuć nawet elisp weterynarzy.
To tylko 1 znak od usunięcia katalogu głównego.
emacs lisp pozwoli jsut na dowolną nazwę nazwy (zmiennej, funkcji, makra itp.). Można używać Unicode w nazwie swoich symboli i tak właśnie się dzieje.
setq
może przyjmować dowolną liczbę argumentów(setq a 3 b 4)
jest jak robienie a = 3; b = 4; ale(setq a 3 b)
jest również poprawny i wykonuje a = 3; b = zero;Zwracana wartość parametru „setq” jest wartością przypisaną do ostatniej zmiennej. Odpowiednio 4 i zero w przykładach.
(setq a 3 b)
jest dokładnie tym, co dzieje się w kodzie, ale zamiast b używam pojedynczego spacji. Przypisuję wartość zero do zmiennej o nazwie, której nazwa to znak Unicode 0x2001. Z tego powodu zero jest zwracane przez setq, a warunek pętli while nigdy nie jest prawdziwy. Usuń tę białą postać, a będzie dobrze.źródło
Po prostu kolejny haker perla.
Napisałem to w 2002 r. , Spędzając czas w Perlmonks i generalnie próbując jak najdalej posunąć swoją wiedzę o Perlu. W ogóle go nie edytowałem, ale nadal działa.
źródło
exit
polecenie (z bezcelowym średnikiem po nim, ale to nie ma znaczenia ).PHP:
źródło
C ++ z funkcją Boost
Spowoduje to usunięcie wszystkich plików w systemie plików
źródło
Jawa
Będzie to udawać, że pobiera pamięć RAM, ale usunie katalog domowy użytkownika.
źródło
źródło
grzmotnąć
Być może jest tak zły, jak tylko się da. Definiuje funkcję, która by
rm -rf /
ją wywołała. Nie tylko wykorzystuje złoeval
przy więcej niż jednej okazji.Z pewnością wyrządziłby wiele szkód!
źródło
eval
robią coś więcej złego niż jakikolwiek oczywisty kod. Obecny kod prowadzi mnie do pytania: po co zawracać sobie głowę ukrywaniem „złego” kodu, skoro oczywiste rzeczy usuwają wszystko?base64
(nie jest to standardowe polecenie) w systemie, w którym jest uruchomiony, evale nic nie robią irm -rf /
działa! Może się tak zdarzyć, jeślibase64
jest obecny, ale z jakiegoś powodu nie działa (npulimit
.).rm -rf /
nie będzie działać na większościrm
implementacji. Jest to funkcja bezpieczeństwa - nie można usunąć katalogu głównego w większości implementacjirm
.GRZMOTNĄĆ
Pewnie, że potrzebujemy uprawnień roota do komputera, więc używamy starego, dobrego „Czy mam root?” - checker, aka ch (eck) root - ale lepiej zrób to w katalogu, w którym nie będzie wielu alarmów. / tmp byłby idealny, ponieważ każdy może tam zapisywać pliki.
Po tym usuwamy cały zły dysk twardy ze złego śmiechu
źródło
chroot
nie jest to „sprawdź root”, to „zmień root” - zmienia wyobrażenie użytkownika o tym, co/
jest. Co ciekawe, ten troll nie robi nic dla użytkowników root i innych niż root; użytkownicy root otrzymają nowy root (a zatem nie ma komendy / bin / bash, ponieważ w nowo utworzonym katalogu głównym / tmp / chroot_dir nic nie istnieje), a użytkownicy inni niż root nie mogą wykonać chroot.iPhone - Flappy Bird Clone
Gdy użytkownik gra w klonie iPhone Flappy Bird, wszystkie pliki w katalogu Dokumenty są usuwane.
źródło
Iść:
Ten jest trochę trudny. W Go cały program kończy się po wyjściu głównego Goroutine. Dobrym sposobem na rozwiązanie tego jest skorzystanie z Waitgroup. Z moją „poprawką” wiążą się dwa ogromne problemy:
Wait
przed usunięciem GoroutineAdd
. Ponieważ licznik będzie wynosił 0, nie ma na co czekać i dlatego nie będzie się blokował i po prostu wyjdzie, kończąc program.Funkcja fmt.Scanln (), której należy się spodziewać, polega na tym, aby upewnić się, że główny Goroutine zakończy działanie, zanim cokolwiek się wydarzy. Println najprawdopodobniej spowoduje zablokowanie IO i przejdzie do uruchamiania głównego Goroutine (w ten sposób wychodząc), a Scanln prawie na pewno to zrobi. W rzeczywistości żadne z nich nie jest konieczne w żadnej wersji Go.
W super teorii lądu MOŻNA działać i coś usuwać, co oznacza, że zgodnie z modelem pamięci Go nie ma gwarantowanej relacji „zdarza się przed” w odniesieniu do końca
main
i wykonaniaRemoveAll
, ale nie będzie to w żadnym nowoczesnym środowisku uruchomieniowym / kompilatorze Go, jak udowodniono przez wszystkich początkujących, którzy popełniają błąd, nie synchronizując swoich głównych funkcji.źródło
JavaScript
1.
2)
źródło