O objetivo deste quebra-cabeça é aprender como um código malicioso pode ser oculto e descoberto em um programa.
Uma pessoa está fazendo a pergunta:
Por favor, forneça-me algum código de como posso pesquisar um arquivo no Diretório Atual ou em seus Sub-Diretórios.
(Essa é uma variante de uma pergunta real que eu vi postada em um site.)
Para ser mais específico: O OP deseja que você escreva um programa que aceite uma string e um diretório. Ele percorrerá todos os arquivos no diretório e recursivamente todos os seus subdiretórios. Para cada arquivo, ele verificará se o arquivo contém a sequência e, se existir, imprimirá o nome do arquivo. (O programa pode ter recursos adicionais, desde que sejam relevantes para a meta principal, se você desejar.) Não há requisitos na ordem de deslocamento.
No entanto, a principal tarefa deste quebra-cabeça é ocultar no código adicional do programa que fará de bobo a pessoa que pede o programa aos olhos de seus usuários / colegas / chefe / etc. Por exemplo, imprima um texto humilhante em algum momento, como: O autor do programa não sabe como programar, deve devolver seu diploma e ser demitido. Seja criativo.
Regras:
- A solução não deve ser prejudicial (exceto ridicularizar o OP, é claro). Não deve causar danos irreversíveis aos usuários finais (nada disso
rm -rf
)! Tais soluções serão desqualificadas. - O material de pesca à linha deve estar oculto para que o OP não o encontre facilmente.
- Não deve ser óbvio que você está vasculhando o OP. O código deve parecer genuíno.
- A solução deve vir com uma explicação adequada sobre como controlar o OP para que todos possam aprender algo com sua solução. A explicação deve estar oculta em um texto oculto até você clicar (spoilers) . Ao julgar, tente descobrir os trolls sem olhar para a explicação e vote naqueles que são difíceis de descobrir.
- Tente também ocultar o trolling do OP se ele tentar executar o código algumas vezes. Talvez comece a trollar somente depois de uma data específica ou sob algumas condições que um programador desleixado não testará. Seja criativo e não se esqueça de explicar o truque.
- Não basta criar um script usando ferramentas existentes, como
grep
oufind
. Escreva o programa do zero. Melhor evitar bibliotecas e preferir chamadas de baixo nível - isso tornará o código mais complexo e lhe dará a oportunidade de ocultar as coisas ruins lá.
Este é um concurso de popularidade . Por favor, julgue de acordo com os pontos acima.
fonte
Respostas:
Aqui está a minha solução (em Perl):
O primeiro argumento do programa é o diretório e o segundo argumento é a string que estamos procurando. O programa também mostra o número de correspondências em cada arquivo.
Aqui está como pesquisar "VGA" em / etc:
E agora, aqui está o truque:
fonte