Рубрика X-Puzzle#13
Ведущий: Иван Скляров
Xakep, номер #059, стр. 059-110-1
Sklyarov@real.xakep.ru
Не стесняйся присылать мне свои ответы, даже если ты смог ответить всего на один пазл, я с интересом почитаю твои оригинальные решения. Ну а имена героев, которые первыми правильно ответят на все вопросы, конечно же, будут опубликованы в журнале, чем прославятся на всю Россию (и не только) и навечно войдут в историю Х. Приз также за нами не заржавеет. ;)
Но помни: в большинстве случаев вариант ответа засчитывается как правильный, только если к нему приложено подробное и ВЕРНОЕ объяснение, почему выбран именно этот вариант, а не какой-либо другой.
ОТВЕТЫ К ПРЕДЫДУЩЕМУ ВЫПУСКУ X-PUZZLE
Ответ на пазл №1 «Mr. Smith»
В данной функции, как минимум, три дыры в безопасности. Во-первых, возможно переполнение буфера (char comm[256]). Во-вторых, функция system() работает без всяких проверок, из-за чего ей можно передать строку, типа «bug /dev/null; rm –rf /». В-третьих, неправильно создается темповый файл в директории /tmp, из-за чего хакер может создать символическую ссылку «/tmp/import» на любой другой файл в системе (такой класс ошибок еще называют «конкуренция доступа к каталогу /tmp»). Вот заново переписанная функция, избавленная от этих багов:
int cool_function(char *word) {
size_t length;
char *comm;
int fd, ok, i;
char filename[]="/tmp/XXXXXX";
for (i=0; word[i] != '\0'; i++) {
if (isalpha(word[i]) == 0)
return;
}
length = strlen("grep -x ") + strlen(word) +
strlen(" /usr/share/dict/words") + 1;
comm = (char*) malloc(length);
sprintf(comm, "grep -x %s /usr/share/dict/words", word);
ok=system(comm);
if (!ok) {
fd=mkstemp(filename);
}
return fd;
}
Ответ на пазл №2 «CRYPTFUCK V4.1»
Слово «Ash» программа зашифрует следующим образом - «WOW». Каждый символ в кодировке ASCII сдвигается вперед на четыре позиции, а затем выполняется XOR с ключом "\x12\x38\x3b\x4". Функция, реализующая данный алгоритм:
void crypt(char *str) {
char key[]="\x12\x38\x3b\x4";
int i=0;
for (; *str !='\0'; str++) {
if (i>3) i=0;
printf ("%c", (*str+4)^key[i++]);
}
}
Ответ на пазл №3 «Linux vs Windows»
Ответы, которые нужно вписать в таблицу, по порядку:
cmd.exe
copy (xcopy)
erase (del)
tracert
CreateDirectory
CreateMutex
nul
con
A:
CR-LF
Ответ на пазл №4 «Глупенькая секретарша»
Эксцентричный директор продиктовал следующее предложение:
Съешь еще этих мягких французских булок, да выпей же чаю.
Вот десять пар клавиш, которые он поменял местами:
с – м е – э
ь – л щ – з
г – х ф – р
у – а б – ч
д – в ю – ж
Ода головоломке
Сложно с уверенностью сказать, когда появились первые головоломки, но можно предположить, что произошло это, когда обезьяна впервые взяла в руки палку и стала называться человеком. Еще при раскопках Древнего Египта были найдены предметы и письмена, подпадающие под понятие головоломки. Чем обычная задача отличается от головоломки? Головоломка не подходит под стандартное решение и при этом имеет притягательную силу, когда хочется ломать голову до упора, без всякого принуждения с чьей-либо стороны, получая удовольствие от самого процесса решения (своеобразный мазохизм). Хорошая головоломка способна свести с ума весь мир, достаточно вспомнить «пятнашки», «кубик Рубика» или игру-головоломку «Тетрис». С 1992 года проводится международный чемпионат по решению головоломок («Word Puzzle Championship», www.worldpuzzle.org), в нем принимает участие и Россия.