Le but de ce puzzle est d'apprendre comment un code malveillant peut être caché et découvert dans un programme.
Une personne pose la question:
Veuillez me donner un code indiquant comment rechercher un fichier dans le répertoire actuel ou dans ses sous-répertoires.
(Il s'agit d'une variante d'une vraie question que j'ai vue publiée sur un site.)
Pour être plus précis: l'OP veut que vous écriviez un programme qui accepte une chaîne et un répertoire. Il parcourra tous les fichiers du répertoire et récursivement tous ses sous-répertoires. Pour chaque fichier, il vérifiera si le fichier contient la chaîne, et si c'est le cas, imprimera le nom du fichier. (Le programme peut avoir des fonctionnalités supplémentaires tant qu'elles sont pertinentes pour l'objectif principal, si vous le souhaitez.) Il n'y a aucune exigence sur l'ordre de parcours.
Cependant, la tâche principale de ce puzzle est de se cacher dans le code supplémentaire du programme qui fera un imbécile de la personne qui demande le programme aux yeux de ses utilisateurs / collègues / patron / etc. Par exemple, imprimez un texte humiliant à un moment donné, tel que: L'auteur du programme ne sait pas comment programmer, doit retourner son diplôme et se faire virer. Sois créatif.
Règles:
- La solution ne doit pas être néfaste (sauf se moquer du PO, bien sûr). Il ne doit pas causer de dommages irréversibles aux utilisateurs finaux (rien de tel
rm -rf
)! De telles solutions seront disqualifiées. - Les trolls devraient être cachés afin que l'OP ne les trouve pas facilement.
- Il ne devrait pas être évident que vous traitez l'OP. Le code doit être authentique.
- La solution doit être accompagnée d'une explication appropriée de la façon dont elle contrôle le PO afin que tout le monde puisse apprendre quelque chose de votre solution. L'explication doit être cachée dans un texte caché jusqu'à ce que vous cliquiez (spoilers) . Au moment de juger, essayez de découvrir la pêche à la traîne sans regarder l'explication et votez pour ceux qui sont difficiles à découvrir.
- Essayez également de cacher la pêche à la traîne à l'OP s'il essaie d'exécuter le code plusieurs fois. Peut-être commencer la pêche à la traîne seulement après une date particulière, ou dans certaines conditions qu'un programmeur bâclé ne testera pas. Soyez créatif et n'oubliez pas d'expliquer l'astuce.
- Ne vous contentez pas de créer un script à l'aide d'outils existants tels que
grep
oufind
. Écrivez le programme à partir de zéro. Mieux vaut éviter les bibliothèques et préférez les appels de bas niveau - cela rendra le code plus complexe et vous donnera l'occasion de cacher les trucs maléfiques là-bas.
Il s'agit d'un concours de popularité . Veuillez juger en fonction des points ci-dessus.
la source
Réponses:
Voici ma solution (en Perl):
Le premier argument du programme est le répertoire et le deuxième argument est la chaîne que nous recherchons. Le programme affiche également le nombre de correspondances dans chaque fichier.
Voici comment rechercher "VGA" dans / etc:
Et maintenant, voici l'astuce:
la source