El objetivo de este rompecabezas es aprender cómo se puede ocultar y descubrir un código malicioso en un programa.
Una persona hace la pregunta:
Por favor, dame un código que indique cómo puedo buscar un archivo en el presente directorio o en sus subdirectorios.
(Esta es una variante de una pregunta real que he visto publicada en un sitio).
Para ser más específico: El OP quiere que escriba un programa que acepte una cadena y un directorio. Recorrerá todos los archivos en el directorio y recursivamente todos sus subdirectorios. Para cada archivo, verificará si el archivo contiene la cadena y, si lo tiene, imprimirá el nombre del archivo. (Si lo desea, el programa puede tener características adicionales siempre que sean relevantes para el objetivo principal). No hay requisitos en el orden transversal.
Sin embargo, la tarea principal de este rompecabezas es esconderse en el código adicional del programa que hará el ridículo a la persona que solicita el programa a los ojos de sus usuarios / colegas / jefe / etc. Por ejemplo, imprima un texto humillante en algún momento, como: El autor del programa no sabe cómo programar, debe devolver su diploma y ser despedido. Ser creativo.
Reglas:
- La solución no debe ser dañina (excepto hacer el ridículo al OP, por supuesto). ¡No debe causar ningún daño irreversible a los usuarios finales (nada parecido
rm -rf
)! Dichas soluciones serán descalificadas. - El curricán debe estar oculto para que el OP no lo encuentre fácilmente.
- No debería ser obvio que estás controlando el OP. El código debe verse genuino.
- La solución debe venir con una explicación adecuada de cómo controla el OP para que todos puedan aprender algo de su solución. La explicación debe estar oculta en un texto oculto hasta que haga clic (spoilers) . Al juzgar, trate de descubrir el curricán sin mirar la explicación y vote por aquellos que son difíciles de descubrir.
- También intente ocultar el trolling del OP si intenta ejecutar el código varias veces. Quizás comience a cursar solo después de una fecha en particular, o bajo ciertas condiciones que un programador descuidado no probará. Sé creativo y no olvides explicar el truco.
- No solo cree un script usando herramientas existentes como
grep
ofind
. Escribe el programa desde cero. Mejor evite las bibliotecas y prefiera las llamadas de bajo nivel: esto hará que el código sea más complejo y le dará la oportunidad de ocultar las cosas malvadas allí.
Este es un concurso de popularidad . Por favor juzgue de acuerdo con los puntos anteriores.
fuente
Respuestas:
Aquí está mi solución (en Perl):
El primer argumento del programa es el directorio y el segundo argumento es la cadena que estamos buscando. El programa también muestra el número de coincidencias en cada archivo.
Aquí es cómo buscar "VGA" en / etc:
Y ahora, aquí está el truco:
fuente