![]() |
eXeL@B —› Программирование —› Клиент-Сервер (Delphi) |
<< . 1 . 2 . 3 . |
Посл.ответ | Сообщение |
|
Создано: 28 февраля 2012 07:02 · Личное сообщение · #1 Приветствую всех! Есть флеш приложение, которое общается с сервером через порт по средствам TCP пакетов. Надо сделать простейшее приложение логина на сервер и получение любых данных. По идее если обращение из флеш, структуру пакетов можно откопать в нём же. Обычно сталкивался с GET, POST запросами, там всё ловил через HttpAnalyzerStd. Через что лучше работать с пакетами? Ставил различные снифферы пакетов, что-то всё работает очень сомнительно (когда в приложении куда-либо обращаешься, никаких посылок не ловится, а по идее данные должны запрашиваться от сервака). Вопросы: 1. Какой софт для анализа лучше в данном случае? (под винду) 2. С чего начать копать (в теории) PS: Если уж совсем не в тему форума, киньте в оффтоп, но там мало кто читает ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh ![]() |
|
Создано: 25 апреля 2013 20:45 · Личное сообщение · #2 |
|
Создано: 25 апреля 2013 21:35 · Поправил: xDvKx · Личное сообщение · #3 |
|
Создано: 02 мая 2013 19:31 · Поправил: Isaev · Личное сообщение · #4 Там работа с кодированными потоками, основная функция Code:
Это функции из библиотеки Пробую перевести, но что-то я не понимаю для чего в readRawVarint32 читается из потока 15 байт для получения 32битного значения? Или она как-то иначе работает? Читается по 1 байту и более логично, хотя в итоге для обычного int читается до 5 байт всё равно, вместо 4... плюс ещё до 5 может отбрасываться... ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh ![]() |
|
Создано: 06 мая 2013 14:05 · Поправил: SWR · Личное сообщение · #5 тут просто кодирование старший бит если 1 то нужно считать еще 1 байт, 0- конец декодированию. в каждом байте 7 информативных бит. int от 0 до 127 за кодируется в 1 байт. для чисел больше 268435455 (и отрицательных) потребуется 5 байт. а хвост с 5 байтами сделан для того что в потоке может быть число больше 4 байт (int64), а читается 4. Вот и прочитывается байты с взведенным 7м битом + 1 с нулевым. Для int64 их max 9 штук. 4 считали, осталось максимум 5 ![]() |
|
Создано: 07 мая 2013 05:11 · Поправил: Isaev · Личное сообщение · #6 допустим последовательность: d0 92 d2 c0 06 00 Packet.Data[0]=-48 (D0) Packet.Data[1]=-110 (92) Packet.Data[2]=-46 (D2) Packet.Data[3]=-64 (C0) Packet.Data[4]=6 (06) Packet.Data[5]=0 (00) M[0]=11010000 M[1]=10010010 M[2]=11010010 M[3]=11000000 M[4]=00000110 M[5]=00000000 N=01101000_00010100_10001001_01010000 - 1746176336 (после readRawVarint32, выход по идее правильный, если на бумажке нарисовать то же получится) N=00110100_00001010_01000100_10101000 - 873088168 (после decodeZigZag32, эта не совсем понятно что делать должна... делит на 2 и если деление было не на цело, то инвертирует результат вроде, логики не вижу в этом) ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh ![]() |
|
Создано: 07 мая 2013 15:06 · Поправил: SWR · Личное сообщение · #7 Zigzag32 это надстройка над пакером. переводит int32 в int64. и последний бит (младший) использует как знак. Если int32 отрицательный, инвертирует его (Это убирает старшие биты). Например: -1 (0xFF FF FF FF) превратится в 0x00 00 00 01 1 (0x00 00 00 01) => 0x00 00 00 02 -2 => 0x00000003 2 => 0x00000004 -3 => 0x00000005 3 => 0x00000006 Тем самым убирая избыточность упаковки если число отрицательно (5 байт требовало) А зигзаг и назвали из того, что числа идут зигзагом +-+-+-+- Code:
![]() |
|
Создано: 08 мая 2013 01:39 · Поправил: Isaev · Личное сообщение · #8 |
|
Создано: 12 мая 2013 22:40 · Личное сообщение · #9 Как расшифровать дату? читаются данные 8 Byte: 42 73 E9 9C BB 4E 50 00 день/месяц/год по идее как у этого сообщения, время примерно послеобеденное что-то ничего хорошего не выходит из этой цифры... Может какой-то инструмент показывает возможные представления даты? Если формат никсовый, должно быть 10 значное число по идее... а тут слишком большое... возможно так же, что порядок байтов обратный ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh ![]() |
|
Создано: 12 мая 2013 22:57 · Личное сообщение · #10 |
|
Создано: 13 мая 2013 00:45 · Поправил: Isaev · Личное сообщение · #11 reversecode а оно там не расшифровывается и не используется, просто записывается как double, посылается на сервер и так же сравниваются даты , т.е. большее double значение соответствует действительно поздней дате и потом она наверняка не зашифрована, просто в каком формате не известно в ActionScript есть свой формат для хранения дат? ps: а, вот! понял как) ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh ![]() |
<< . 1 . 2 . 3 . |
![]() |
eXeL@B —› Программирование —› Клиент-Сервер (Delphi) |