Crazy ball - RuCTF 2012 Quals
Crazy ball [ppc] / 200 баллов
Первым делом, я зашёл на указанный адрес браузером и получил в ответ странные наборы символов в большом количестве. Чуть позже стало понятно, что это арканоид, в котором можно за 1 шаг передвигать каретку на 1 клетку влево или вправо.
После каждого движения шарика можно было передать один из трёх управляющих символов: a - движение влево, s - пропуск хода, d - движение вправо. Цель - не дать шарику пролететь ниже каретки, пока тот собирает звёздочки. Позже стало понятно, что шарик действительно crazy и его траектория иногда становится очень странной, а в некоторых случаях он вообще пролетал через каретку и игра заканчивалась. Иногда он приземлялся на каретку и летел половину игрового поля над ней и лишь потом отталкивался.
Изначально был написан простой вариант алгоритма движения каретки: шарик двигается вправо - двигаем каретку вправо, двигается влево - двигаем каретку влево. Никаких проверок на текущую позицию каретки, никаких предсказаний траектории шарика, всё просто и банально. Но не сработало. Бывало, в самом начале шар улетал мимо, бывало, почти под конец убивался. Алгоритм постепенно усложнялся, время игры удлинялось, но пройти полностью так и не удавалось.
Когда я уже забил на это задание, удалил все свои костыли, оставив базовый алгоритм, который был в самом начале, и отдал скрипт товарищу... случилось чудо. Ничего не меняя в скрипте, он запустил его и спустя примерно 10 минут мы получили флаг. С первой же его попытки. Странно, но вот такой скрипт получился в итоге: crazyball.php.
IP:10000. Удачи!
Первым делом, я зашёл на указанный адрес браузером и получил в ответ странные наборы символов в большом количестве. Чуть позже стало понятно, что это арканоид, в котором можно за 1 шаг передвигать каретку на 1 клетку влево или вправо.
***** ***** ***** *****
* * * * *
***** * * * * ***
* * * ** * * *
* * *** * ***** * *
*** *** * *** *****
* * * * ** * * * *
* * * * * * *
* * * * * * *
***** *** *** ***** *** *
o
~~
После каждого движения шарика можно было передать один из трёх управляющих символов: a - движение влево, s - пропуск хода, d - движение вправо. Цель - не дать шарику пролететь ниже каретки, пока тот собирает звёздочки. Позже стало понятно, что шарик действительно crazy и его траектория иногда становится очень странной, а в некоторых случаях он вообще пролетал через каретку и игра заканчивалась. Иногда он приземлялся на каретку и летел половину игрового поля над ней и лишь потом отталкивался.
Изначально был написан простой вариант алгоритма движения каретки: шарик двигается вправо - двигаем каретку вправо, двигается влево - двигаем каретку влево. Никаких проверок на текущую позицию каретки, никаких предсказаний траектории шарика, всё просто и банально. Но не сработало. Бывало, в самом начале шар улетал мимо, бывало, почти под конец убивался. Алгоритм постепенно усложнялся, время игры удлинялось, но пройти полностью так и не удавалось.
Когда я уже забил на это задание, удалил все свои костыли, оставив базовый алгоритм, который был в самом начале, и отдал скрипт товарищу... случилось чудо. Ничего не меняя в скрипте, он запустил его и спустя примерно 10 минут мы получили флаг. С первой же его попытки. Странно, но вот такой скрипт получился в итоге: crazyball.php.