Первичный разбор пакета необходим для написания бота для этой игры. Напишу я или вы, мне без разницы.
Опишу структуру пакета используя исходный код игры.
Используемые программы: Opera, Charles, Flash Decompiler Trillix
Настроим браузер под использование локального прокси Charles.
Зайдем в игру vkontakte.ru/rules_of_war и запишем любой пакет передаваемый на сервер игры и проанализируем его.
Например пакет отправки одного юнита на окупацию чужого сектора:
PHP код:
POST /Geo/Segment02/segment.ashx HTTP/1.0
User-Agent: Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.9.168 Version/11.51
Host: 209.190.120.226
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: ru-RU,ru;q=0.9,en;q=0.8
Accept-Encoding: gzip, deflate
Referer: http://vkontakte.ru/swf/api_wrapper2_0.swf?_stV=2
Content-Length: 144
Content-type: text/html
sign-code: 415fe1542211bc6a3714f1568e566582
locale-name: ru-RU
signin-authKey: 88749ca57e50feba2f6267c7743d75f4
signin-userId: vk8570512
server-method: SendUnit
client-ver: 63
{"o":{"ti":{"t":{"t":{"2":1}},"o":3,"r":null},"t":4023659,"o":4007618,"di":null},"r":2909,"t":1319098626034,"g":366575,"u":1319098259459,"v":63}
из пакета понятно что игра отправляет POST запрос на страницу 209.190.120.226/Geo/Segment02/segment.ashx который соответствует всем стандартам JSON запросов.
Нас может смутить только эта часть:
PHP код:
sign-code: 415fe1542211bc6a3714f1568e566582
locale-name: ru-RU
signin-authKey: 88749ca57e50feba2f6267c7743d75f4
signin-userId: vk8570512
server-method: SendUnit
client-ver: 63
{"o":{"ti":{"t":{"t":{"2":1}},"o":3,"r":null},"t":4023659,"o":4007618,"di":null},"r":2909,"t":1319098626034,"g":366575,"u":1319098259459,"v":63}
видим неизвестный хэш в параметре sign-code и знакомые authKey получяемые от ВК и свой userId vk8570512
также нужно узнать для чего нужен параметр server-method и собственно сама информационная нагрузка в виде структурного списка параметров.
Открываем vkontakte.ru/rules_of_war, смотрим исходный код страницы и берем адрес самой игры в поле plarium_game_url
Скачиваем и переименуем в game.swf.
Открываем game.swf с помощью Flash Decompiler Trillix.
Поиском ищем в коде ActionScript где упоминается наша страничка на которую был запрос segment.ashx.
Находим этот блок кода и начинаем подыматься от одной функции до другой складывая общую картину происходящего в игре.
Имеем функцию отправляющую команды серверу JsonCallCmd("SendUnit", this._dto)
Видим что как раз в первом параметре и указывается наш server-method.
А во втором параметре принимает this._dto
Немного полистав исходники игры видим что это и есть наш структурированный список который игра складывает из множества параметров комманды в которую попадает уникальный идентификатор юнита, сектора, вашего сектора, случайное число и номер пакета по порядку.
PHP код:
{"o":{"ti":{"t":{"t":{"2":1}},"o":3,"r":null},"t":4023659,"o":4007618,"di":null},"r":2909,"t":1319098626034,"g":366575,"u":1319098259459,"v":63}
теперь попробуем узнать что такое sign-code
ищем его в коде, складываем все в кучу и получаем такой алгоритм
PHP код:
ign-code = md5("The Matrix has you..." + this._dto + "POST" + userSocialId + userSocialAuthKey)
this._dto нам известен, userSocialId - наш vkID и userSocialAuthKey - наш authKey
все, мы знаем с чего состоит пакет, можно писать бот...