Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #77, МАЙ 2005 г.

Веселая карусель

S. Andrey (sandrey@vens.ru)

Хакер, номер #077, стр. 077-056-2


Однако впереди были выходные, хотелось расслабиться, а не думать о программировании. И поэтому я забил на все и отправился загород с твердым решением по возвращении домой написать бота. Даже двух.

Задача первого — минимизировать трафик, автоматизировать хождение по сайту (нужно, что бы просто отображалась картинка с баллом, человек указывал написанное число и бот отправлялся искать следующую страницу с очками). Так же я захотел сохранять локально все картинки с баллами, чтобы потом сравнить их между собой и узнать, различаются ли они на самом деле. Задача второго бота – если картинки на самом деле одни и те же, то автоматизировать процесс распознавания номера и поставить все на полный автомат.

[уходим в кодинг]

Приехав после отдыха домой, я сразу принялся за работу. Конкуренты меня уже не по-детски делали и надо было догонять обидчиков. Я решил сделать работу бота как можно реалистичнее. Был составлен файл (links.php), каждая строка которого представляла собой URL странички, на которую нужно перейти. Конечно, лучше всего было бы скачивать страницу, парсить ее, находя все тэги <a>, а затем случайным образом переходить по одной из найденных ссылок. Но для этого пришлось бы загружать всю пагу, а она может оказаться очень увесистой, поэтому, что бы достичь поставленной цели – минимизации трафика – я так делать не стал и принялся программировать.

Основная фишка заключается в том, что если выигрышная форма была на странице, то оно описывалось в JavaScript-функции в самом начале html-странички (до тэга <body>) и это можно было легко обнаружить.

Как только я посмотрел на код этой функции, сразу заметил одно забавное обстоятельство. Картинка с изображением баллов – это статичный gif файл, а не вывод генерирующего крипта! Довольно странная реализация, что говорить.

[пишем бота]

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

Поскольку мой паук может длительное время бродить по сайту, прежде чем найдет страничку с баллами, то нужно сказать PHP, чтобы он не завершал скрипт из-за того, что тот выполняется дольше max_execution_time. Это можно сделать, вызвав функцию set_time_limit(0).

Сразу после того, как бот нашел страничку с баллами и пользователь уже ввел число, изображенное на картинке ($mybal), выполняется копирование картинки в папку с именем, совпадающим с количеством баллов. Потом данные отправляются на сервер оператора сотовой связи, в точности, как если бы игрок заполнил форму на сайте и нажал кнопку "Пополнить счет".

Основной цикл, который осуществляет перемещения по сайту, работает следующим образом. Из нашего, заранее подготовленного файла с адресами, случайным образом выбирается один URL и для него вызывается функцию getPage(), которая возвращает 1, если бот наткнулся на страницу с окном ввода баллов и 0 в противном случае.

В ней нет ничего сложного: сначала устанавливается соединение с игровым сервером (посредством открытия сокета – fsockopen()), затем у сервера запрашивается страница, имеющая URL $link (посредством fputs($fp, $request)), далее ищем на странице ключевую фразу по которой мы определяем, является ли эта страница выигрышной. Ключевая фраза – это URL скрипта, который добавляет нам баллы. Далее мы берем пятую строчку после той, где найдена ключевая фраза, извлекаем из нее значения полей, которые нужно передать по нажатию кнопки "Пополнить счет", а также URL картинки с баллами, и из всего этого добра формируем собственную форму, которую и показываем человеку, занимающемуся накруткой.

Назад на стр. 077-056-1  Содержание  Вперед на стр. 077-056-3