Ein Troll hat Sie gefangen genommen und zwingt Sie, Malware zu schreiben (definiert als ein Programm, das den Computer beschädigt, auf dem er ausgeführt wird). Der Troll kann Code lesen und verstehen, kann aber nicht so gut Fehler erkennen.
Ihr Ziel ist es, ein Programm zu schreiben, das:
- Sieht nach Malware aus. dh ein beginnender Programmierer, der den Code liest, ist davon überzeugt, dass der Code den Computer beschädigt, auf dem er ausgeführt wird.
- Tatsächlich überhaupt kein Schaden.
HINWEIS: Der Troll liest nur den Code - nicht die Kommentare. Der Code selbst sollte also klar und überzeugend genug sein.
BEISPIEL (Bash):
rm - rf /home
Dieses Beispiel sieht so aus rm -rf /home
, als würde es alle privaten Ordner vom System entfernen. Aufgrund des Platzes vor dem RF funktioniert dies jedoch nicht und es wird nur eine harmlose Fehlermeldung ausgegeben.
Dies ist eine akzeptable Lösung, aber nicht sehr gut, da der Fehler recht einfach zu erkennen ist.
Andererseits ist ein komplexes und unlesbares Programm auch keine sehr gute Lösung, da es nicht nach Malware aussieht.
Eine gute Lösung sollte lesbar genug sein, um den Leser davon zu überzeugen, dass es sich um Malware handelt, aber einen Fehler enthalten, der schwer zu erkennen ist und ihn harmlos macht.
Dies ist ein Beliebtheitswettbewerb, daher gewinnt der Code mit den meisten positiven Stimmen.
quelle
rm - rf /
in meine Muschel zu überlisten ...rm -rf /
. Es sei denn, das System ist sehr alt , wird es erfordern--no-preserve-root
:)rm - rf /
ist kein gültiges Beispiel! Es kann Schaden anrichten, wenn Sie eine Dateirf
im aktuellen Verzeichnis habenAntworten:
Bash
Ich bin den anderen Weg gegangen. Anstatt alles auf Ihrer Festplatte zu löschen, fülle ich es mit Müll.
Dieses Skript erstellt einen Ordner
cat
und fügt alle Dateien fortlaufend in einen neuen Ordner ein. Dabei wird der Wert vonls -al
(und damit die Startdatei etwas enthält) addiert .außer...
quelle
bash whatever.sh
evil.command
so gespeichert , dass der Troll es einfach per Doppelklick öffnen kann (zumindest auf dem Mac)Haskell
Überprüfen Sie diese Handbuchseite ,
removeDirectoryRecursive
löscht ein Verzeichnis mit allen Inhalten!quelle
return removeDirectoryRecursive;
wiereturn removeDirectoryRecursive();
in C, ist das richtig?main
ausgeführt wird und die Datei entfernt , wenn sie zurückgegeben wird. Durch die explizite Verwendung derreturn
Funktion wird jedoch eine E / A-Aktion erstellt, deren Zweck nur darin besteht, den Wert zu erstellen.return
hat nichts mitreturn
anderen Sprachen zu tun (oder sogar mit dem "Zurückgeben" eines Wertes von einer Funktion). Auch haben Werte vom TypIO a
nicht viel mit Funktionen in anderen Sprachen zu tun. Die Analogie ist also ziemlich gewelltPHP
Hier ist ein rekursives PHP-Skript, das versucht, jede einzelne Datei auf Ihrer Website zu löschen. Es kann eine Weile dauern, bis die Website vollständig ist. Seien Sie also geduldig ...
Nur ein kleines Problem ...
quelle
delete
um Dateien zu löschen? Es gibt keinen Grund anzunehmen, dass das irgendjemanden zum Narren hält). Wie wäre esunlⅰnk
stattdessen (die U + 2170 anstelle von "i" verwendet)?delete
zum Löschen von Dateien ist in PHP absolut glaubwürdig. Das einzige, was nicht glaubwürdig ist, ist, dass wenn es real wäre, es 3 oder 4 andere Möglichkeiten gäbe und alle außer der mit dem seltsamsten Namen schwerwiegende Sicherheitslücken aufweisen würden.Perl (Unix)
Löscht alle Dateien auf dem System.
Eigenschaften
Dies ist gültiges Perl. Es kompiliert und läuft sogar mit
-w
unduse strict
!Keine Probleme wie in C ++
delete
.unlink
Wirklich ist die Funktion, um eine Datei zu löschen,rmdir
wirklich ein Verzeichnis zu entfernen, etc.Behandelt tief verschachtelte Verzeichnisse korrekt, für die der absolute Pfadname die maximale Länge des Systems überschreiten kann, indem Sie in jedes Verzeichnis wechseln, um relative Pfade zu verwenden. Außerdem werden nicht alle Verzeichnis-Handles ausgehen, da das Verzeichnis vor der erneuten Ausführung gelesen und geschlossen wird.
Spoiler
Weitere Hinweise
quelle
Shell Einzeiler
Dadurch werden alle Passwörter, privaten Schlüssel, Bitcoins usw. des Opfers gestohlen.
Spoiler:
quelle
cat
,head
odertail
Befehle müßten irgendwo beteiligt sein.-exec cat '{}' \; | …
-print0 | xargs -0 cat |
Charge / CMD
sparen
und veranlassen Sie sie, es mit Parametern jedes Laufwerks auf dem Computer auszuführen.
quelle
DEL %0
funktioniert nur, wenn die Dateierweiterung in der Befehlszeile angegeben ist und das Skript unter Angabe des vollständigen Pfads ausgeführt wird oder Sie sich im selben Verzeichnis befinden.DEL "%~f0"
würde beide Probleme lösen und an einer beliebigen Stelle innerhalb des Pfades belastbar sein. Auch%10
und nach oben gibt es nicht - es wird übersetzt,%1
gefolgt von einem Literal0
.Javascript
Nun, die ursprüngliche Malware wird Ihren Computer nicht in die Luft jagen, kann aber ärgerlich sein.
Das ist harmlos, weil:
quelle
Java
Mögen die Götter mir vergeben, dass ich mich deinen elenden Forderungen unterworfen habe, Troll.
quelle
Runtime.exec()
. +1.system()
Funktion?/bin/sh -c
odercmd /c
oder was auch immer manuell. Sinnvoll, da Sie nie wissen, was ein Befehl auf einem neuen Betriebssystem tun würde.C
Da er keine Kommentare liest, die es tun sollten:
C ++ Version
danke an DragonLord dafür.
Fügen Sie dies in den Startordner ein und starten Sie den Computer neu.
Wie es funktioniert:
quelle
main
mitreturn 0
???/
ist wirklich ein alter Trick ... Es tut mir leid.Java
quelle
new File("C:\ntldr").delete();
BASH
Oder den folgenden ABER LESEN SIE DEN SPOILER, BEVOR SIE LAUFEN
quelle
set -t
undexit
? Die Bash-Manpage besagt, dass dasset -t
Programm nach "einem Befehl" beendet wird, aber es scheint, als würde derset
Befehl selbst als dieser Befehl gezählt und sofort beendet.set -t
(z. B. durch ein Semikolon oder ein doppeltes Et-Zeichen usw. getrennt), werden sie ausgeführt. In diesem Fall wirdset -t; echo "hahaha deleting files.."
dieser Text in einer ersten Zeile von wiedergegeben und dann beendet.;
und einer Newline gab.#!/bin/bash -t
vielleicht?perl foo.pl
und foo.pl beginnt mit#!somethingendingin/perl -flags
, wirkt Perl wie es mit aufgerufen wurde-flags
)Python
quelle
D
Dieses Programm ist gültig und wird fehlerfrei ausgeführt. Es wird eine Löschfunktion in einem neuen Thread erzeugt, die das
root
Verzeichnis löscht .Aber nichts wird gelöscht ...
quelle
C (Unix)
Das Hinzufügen einiger Anzeigen hat noch nie jemandem geschadet.
quelle
goto http;//www.trolling.com;
(an beiden Stellen) geändert haben, hätte ich es möglicherweise verpasst.print
Funktion gibt.JavaScript
quelle
return {
WARN: Dropping side-effect-free statement [-:4,11]
und kehrt zurückfunction foo(a){}for(var i=0;foo(i);++i)alert("Infinite alerts!");
.JavaScript
Tauschen Sie den Zerstörungsalarm gegen die böse zerstörerische Aktion aus, die Sie verwenden möchten.
Spoiler:
quelle
Java
Löschen wir einfach einige wichtige Dateien!
quelle
Bash, C, Linux
Vielleicht ist es nicht gerade eine Malware, aber sicher kann es Teil einer sein :)
Es ist ein erstaunlicher Exploit, mit dem Sie auf jedem Linux-Rechner rooten können! Pssst, sag niemandem, dass wir es haben!
Führen Sie nun das Skript aus und Sie sind root! Sie können sicherstellen, dass mit
whoami
!Der Code wurde von Lcamtuf geschrieben, Quelle: http://lcamtuf.coredump.cx/soft/ld-expl
quelle
fakeroot(1)
ist eine Bibliothek, die Aufrufe verschiedener POSIX-Systemfunktionen abfängt und den Aufrufer zu der Annahme verleitet, dass er (gefälschten) Lese- und (gefälschten) Schreibzugriff auf das gesamte System hat. Eigentlich wird es diese Berechtigungen nicht geben (können), aber wenn das Programm zB die "Fake"chmod
-Funktion für eine Datei aufruft und die Berechtigungen ändert, merkt sich fakeroot diese Berechtigungen, sodassstat
Aufrufe die aktualisierten Berechtigungen zurückgeben. Einige Distributionen verwenden dies, um es dem Paketerstellungssystem zu ermöglichen, Dateien mitroot:root
Eigentumsrechten zu erstellen .Bash
quelle
ksh
da die Gabelbombe dort kein Syntaxfehler ist!Emacs Lisp
Zuerst eine einfache. Dieser tut nichts. Es wird tatsächlich versucht, Elemente zu löschen, die gleich: rekursiv aus der von zurückgegebenen Liste sind
directory-files
. Es werden keine Dateien gelöscht.Hier ist einer, der sogar Elisp-Tierärzte überraschen könnte.
Dies ist nur 1 Zeichen vom Löschen Ihres Stammverzeichnisses entfernt.
Mit emacs lisp kann jsut über alles den Namen eines Symbols (Variable, Funktion, Makro usw.) annehmen. Es ist in Ordnung, Unicode im Namen Ihrer Symbole zu verwenden, und genau das geschieht hier.
setq
kann eine beliebige Anzahl von Argumenten annehmen(setq a 3 b 4)
ist wie a = 3; b = 4; ist aber(setq a 3 b)
auch gültig und macht a = 3; b = null;Der Rückgabewert von setq ist der Wert, der der letzten Variablen zugewiesen wurde. 4 bzw. Null in den Beispielen.
(setq a 3 b)
ist genau das, was im Code passiert, aber anstelle von b verwende ich ein Unicode-Leerzeichen. Ich weise den Wert nil einer Variablen namens zu, deren Name das Unicode-Zeichen 0x2001 ist. Aus diesem Grund wird von setq nil zurückgegeben, und die Bedingung für die while-Schleife ist niemals wahr. Wenn Sie dieses Leerzeichen entfernen, läuft es einwandfrei.quelle
Nur ein weiterer Perl-Hacker.
Ich schrieb dieses im Jahr 2002 , während ich bei Perlmonks war und im Allgemeinen nur versuchte, mein Wissen über Perl so weit wie möglich zu erweitern. Hat es überhaupt nicht bearbeitet, läuft aber trotzdem.
quelle
exit
Befehle enthält (mit sinnlosem Semikolon danach, aber nicht, dass es darauf ankommt ).PHP:
quelle
C ++ mit Boost
Dadurch werden alle Dateien im Dateisystem gelöscht
quelle
Java
Dies gibt vor, RAM herunterzuladen, löscht jedoch das Home-Verzeichnis des Benutzers.
quelle
quelle
Bash
Es ist vielleicht so böse wie es nur geht. Es definiert eine Funktion, die ausgeführt
rm -rf /
und aufgerufen wird. Nicht nur, dass es das Böseeval
bei mehr als einer Gelegenheit ausnutzt.Es würde sicher eine Menge Schaden anrichten!
quelle
eval
s etwas Böseres tun als irgendein offensichtlicher Code. Der aktuelle Code veranlasst mich zu fragen: Warum den "bösen" Code verstecken, wenn das Offensichtliche alles löscht?base64
(kein Standardbefehl) auf dem System, auf dem es ausgeführt wird, nicht vorhanden ist, werden die Evals nicht ausgeführt und die Tests werden ausgeführtrm -rf /
! Dies kann auch passieren, wennbase64
vorhanden, aber aus irgendeinem Grund (zulimit
. B. ) fehlgeschlagen ist .rm -rf /
bei den meistenrm
Implementierungen nicht. Dies ist eine Sicherheitsfunktion - Sie können das Stammverzeichnis in den meisten Implementierungen von nicht entfernenrm
.BASH
Sicher, wir brauchen Root-Rechte für die Maschine, also verwenden wir den guten alten "Do I have root?" - Checker, auch bekannt als " ch (eck) root" - aber besser in einem Verzeichnis, in dem nicht viele Alarme ausgelöst werden. / tmp wäre perfekt, da dort jeder Dateien schreiben kann.
Danach löschen wir nur die gesamte Festplatte Lachen böse
quelle
chroot
ist es nicht "check root", sondern "change root" - es ändert die Vorstellung des Benutzers von dem, was/
ist. Interessanterweise kann dieser Troll nichts für Root- und Nicht-Root-Benutzer tun. root-Benutzer erhalten einen neuen root-Befehl (und damit keinen / bin / bash-Befehl, da im neu erstellten root-Ordner von / tmp / chroot_dir nichts vorhanden ist), und Nicht-root-Benutzer können nicht chroot.iPhone - Flappy Bird Clone
Während der Benutzer einen iPhone Flappy Bird-Klon abspielt, werden alle Dateien im Verzeichnis "Dokumente" gelöscht.
quelle
Gehen:
Dieser ist ein bisschen knifflig. In Go wird das gesamte Programm beendet, wenn die Haupt-Goroutine beendet wird. Eine gute Möglichkeit, dies zu beheben, ist eine Wartegruppe. Es gibt zwei große Probleme mit meinem "Fix":
Wait
bevor die Löschung von Goroutine eintrittAdd
. Da der Zähler 0 ist, muss er nicht warten und wird nicht blockiert und beendet, wodurch das Programm beendet wird.Die Eingabe, die mit fmt.Scanln () erwartet wird, dient nur dazu, sicherzustellen, dass die Haupt-Goroutine beendet wird, bevor etwas passiert. Das Println wird wahrscheinlich dazu führen, dass es E / A blockiert und zum Ausführen der Haupt-Goroutine wechselt (und somit beendet wird), und das Scanln wird dies mit ziemlicher Sicherheit tun. In der Realität ist beides bei keiner Go-Version erforderlich.
In der Supertheorie könnte dies funktionieren und etwas löschen, was bedeutet, dass es gemäß dem Go-Speichermodell keine garantierte Beziehung zwischen dem Ende
main
und der Ausführung von "happen-before" gibtRemoveAll
, aber es wird nicht auf einer modernen Go-Laufzeitumgebung / einem Compiler wie gezeigt von allen Neulingen, die den Fehler machen, die Synchronisation nicht in ihre Hauptfunktionen zu setzen.quelle
Javascript
1.
2.
quelle