X-PuzzleИван Скляров (xpuzzle@real.xakep.ru, www.sklyaroff.ru) "ПРОЙДИСЬ ДЕБАГГЕРОМ ПО СВОИМ МОЗГАМ!"Не стесняйся присылать мне свои ответы, даже если ты смог ответить всего на один пазл, я с интересом почитаю твои оригинальные решения. Ну, а герои, которые первыми правильно ответят на все вопросы, получат призы и увидят свои имена на страницах Х. Но помни: в большинстве случаев вариант ответа засчитывается как правильный, только если к нему приложено подробное и ВЕРНОЕ объяснение. ОТВЕТЫ К ПРЕДЫДУЩЕМУ ВЫПУСКУ X-PUZZLEОтвет на пазл №1 "СЕТЕВОЙ ПАКЕТ"Так как в задании требуется определить MAC-адреса, то логично предположить, что пакет содержит Ethernet-заголовок, который должен стоять самым первым, поскольку является заголовком канального уровня. Если обратиться к стандарту IEEE 802.3, то можно узнать, что первые 6 байт Ethernet-заголовка содержат MAC-адрес получателя (00-50-56-C0-00-01), а следующие 6 байт MAC-адрес отправителя (00-0C-29-07-7E-86). Затем идут два байта определяющие тип пакета (0800h – "IP-пакет") и сразу за ними IP-заголовок. Если обратиться к RFC-791, в котором описан IP-заголовок, то можно узнать, что IP-адрес отправителя расположен на расстоянии 12 байт от начала IP-заголовка (в нашем случае байты c0h a8h 8eh 80h или в десятичном виде: 192.168.142.128). А IP-адрес получателя на расстоянии 16 байт от начала IP-заголовка (c0h a8h 8eh 01h или в десятичном виде: 192.168.142.1). Из поля "Протокол" IP-заголовка, которое расположено на расстоянии 9 байт от начала IP-заголовка, по значению 06 можно понять, что следом за IP-заголовком идет TCP-заголовок. TCP-заголовок описан в RFC-793, откуда можно узнать, что в самом его начале стоит порт отправителя (в нашем случае d8cch или 55500 в десятичном виде) и порт получателя (0087h или 135 в десятичном виде). Ответ на пазл №2 "НАША ТАЙНА"Закодированная фраза: "This is a rubric XPuzzle". Использован простейший алгоритм кодирования rot13, суть которого заключается в том, что он циклически сдвигает каждую букву латинского алфавита на 13 позиций вправо. Ответ на пазл №3 "БАЖНЫЙ PHP-СКРИПТ"Как раскриптовать PHP-скрипт я здесь описывать не буду, т. к. это заняло бы слишком много места. Рекомендую тебе по этой теме обратиться, например, к статье "TrueBug PHP Encoder" по адресу: http://madnet.name/news/21.html. Раскриптованный и избавленный от обфускации скрипт выглядит следующим образом:
Как видишь, переменная $dir поступает от пользователя без всяких проверок. Для избавления от бага перед вызовом system() следует обработать переменную $dir функцией escapeshellcmd() или escapeshellarg(), а еще лучше, чтобы в файле php.ini было установлено значение параметра magic_quotes_gpc в On, для автоматического экранирования данных, получаемых методами GET и POST. Ответ на пазл №4 "СЛУЧАЙНО ИЛИ НАРОЧНО?"Если внимательно присмотреться к числам, которые выдал генератор случайных чисел, то можно заметить, что все они без исключения делятся на 7 (соответствуют признаку делимости на 7). Поэтому генератор случайных чисел ни в коей мере не может считаться случайным.
Ответ на пазл №5 "РАСПОЗНАЙ ДЕВАЙС"Рис. 1 - разъем RJ-45 ПЕРВЫЙ ПАЗЛ "ЛЮБОВЬ И НЕНАВИСТЬ"Программа hatelove.com (61 байт), код которой показан на рисунке, выводит на экран фразу "I hate ][akep!". Как ты понимаешь это неправильная жизненная позиция. Требуется исправить всего один байт, чтобы программа выводила на экран фразу "I love ][akep!". Программу hatelove.com можно взять на диске к журналу. ВТОРОЙ ПАЗЛ "ОЧЕНЬ ПРОСТОЙ ШИФР"Расшифруй фразу, показанную на рисунке:
ТРЕТИЙ ПАЗЛ "ЛОГИЧЕСКАЯ ЗВЕЗДА"Вставь вместо знаков вопроса логические операции "and", "xor" или "or", а также число в середину, чтобы логическая звезда заработала. Т. е. должны выполняться логические соотношения, указанные возле линий. ЧЕТВЕРТЫЙ ПАЗЛ "ЛОВЛЯ БАГОВ"В показанные участки кода на Си, программистами были умышленно внесены ошибки, чтобы код не могли скомпилировать ламеры. Твоя задача найти эти ошибки и устранить их. |