Разбор пакета игры "Правила войны"

Discussion in 'Социальные сети' started by StopSpam, 20 Oct 2011.

  1. StopSpam

    StopSpam Banned

    Joined:
    5 Jul 2011
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    Первичный разбор пакета необходим для написания бота для этой игры. Напишу я или вы, мне без разницы.
    Опишу структуру пакета используя исходный код игры.
    Используемые программы: Opera, Charles, Flash Decompiler Trillix

    Настроим браузер под использование локального прокси Charles.
    Зайдем в игру vkontakte.ru/rules_of_war и запишем любой пакет передаваемый на сервер игры и проанализируем его.
    Например пакет отправки одного юнита на окупацию чужого сектора:
    Code:
    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 запросов.
    Нас может смутить только эта часть:
    Code:
    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, для меня это был http://cs10314.vkontakte.ru/u7878692/6261fe16e87cc8.zip.
    Скачиваем и переименуем в game.swf.
    Открываем game.swf с помощью Flash Decompiler Trillix.
    Поиском ищем в коде ActionScript где упоминается наша страничка на которую был запрос segment.ashx.
    Находим этот блок кода и начинаем подыматься от одной функции до другой складывая общую картину происходящего в игре.

    Имеем функцию отправляющую команды серверу JsonCallCmd("SendUnit", this._dto)
    Видим что как раз в первом параметре и указывается наш server-method.
    А во втором параметре принимает this._dto
    Немного полистав исходники игры видим что это и есть наш структурированный список который игра складывает из множества параметров комманды в которую попадает уникальный идентификатор юнита, сектора, вашего сектора, случайное число и номер пакета по порядку.
    Code:
    {"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
    ищем его в коде, складываем все в кучу и получаем такой алгоритм
    Code:
    sign-code = md5("The Matrix has you..." + this._dto + "POST" + userSocialId + userSocialAuthKey)
    this._dto нам известен, userSocialId - наш vkID и userSocialAuthKey - наш authKey

    все, мы знаем с чего состоит пакет, можно писать бот...

    [все хэшы и идентификаторы были изменены]

    листинг методов и комманд из исходника игры Скачать файл war.rar