Рубрика 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] != ''; i++) {

if (isalpha(word[i]) == 0)

retu;

}

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);

}

retu fd;

}

Ответ на пазл №2 «CRYPTFUCK V4.1»

Слово «Ash» программа зашифрует следующим образом - «WOW». Каждый символ в кодировке ASCII сдвигается вперед на четыре позиции, а затем выполняется XOR с ключом "x12x38x3bx4". Функция, реализующая данный алгоритм:

void crypt(char *str) {

char key[]="x12x38x3bx4";

int i=0;

for (; *str !=''; 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), в нем принимает участие и Россия.

Содержание  Вперед на стр. 059-110-2
ttfb: 3.1061172485352 ms