CloneFort_server

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

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

Re: CloneFort_server

Сообщение koi8-r » 19.05.2008 11:37:59

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

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

Re: CloneFort_server

Сообщение ValterG » 14.06.2008 08:41:12

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

Re: CloneFort_server

Сообщение Chief » 05.08.2008 16:52:13

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

Re: CloneFort_server

Сообщение Chief » 19.08.2008 09:46:11

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

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

Re: CloneFort_server

Сообщение AV_tehnik » 08.10.2008 21:02:24

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

Re: CloneFort_server

Сообщение Chief » 15.11.2008 00:02:39

Предположительно для идентификации пользователей.
В данном случае - это socket handle, вообщем server->clients[n]->socket.
Chief
новенький
 
Сообщения: 74
Зарегистрирован: 26.09.2007 17:44:59

Re: CloneFort_server

Сообщение koi8-r » 18.12.2008 07:13:11

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

То есть каждый раз шифруя 1 байт, программа уменьшает ключ на 1.
А каждые 8 байт информации программа уменьшает ключ на 1, затем прибавляет к ключу 0x10, а уже потом шифрует байт, далее следующие 8 байт ключ уменьшается на один, потом опять (key-1)+0x10 ...
Надеюсь понятно обьяснил)))
Шифруеься естестна обычным ксором.
Помните слова автора о том что не имея первого пакета невозможно восстановить всю цепочку ?
Правда возникли некоторые непонятки с последним байтом в пакете, он парыгнул на -2... Щаз уже времени нет разбираться, да и стоит ли ?
Думаю -2 это некая защита от переполнения, ну что бы наш (byte key) не перевалил за 255.
Аватара пользователя
koi8-r
новенький
 
Сообщения: 15
Зарегистрирован: 12.03.2008 13:30:10
Откуда: Североморск (Мурманск)

Re: CloneFort_server

Сообщение Chief » 21.12.2008 14:43:37

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

Добавлено спустя 4 минуты 27 секунд:
koi8-r, зачОт за проделанную работу. Теперь, думаю пора начинать заниматься практической стороной. Пока время есть) :D
Chief
новенький
 
Сообщения: 74
Зарегистрирован: 26.09.2007 17:44:59

Re: CloneFort_server

Сообщение koi8-r » 23.12.2008 02:21:51

Приношу свои извинения, чет опять не сходиться. А ведь вчера еще все сходилось. Буду смотреть дальше :(
Видимо это частный случай.
Последний раз редактировалось koi8-r 28.12.2008 16:19:46, всего редактировалось 1 раз.
Аватара пользователя
koi8-r
новенький
 
Сообщения: 15
Зарегистрирован: 12.03.2008 13:30:10
Откуда: Североморск (Мурманск)

Re: CloneFort_server

Сообщение Chief » 23.12.2008 15:12:30

:D Может уже общими усилиями клиент напишем похожий)))))
Chief
новенький
 
Сообщения: 74
Зарегистрирован: 26.09.2007 17:44:59

Re: CloneFort_server

Сообщение koi8-r » 23.12.2008 20:33:03

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

Re: CloneFort_server

Сообщение koi8-r » 28.12.2008 15:40:45

Может кому пригодиться ... Первый пакет отправляемый клиентом(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 16:26:30, всего редактировалось 2 раз(а).
Аватара пользователя
koi8-r
новенький
 
Сообщения: 15
Зарегистрирован: 12.03.2008 13:30:10
Откуда: Североморск (Мурманск)

Re: CloneFort_server

Сообщение ev » 28.12.2008 15:52:25

не стесняемся юзать тег [code] ;)
ev
долгожитель
 
Сообщения: 1772
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Re: CloneFort_server

Сообщение koi8-r » 28.12.2008 16:05:33

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 13:30:10
Откуда: Североморск (Мурманск)

Re: CloneFort_server

Сообщение koi8-r » 29.12.2008 23:19:42

Код: Выделить всё
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 )
Аватара пользователя
koi8-r
новенький
 
Сообщения: 15
Зарегистрирован: 12.03.2008 13:30:10
Откуда: Североморск (Мурманск)

Пред.След.

Вернуться в Разработки на нашем сайте

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

Рейтинг@Mail.ru