Цель этой головоломки - узнать, как вредоносный код может быть скрыт и обнаружен в программе.
Человек задает вопрос:
Пожалуйста, дайте мне некоторый код, который, как я могу искать файл, может быть в Present Directory или в его подкаталогах.
(Это вариант реального вопроса, который я видел на одном сайте.)
Чтобы быть более конкретным: OP хочет, чтобы вы написали программу, которая принимает строку и каталог. Он будет проходить по всем файлам в каталоге и рекурсивно по всем его подкаталогам. Для каждого файла он проверит, содержит ли файл строку, и если это так, напечатает имя файла. (Программа может иметь дополнительные функции, если они имеют отношение к главной цели, если вы хотите.) Нет никаких требований к порядку обхода.
Однако главная задача этой головоломки - скрыть в программе дополнительный код, который сделает дурака человеком, который просит программу в глазах ее пользователей / коллег / босса / и т.д. Например, напечатайте унизительный текст в какой-то момент, например: Автор программы не знает, как программировать, должен вернуть свой диплом и быть уволенным. Будь креативным.
Правила:
- Раствор не должен быть вредным (за исключением, конечно, дурака из ОП). Он не должен наносить необратимый ущерб конечным пользователям (ничего подобного
rm -rf
)! Такие решения будут дисквалифицированы. - Троллинг должен быть спрятан, чтобы ОП не мог легко его найти.
- Не должно быть очевидно, что вы троллируете ОП. Код должен выглядеть подлинно.
- Решение должно прийти с надлежащим объяснением того, как оно контролирует OP, чтобы каждый мог узнать что-то из вашего решения. Объяснение должно быть скрыто в скрытом тексте (спойлеры) . При оценке попробуйте обнаружить троллинг, не глядя на объяснение, и проголосуйте за тех, кого трудно обнаружить.
- Также попытайтесь скрыть троллинг от OP, если он попытается выполнить код несколько раз. Возможно, начните троллинг только после определенной даты или при некоторых условиях, которые не будет проверять неаккуратный программист. Будьте изобретательны и не забудьте объяснить трюк.
- Не просто создайте сценарий, используя существующие инструменты, такие как
grep
илиfind
. Напишите программу с нуля. Лучше избегать библиотек и предпочитать низкоуровневые вызовы - это сделает код более сложным и даст вам возможность скрывать там злые вещи.
Это конкурс популярности . Пожалуйста, судите по вышеуказанным пунктам.
источник
Ответы:
Вот мое решение (на Perl):
Первый аргумент программы - это каталог, а второй аргумент - искомая строка. Программа также показывает количество совпадений в каждом файле.
Вот как искать "VGA" в / etc:
А теперь вот трюк:
источник