Может кому пригодиться ... Первый пакет отправляемый клиентом(v3.00) серверу(v3.20)
(Приводится без TCF3PacketHead)
- Код: Выделить всё
Client2ServerConnect {
const char Magic = F4
DWORD = ?? // У меня == 2C 01
const char String[3] = '100'
char XstrLen
char Xstr[XstrLen] == ?? // [См. 1]
DWORD ip // [См. 2]
SHORT client_port // [См. 3]
char MAC[6] // У меня мак 00:11:D8:2F:2B:44
bool a //
bool b //
bool c // [См. 4]
char nickLen
char nick[nickLen] [См. 5]
}
[1] Загадочная последовательность символов из диапазона '0' .. '9'. Сервер просматривает эту строку и если она ему не понравиться то рвет соединение, что бы использовать повторно удалите <path_to_server_prog>/Data/data3.cfd
У меня было [A]32 31 31 39 33 36 32 35 31 37 == [10.]'2119362517'
[2] IP в формате возвращаемом функцией inet_addr() то есть четырехбайтовое целое.
inet_addr(‘192.168.5.5’) == C0 A8 05 05
[3] Вроде, если на самом деле пакеты к серверу идут от другого порта то рвет соединение.
htons(src_port(37981)) == 5D 94
[4] a, b , c - 3 байта, описывающие пол, активность(видимо) и еще что то
У меня a = false, b = true, c = true, получается последовательность 0 1 1.
[5] У меня [7]'guest00'
Вот мой зашифрованный пакет (Весь, вместе с шапачгой)
d6 28 00 00 d8 01 2f 1e 00 01 38 01 05 04 0f 04
0e 0b 0f 0a 0b fd 96 3a 45 1c d6 43 55 9d 69 6c
0c 49 4b 4a 4b 2a 3b 2a 23 25 62 63
Вместе с этип пакетом серверу отправляется нжеследующий пакет
d6 08 00 00 d6 2c 2e 2a 5c 51 5a 5d
Без него подключение к каналу main не происходит, видимо это joinChannel('main') или joinChannel(DEFAULT). Дешифровать естестна не удалось
Вот мой дешифрованый пакет (без заголовка):
// KEY = 2C, KEY++
F4 2C 01 31 30 30 [A]32 31 31 39 33 36 32 35 31 37 C0 A8 05 05 5D 94 00 11 D8 2F 2B 44 00 01 01 [7] 'g' 'u' 'e' 's' 't' '0' '0'
____________________________________________________________________________________________________
Далее пакет от сервера который дешифровать у меня не получилось.
____________________________________________________________________________________________________
Далее в этом сеансе я пишу ‘:kishlak:’ в мэйн ...
zlib(‘:kishlak:’) == 78 9C B3 CA CE 2C CE C8 49 CC B6 02 00 10 E7 03 5C
// Без заголовка, че происходит с ключем я хз, может это уже не потоковое шифрование, а шифрование буфером ...
// +1+5+1-3 +1+5+1-3 +1+5+1-3 +1+5+1-3 +1+5+1-3 +3
key ?? ?? 2C 2D 32 33 30 31 36 37 34 35 3A 3B 38 39 3E 3F 3C 3D 42 43 40 43
decrypt ?? ?? [4] m a i n 78 9C B3 CA CE 2C CE C8 49 CC B6 02 00 10 E7 03 5C // См. ZLIB
crypt D6 1F 28 40 53 5A 5E 49 AA 84 FE FB 16 F5 F0 70 F2 89 3E 3D 52 A4 43 1F
_____________________________________________________________________________________________________
В ответ сервер присылает пакет(Уведомляет о том что и кто написал в канале к которому мы подключены):
// Без заголовка, зашифрован
1D 21 D2 BB 11 10 4B 83 1C 74 7B 72 72
65 82 AC EA EF 0E ED EC 6C EA 91 2A 29 3A CC 2F 71
Разшифровывается почему то опять потоково, ключик, по состоянию на первый байт == 0x10.
То есть Key = 0x10 ... ксорим ... Key++ ... ксорим ...
Получаем:
0D 30 C0 A8 05 05 5D 94 [4] m a i n
78 9C B3 CA CE 2C CE C8 49 CC B6 02 00 10 E7 03 5C
Он же:
0D 30 inet_addr(IP) htons(PORT) [4]'MAIN' ZLIB(‘:kishlak:’)
______________________________________________________________________________________________________
Короче говоря шифрация вроде бы и простая, но в то же время че и как понять не могу. Надо бы людей которые по ДЗЕН ботают подтянуть, под Идой работать не умею, а под Olly запускал, но нервов не хватило в ассемблерном листинге ковыряться, тем более что в RichEdit API не разбираюсь и как там прога получает текст я без понятия(да , стыдно)
P.S. Распакованный клиент кину еси че ( аспр отломан, импорт восстановил, вроде работает ) =)
Добавлено спустя 7 минут 13 секунд:... удалите <path_to_server_prog>/Data/data3.cfd
Не удаляйте, а занулите.
Под линухом вот так делаю:
echo -n "" > ~/.wine/drive_c/Program\ Files/CommFort_server/Data/data3.cfd