Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #121, ЯНВАРЬ 2009 г.

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. Раскриптованный и избавленный от обфускации скрипт выглядит следующим образом:

<?
if (isset($_GET[dir]))
{
$dir = $_GET[dir];
system("echo $dir");
}
?>

Как видишь, переменная $dir поступает от пользователя без всяких проверок. Для избавления от бага перед вызовом system() следует обработать переменную $dir функцией escapeshellcmd() или escapeshellarg(), а еще лучше, чтобы в файле php.ini было установлено значение параметра magic_quotes_gpc в On, для автоматического экранирования данных, получаемых методами GET и POST.

Ответ на пазл №4 "СЛУЧАЙНО ИЛИ НАРОЧНО?"

Если внимательно присмотреться к числам, которые выдал генератор случайных чисел, то можно заметить, что все они без исключения делятся на 7 (соответствуют признаку делимости на 7). Поэтому генератор случайных чисел ни в коей мере не может считаться случайным.

Ответ на пазл №5 "РАСПОЗНАЙ ДЕВАЙС"

Рис. 1 - разъем RJ-45
Рис. 2 - трансивер
Рис. 3 - точка беспроводного доступа
Рис. 4 - VPN-шлюз
Рис. 5 - Маршрутизатор
Рис. 6 - HASP-ключ

ПЕРВЫЙ ПАЗЛ "ЛЮБОВЬ И НЕНАВИСТЬ"

Программа hatelove.com (61 байт), код которой показан на рисунке, выводит на экран фразу "I hate ][akep!". Как ты понимаешь это неправильная жизненная позиция. Требуется исправить всего один байт, чтобы программа выводила на экран фразу "I love ][akep!". Программу hatelove.com можно взять на диске к журналу.

ВТОРОЙ ПАЗЛ "ОЧЕНЬ ПРОСТОЙ ШИФР"

Расшифруй фразу, показанную на рисунке:

ТРЕТИЙ ПАЗЛ "ЛОГИЧЕСКАЯ ЗВЕЗДА"

Вставь вместо знаков вопроса логические операции "and", "xor" или "or", а также число в середину, чтобы логическая звезда заработала. Т. е. должны выполняться логические соотношения, указанные возле линий.

ЧЕТВЕРТЫЙ ПАЗЛ "ЛОВЛЯ БАГОВ"

В показанные участки кода на Си, программистами были умышленно внесены ошибки, чтобы код не могли скомпилировать ламеры. Твоя задача найти эти ошибки и устранить их.

Содержание