eXeL@B —› Программирование —› Клиент-Сервер (Delphi) |
<< . 1 . 2 . 3 . >> |
Посл.ответ | Сообщение |
|
Создано: 28 февраля 2012 07:02 · Личное сообщение · #1 Приветствую всех! Есть флеш приложение, которое общается с сервером через порт по средствам TCP пакетов. Надо сделать простейшее приложение логина на сервер и получение любых данных. По идее если обращение из флеш, структуру пакетов можно откопать в нём же. Обычно сталкивался с GET, POST запросами, там всё ловил через HttpAnalyzerStd. Через что лучше работать с пакетами? Ставил различные снифферы пакетов, что-то всё работает очень сомнительно (когда в приложении куда-либо обращаешься, никаких посылок не ловится, а по идее данные должны запрашиваться от сервака). Вопросы: 1. Какой софт для анализа лучше в данном случае? (под винду) 2. С чего начать копать (в теории) PS: Если уж совсем не в тему форума, киньте в оффтоп, но там мало кто читает ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh |
|
Создано: 24 апреля 2013 04:44 · Личное сообщение · #2 да с длиной ты прав, и в коде нашёл Code:
xDvKx пишет: encodeToNetwork(this._serial, param1) this._decoder.getPacket(); в языке не понимаю, но думаю это то что нужно я в общем тоже не писал на нём, так интуитивно не сложно вроде... там рядом есть ещё HttpConnector, один в один, т.е. http пакеты передаются также(ну или должны были передоваться или когда-то передавались), т.к. сейчас они все не шифрованые и не пожатые (всё что отлавливает NetworkMiner открывается в чистом виде, картинки например) С первого взгляда похоже, но на деле я там шифрования так и не нашёл, как глубоко не лазил encodeToNetwork она там ниже по коду Code:
явно ничего не декодирует... _decoder.newData и _decoder.getPacket() это из модуля 0verkingsDec0der Code:
тут тоже о кодировании речи нет вот это странные функции Code:
но если это и есть шифрование, будет смешно что при коннекте по TCP служит доступом я так и не понял... если в http там куки или просто параметры login/pass передаются, то тут как? Никаких параметров не передаётся вроде нигде Code:
----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh |
|
Создано: 24 апреля 2013 09:18 · Поправил: xDvKx · Личное сообщение · #3 Авторизация не при конекте происходит. После него первый пакет идет от клиента на сервер, в нем скорее всего и есть логин и пароль. Code:
Больше ничего не делает static function inPlace(param1:ByteArray) : void static function inPlace2(param1:ByteArray) : void скорее всего это и есть шифрование, но в flash у ByteArray есть интересная вещь это compress(algorithm:String):void, думаю может массив пакуется, стандартным способом, а потом шифруется inPlace, но не было времени разобраться с этим |
|
Создано: 24 апреля 2013 10:04 · Поправил: Isaev · Личное сообщение · #4 xDvKx пишет: но в flash у ByteArray есть интересная вещь даже бы не подумал ) там ещё и deflate/inflate есть, но это как я понял для полного архива с "заголовком", тут скорее действительно compress, будет время попробую найти в скриптах ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh |
|
Создано: 24 апреля 2013 10:25 · Личное сообщение · #5 |
|
Создано: 24 апреля 2013 10:29 · Личное сообщение · #6 |
|
Создано: 24 апреля 2013 11:01 · Поправил: reversecode · Личное сообщение · #7 |
|
Создано: 24 апреля 2013 12:07 · Личное сообщение · #8 xDvKx compress/uncompress для ByteArray нашёл только в ConfigSerializerAMF, но он используется мало где(при загрузке mesh, skelet и ещё пары вещей), а в данном случае мы его не трогаем, как ни странно deflate/inflate вообще нигде не встречается. reversecode пишет: и дальше формат пакета или что ищем? Это, да... но или пакета я этого не ловлю, или ловлю так же пошифровано и пожато... Ищем именно момент как они жмутся/шифруются reversecode пишет: пора уже кому то зарегить левый акк, снять pcap файл ок, сделаю на досуге ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh |
|
Создано: 24 апреля 2013 18:12 · Личное сообщение · #9 |
|
Создано: 24 апреля 2013 18:57 · Поправил: Isaev · Личное сообщение · #10 |
|
Создано: 24 апреля 2013 19:26 · Поправил: reversecode · Личное сообщение · #11 |
|
Создано: 24 апреля 2013 21:05 · Личное сообщение · #12 reversecode пишет: идет обмен авторизацией по tcp, с оверкилом.ру Известно, что первые 4 байта это размер пакета, дальше сам пакет. Но пакет сжат или шифрован, а может и то и то. Вопрос в том как привести пакет в читаемый вид. Пример первых двух пакетов 1. от клиента 0000005a116e20248c8586c8fa6b5794d50c8d8eb8c1f2c6c3c9cecad0d1ccccd3d5cfd3d5d8d703dad8d5d60adad9df0e1013121414e2131517eeed1ceeb9babd2e32becf24372d22f6f5f6fb08362b3438fb4044d2d16787b46bdfb6db 2.ответ от сервера 000001e816d91a09504be20e475a525b56535455d6d45e595a5b2ce95f69606162030066746768695a166d836e6f70110e7474757687787a7a014347c97fe88114317b978889201a8c8b9e5d2c60106213634966166818694a6b5a6d5b9f88a8a26ba5a5a6a9a8a9aaabb0ad34b1b039b4c3b4b6b7f92b9ce309f92dbec0c0c3cec7c4c5c64745cfcacbccbd79d0dad1d2d37471d7e5d8d9dacb87def4dfe0e1a29ee5b7f5e7e8e9aa97f2eef287f32d536659696a6066606d1b5d6a4b6e766a706a51747b7a6d462c3c2e2d6f7c5d80887863837b5a84827d86593f4e4140848a8498788e969f6d8b9f916a50605251959b95a984a6ac88afaf7eb683adb4a6b48066756867b4aabdbf8db0b1bec5bfc6a1c3c9bfbdd1adc3c8c19a809093979899989a9f9da1a29d9d8e8dcfd2e4dae1e1c4d6e4dce4cce2eaf3caede3e5bea4b3a6a5f6e801f6eff90000cff602f6f700f9030ad4bac9bcbb0f050d16e105060c180e15150915ec20121321fe1ef3f8f0d61b17232b1edceafac756c0389ba51512f4f09c131393f7161afca09b001d009ea3a22207af050409a60da92cadb3aeb1342fb4999bf46cde8ae1e2c223c5ec75df802aebecfe0686efd18a528c8d5c1c5e3e07309d2543180eb83a10131213a9c9f6ad211a5c8effeb29f34021222d5c5657595d5b63625f66 |
|
Создано: 24 апреля 2013 21:15 · Поправил: reversecode · Личное сообщение · #13 в пакете не символы для прочтения. поэтому нужно писать десереализатор который разбирает пакет и будет показывать какое поле за что отвечает итд в декомпиленом флеше есть какая то отладочная дебаг инфа включите ее если это можно это поможет для большего понимания работы протокола *****Decoder.as расшифровывает входящий пакет |
|
Создано: 24 апреля 2013 21:24 · Поправил: xDvKx · Личное сообщение · #14 |
|
Создано: 24 апреля 2013 21:27 · Поправил: reversecode · Личное сообщение · #15 |
|
Создано: 24 апреля 2013 22:51 · Личное сообщение · #16 |
|
Создано: 24 апреля 2013 23:14 · Личное сообщение · #17 |
|
Создано: 24 апреля 2013 23:18 · Поправил: xDvKx · Личное сообщение · #18 вот такой дамп расшифрованный получается Code:
в нем нет не логина не пароля |
|
Создано: 24 апреля 2013 23:25 · Поправил: reversecode · Личное сообщение · #19 это входяший или исходящий пакет? логин в исходяшем должен быть Code:
если нет, значит как то не так десериализировали пакет либо мы чего то не так понимаем но сложного там точно ничего нет, просто время нужно и все получится) пробуйте StaticSerial.as *****ClientSerial.as это классы которые упаковывают и распаковывают примитивы поэтому inPlace/inPlace2 это еще далеко не вся упаковка это только поверхностная |
|
Создано: 25 апреля 2013 05:00 · Поправил: Isaev · Личное сообщение · #20 xDvKx пишет: в нем нет не логина не пароля ну в моём случае там логина и пароля и не будет, если не через клиент только заходить(отдельно скачаный) там тянутся куки от одной из соц. сетей xDvKx пишет: вот такой дамп расшифрованный получается Это ты inPlace2 применил просто? он же может быть сначала сжат, потом закодирован или наоборот xDvKx пишет: Отладочный лог Это как включается? reversecode пишет: в чем именно затык? Затык наверное в том, что где-то это всё жмётся в zlib или что-то похожее, а где пока не удалось найти я в inPlace2 не совсем понимаю начало: Code:
из документации: expression1 *= expression2 "Присваивает выражению expression1 значение выражения expression1 * expression2." т.е. как в сях... Но '_loc_2' то в начале не определено, значит =0, так? зачем тогда половина длины, если она с нулём перемножается? можно просто выкинуть _loc_2 или как это работает? Вроде выходит что-то читаемое частично к концу (непечатные символы заменены) Code:
Видимо они всё же не пакуются... Остаётся только десериализировать остальное... Но имени персонажа так и не нашёл ) Хотя эти настройки выше уже не общие, а от конкретного персонажа не понял 2 момента в начале подключения: 1. откуда получили номер порта сервера? 2. откуда взялась строка node004 при запросе его IP (в скриптах ни то ни то явно не задано) ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh |
|
Создано: 25 апреля 2013 08:53 · Поправил: reversecode · Личное сообщение · #21 Isaev пишет: я в inPlace2 не совсем понимаю начало: длинна деленая на 2 почему это ноль? она нулем никогда не бывает потому что в ****Decoder.as _loc_1 = this._data.readInt(); читается длинна this._data.readBytes(_loc_2, 0, _loc_1); читается в массив, значит и длинна тоже выставляется Isaev пишет: Затык наверное в том, что где-то это всё жмётся в zlib или что-то похожее, а где пока не удалось найти StaticSerial.as ****ClientSerial.as |
|
Создано: 25 апреля 2013 09:53 · Личное сообщение · #22 |
|
Создано: 25 апреля 2013 09:55 · Личное сообщение · #23 |
|
Создано: 25 апреля 2013 10:00 · Поправил: Isaev · Личное сообщение · #24 |
|
Создано: 25 апреля 2013 13:01 · Личное сообщение · #25 reversecode пишет: это входяший или исходящий пакет? Это полный дамп пакетов, по которому прошелся inPlace и второй вариант inPlace2, ну чтобы наверняка ) Isaev пишет: ну в моём случае там логина и пароля и не будет, если не через клиент только заходить(отдельно скачаный)там тянутся куки от одной из соц. сетей Думаю что логин должен быть, а вместо пароля authToken. Code:
Isaev пишет: Это как включается? Vizzy Flash Tracer Isaev пишет: Вроде выходит что-то читаемое частично к концу (непечатные символы заменены) Это как получилось ? |
|
Создано: 25 апреля 2013 13:23 · Личное сообщение · #26 |
|
Создано: 25 апреля 2013 13:24 · Поправил: Isaev · Личное сообщение · #27 xDvKx пишет: Это как получилось ? это просто inPlace2 к пакету(без длинны соответственно). inPlace2 как я понял для принятия пакета, а inPlace для отправки. reversecode пишет: а какая цель вообще этих копаний с этим флешем? цель научиться работать с неизвестными протоколами ну и потом пару софтинок можно написать для себя, чтобы утвердиться и порадоваться) там в процессе игры создаётся собственная большая база знаний, хочу сделать её твёрдую копию... ручками это переписывать пару суток будешь, при дальнейшем расширении снова дописывать, да не инересно потому полностью правильно реализовывать весь се/де-реализатор протокола может и не придётся, но кое-что из него надо будет перенять, благо весь код доступен но для начала надо законнектиться, а по сему остались открытыми 2 вопроса выше ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh |
|
Создано: 25 апреля 2013 13:45 · Личное сообщение · #28 |
|
Создано: 25 апреля 2013 13:49 · Личное сообщение · #29 Isaev пишет: не понял 2 момента в начале подключения:1. откуда получили номер порта сервера?2. откуда взялась строка node004 при запросе его IP(в скриптах ни то ни то явно не задано) Насяльника! Ты исходный код страницы смотрел? Порт и адрес сервака передаются через переменную flashvars. И не только они. Там целый букет переменных flash получает при инициализации... А эти переменные соответственно генерятся скриптами сервака. По-поводу Code:
Вот как оно выглядит в ассмблерном виде. Code:
* означает что переменная неопределенного типа. Перед присвоением происходит приведение к типу int. |
|
Создано: 25 апреля 2013 14:36 · Поправил: Isaev · Личное сообщение · #30 xDvKx пишет: Значит где то я натупил видимо... ну я тоже не delphi делаю, сверим если что JohnyDoe пишет: Ты исходный код страницы смотрел? одна голова хорошо... Там-то я и не глянул. JohnyDoe пишет: * означает что переменная неопределенного типа. да я уже нашёл в документации, спс xDvKx пишет: Vizzy Flash Tracer Оно без FlashDevelop не работает? ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh |
|
Создано: 25 апреля 2013 17:29 · Поправил: xDvKx · Личное сообщение · #31 |
<< . 1 . 2 . 3 . >> |
eXeL@B —› Программирование —› Клиент-Сервер (Delphi) |