CloneFort_server

Планы, идеология, архитектура и т.п.

Модератор: Модераторы

Аватара пользователя
koi8-r
новенький
Сообщения: 15
Зарегистрирован: 12.03.2008 12:30:10
Откуда: Североморск (Мурманск)

Сообщение koi8-r »

Chief писал(а):Все, снова в строю... Сегодня всковырну что нибудь ;)

Уррра =)
ValterG
незнакомец
Сообщения: 2
Зарегистрирован: 26.04.2008 11:28:14

Сообщение ValterG »

1) Ну так я жду пакеты(лучше hex наверно). Для начала можно 10-20, чтобы зря не напрягать трафик.
2) По поводу Олли и ловли алгоритма. Тут все просто : ставим бряк по доступу в память. Надо поставить именно на содержимое, т.к. иначе погрязнем в разборке заголовков. Правда у сервера наверняка куча thread-ов крутится и я не знаю как быстро этот бряк отработает - он сильно тормозит выполнение. Если через тормоза не прорываемся, то стаим аппаратный бряк на первую ячейку данных и ловим обработку. Тут все не просто : один или два раза нарвмеся на пересылку данных из одного буфера в другой.
Опять ставим бряк уже на новый буфер...
Сам к сожалению не могу заняться - запарка, да и настроения нет.
Chief
новенький
Сообщения: 74
Зарегистрирован: 26.09.2007 17:44:59

Сообщение Chief »

Черт... Сколько не бился, все равно разобраться в алгоритме шифрования не удается... Да и время все меньше и меньше свободного...
Chief
новенький
Сообщения: 74
Зарегистрирован: 26.09.2007 17:44:59

Сообщение Chief »

...Дешифровка возможна в случае если у злоумышленника окажутся на руках все пакеты, начиная с самого первого...

Хм... Стоит задуматься.
AV_tehnik
незнакомец
Сообщения: 1
Зарегистрирован: 30.09.2008 17:52:44

Сообщение AV_tehnik »

Здрастуйте, тема еще не умерла? возможно я задам глупый вопрос.... Что такое Хендл пользователя? Для чего он нужен ?
Chief
новенький
Сообщения: 74
Зарегистрирован: 26.09.2007 17:44:59

Сообщение Chief »

Предположительно для идентификации пользователей.
В данном случае - это socket handle, вообщем server->clients[n]->socket.
Аватара пользователя
koi8-r
новенький
Сообщения: 15
Зарегистрирован: 12.03.2008 12:30:10
Откуда: Североморск (Мурманск)

Сообщение koi8-r »

Очень похоже на то что шифрование идет потоком.
Каждый новый байт шифруется --key
Каждый 9-ый байт шифруется ((--key)+0x10)

То есть каждый раз шифруя 1 байт, программа уменьшает ключ на 1.
А каждые 8 байт информации программа уменьшает ключ на 1, затем прибавляет к ключу 0x10, а уже потом шифрует байт, далее следующие 8 байт ключ уменьшается на один, потом опять (key-1)+0x10 ...
Надеюсь понятно обьяснил)))
Шифруеься естестна обычным ксором.
Помните слова автора о том что не имея первого пакета невозможно восстановить всю цепочку ?
Правда возникли некоторые непонятки с последним байтом в пакете, он парыгнул на -2... Щаз уже времени нет разбираться, да и стоит ли ?
Думаю -2 это некая защита от переполнения, ну что бы наш (byte key) не перевалил за 255.
Chief
новенький
Сообщения: 74
Зарегистрирован: 26.09.2007 17:44:59

Сообщение Chief »

Если кто видел 4-ю версию, думаю поймут, почему 3-ей заниматься все же стоит ;)

Добавлено спустя 4 минуты 27 секунд:
koi8-r, зачОт за проделанную работу. Теперь, думаю пора начинать заниматься практической стороной. Пока время есть) :D
Аватара пользователя
koi8-r
новенький
Сообщения: 15
Зарегистрирован: 12.03.2008 12:30:10
Откуда: Североморск (Мурманск)

Сообщение koi8-r »

Приношу свои извинения, чет опять не сходиться. А ведь вчера еще все сходилось. Буду смотреть дальше :(
Видимо это частный случай.
Последний раз редактировалось koi8-r 28.12.2008 15:19:46, всего редактировалось 1 раз.
Chief
новенький
Сообщения: 74
Зарегистрирован: 26.09.2007 17:44:59

Сообщение Chief »

:D Может уже общими усилиями клиент напишем похожий)))))
Аватара пользователя
koi8-r
новенький
Сообщения: 15
Зарегистрирован: 12.03.2008 12:30:10
Откуда: Североморск (Мурманск)

Сообщение koi8-r »

Да уже чисто принципиально хочется разобраться в протоколе :) Да и неплохо что бы чат был мультипротокольный, в том числе и с поддержкой комфорта3.
Аватара пользователя
koi8-r
новенький
Сообщения: 15
Зарегистрирован: 12.03.2008 12:30:10
Откуда: Североморск (Мурманск)

Сообщение koi8-r »

Может кому пригодиться ... Первый пакет отправляемый клиентом(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
Последний раз редактировалось koi8-r 28.12.2008 15:26:30, всего редактировалось 2 раза.
ev
долгожитель
Сообщения: 1789
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Сообщение ev »

не стесняемся юзать тег [code] ;)
Аватара пользователя
koi8-r
новенький
Сообщения: 15
Зарегистрирован: 12.03.2008 12:30:10
Откуда: Североморск (Мурманск)

Сообщение koi8-r »

ev писал(а):не стесняемся юзать тег [code] ;)

Оке ;)

Добавлено спустя 9 минут 7 секунд:
Что касается 'загадочной строки', которая обычно длиной 0x0A ...
Бывает, что она длиной 0x0B, то есть нечетная. В этом случае имеем первый символ в этой строке '-', тире ...
Значит срока:
1) Должна состоять из символов диапазона '0'..'9'. В хексе это 0x30..0x39
2) Иметь четную длину, а если длина нечетная то строка слева дополняется символом тире, в хексе, в соответствии с таблицей ASCII, этот символ == 0x2D

Никто не встречался с такими(которые возвращают подобное) функциями в API или продуктах Borland ? Может это какой нибудь GetTickCount() или RandomString() ... что нибудь подобное ??? Я так понял что написан клиент на Builder 2005. Хотя и не факт.

P.S. Надеюсь, что больше исходных данных поможет быстрее решить задачу ... пора бы уже покончить с 3-ой, написать dll - ку и забить на него, заняться 4-ой :D
Аватара пользователя
koi8-r
новенький
Сообщения: 15
Зарегистрирован: 12.03.2008 12:30:10
Откуда: Североморск (Мурманск)

Сообщение koi8-r »

Код: Выделить всё

T_USER_STRUCT struct
{
    DWORD          IP;
    DWORD          Reserved1; // $56723130 -> 'Vr10'
    char[6]        MAC;
    BYTE           Sex;       // 0 - Male; 1 - Female
    BYTE           Activity;  // 0 - Inactive, 1 - Active
    BYTE           NickLn;
    char[NickLn]   Nick;
//    BYTE           Reserved2; -> Status (;
    BYTE           StatusLn;
    char[StatusLn] Status;
} // T_USER_STRUCT


DWORD Reserved1; // $56723130 -> 'Vr10' <-- Это порт С КОТОРОГО данный клиент подключился к серверу ( SRC_PORT )
Ответить