In diesem Rätsel geht es darum zu lernen, wie ein bösartiger Code in einem Programm versteckt und entdeckt werden kann.
Eine Person stellt die Frage:
Bitte geben Sie mir einen Code, wie ich eine Datei suchen kann, die sich in Present Directory oder in seinen Unterverzeichnissen befindet.
(Dies ist eine Variante einer echten Frage, die ich auf einer Website gepostet habe.)
Genauer gesagt: Das OP möchte, dass Sie ein Programm schreiben, das einen String und ein Verzeichnis akzeptiert. Es durchläuft alle Dateien im Verzeichnis und rekursiv alle seine Unterverzeichnisse. Für jede Datei wird geprüft, ob die Datei die Zeichenfolge enthält, und wenn dies der Fall ist, wird der Name der Datei gedruckt. (Das Programm kann zusätzliche Funktionen enthalten, solange sie für das Hauptziel relevant sind, wenn Sie dies wünschen.) Es gibt keine Anforderungen an die Traversierungsreihenfolge.
Die Hauptaufgabe dieses Puzzles ist es jedoch, in dem Programm zusätzlichen Code zu verstecken, der die Person, die nach dem Programm fragt, in den Augen ihrer Benutzer / Kollegen / Chefs / etc zum Narren hält. Drucken Sie zum Beispiel irgendwann einen demütigenden Text aus, wie zum Beispiel: Der Autor des Programms kann nicht programmieren, sollte sein Diplom zurückgeben und sich entlassen lassen. Seien Sie kreativ.
Regeln:
- Die Lösung darf nicht schädlich sein (außer natürlich das OP zum Narren zu halten). Es darf den Endbenutzern keinen irreversiblen Schaden zufügen (keine Sachen wie
rm -rf
)! Solche Lösungen werden disqualifiziert. - Das Trolling-Zeug sollte versteckt sein, damit der OP es nicht leicht findet.
- Es sollte nicht offensichtlich sein, dass Sie das OP überwachen. Der Code sollte echt aussehen.
- Die Lösung muss eine angemessene Erklärung enthalten, wie sie das OP steuert, damit jeder etwas von Ihrer Lösung lernen kann. Die Erklärung sollte in einem verborgenen Text (Spoiler) versteckt sein, bis Sie darauf klicken . Versuchen Sie bei der Beurteilung, das Trolling zu entdecken, ohne auf die Erklärung zu achten, und stimmen Sie für diejenigen ab, die schwer zu entdecken sind.
- Versuchen Sie auch, das Trolling vor dem OP zu verbergen, wenn er versucht, den Code einige Male auszuführen. Beginnen Sie vielleicht erst nach einem bestimmten Datum mit dem Trolling oder unter bestimmten Bedingungen, die ein schlampiger Programmierer nicht testen kann. Seien Sie kreativ und vergessen Sie nicht, den Trick zu erklären.
- Erstellen Sie nicht einfach ein Skript mit vorhandenen Tools wie
grep
oderfind
. Schreiben Sie das Programm von Grund auf neu. Vermeiden Sie lieber Bibliotheken und bevorzugen Sie einfache Aufrufe. Dadurch wird der Code komplexer und Sie haben die Möglichkeit, das Böse dort zu verbergen.
Dies ist ein Beliebtheitswettbewerb . Bitte urteilen Sie nach den obigen Punkten.
quelle
Antworten:
Hier ist meine Lösung (in Perl):
Das erste Argument des Programms ist das Verzeichnis und das zweite Argument ist die Zeichenfolge, nach der wir suchen. Das Programm zeigt auch die Anzahl der Übereinstimmungen in jeder Datei an.
So suchen Sie nach "VGA" in / etc:
Und jetzt ist hier der Trick:
quelle