Дмитрий DarkByte Москин

Мой блог, да.
logo

Crazy ball - RuCTF 2012 Quals

Опубликовано 18.03.2012 автором Дмитрий Москин
Crazy ball [ppc] / 200 баллов
IP:10000. Удачи!


Первым делом, я зашёл на указанный адрес браузером и получил в ответ странные наборы символов в большом количестве. Чуть позже стало понятно, что это арканоид, в котором можно за 1 шаг передвигать каретку на 1 клетку влево или вправо.

*****         *****  *****  *****
* * * * *
***** * * * * ***
* * * ** * * *
* * *** * ***** * *

*** *** * *** *****
* * * * ** * * * *
* * * * * * *
* * * * * * *
***** *** *** ***** *** *


o
~~

После каждого движения шарика можно было передать один из трёх управляющих символов: a - движение влево, s - пропуск хода, d - движение вправо. Цель - не дать шарику пролететь ниже каретки, пока тот собирает звёздочки. Позже стало понятно, что шарик действительно crazy и его траектория иногда становится очень странной, а в некоторых случаях он вообще пролетал через каретку и игра заканчивалась. Иногда он приземлялся на каретку и летел половину игрового поля над ней и лишь потом отталкивался.

Изначально был написан простой вариант алгоритма движения каретки: шарик двигается вправо - двигаем каретку вправо, двигается влево - двигаем каретку влево. Никаких проверок на текущую позицию каретки, никаких предсказаний траектории шарика, всё просто и банально. Но не сработало. Бывало, в самом начале шар улетал мимо, бывало, почти под конец убивался. Алгоритм постепенно усложнялся, время игры удлинялось, но пройти полностью так и не удавалось.

Когда я уже забил на это задание, удалил все свои костыли, оставив базовый алгоритм, который был в самом начале, и отдал скрипт товарищу... случилось чудо. Ничего не меняя в скрипте, он запустил его и спустя примерно 10 минут мы получили флаг. С первой же его попытки. Странно, но вот такой скрипт получился в итоге: crazyball.php.