CloneFort_server

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

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

Сообщение B4rr4cuda » 02.03.2008 16:07:00

не уверен, что закон на стороне автора

Реверс инжинеринг не запрещен. Давить, автор, права не имеет. А вот, по человечески, попросить прекратить - вполне. Что видимо и произошло...
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Сообщение Chief » 03.03.2008 10:51:47

Из переписки с автором:
Здравствуйте.

Лицензионное соглашение предусматривает подключение клиента коммфорта только
к программе CommFort server. Еще очевидно незаконное использование торговой
марки.

Более того, сам протокол тоже охраняется законом (и авторское право на него
принадлежит мне, хоть и патента на руках не имею).

Я бы очень попросил не делать ничего подобного. Сами понимаете, стоимость
клиентской части включена в серверную, около 80% расходов приходится именно
на клиентскую часть. Так что в случае появления подобных продуктов без суда
никак не обойдемся.

Протокол третьей версии имеет немало недостатков. Его анализ - трата времени
пустая, потому что в протоколе четвертой версии не будет практически ничего
общего со старым.

С наилучшими пожеланиями,
Миргородский Максим

http://www.commfort.com
maxim@commfort.com


Еще очевидно незаконное использование торговой марки.
Это каким же образом? Существует зарегистрированная торговая марка CommFort(tm) и как автор решил что FreeCommFort нарушает это остается только догадываться.

Более того, сам протокол тоже охраняется законом (и авторское право на него принадлежит мне, хоть и патента на руках не имею).
Тут автор явно показывает незнание принципа патентирования да и вообще "запугивание авторством" уже в прошлом... юристов можно так натравить, что автор еще и виноват во всех грехах останется.

Так что в случае появления подобных продуктов без суда никак не обойдемся
Хм... Грубо, и со стороны автора банальная трата времени и денежных средств.

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

Сообщение Attid » 03.03.2008 11:50:39

Chief писал(а):Протокол третьей версии имеет немало недостатков. Его анализ - трата времени пустая, потому что в протоколе четвертой версии не будет практически ничего общего со старым.
Ну вот... Что и следует из моего предыдущего поста.


тоже глупости. я вообще первый раз об этом сервере слышу, но если ты уверяешь что он крут и все его юзают кто может, тогда реализации и 3 протокола хватит с головой, для идеи в первом сообщении дальше его поддерживать и не стоит, типа реализация того чего можно, а потом как раз выбор у пользователя или бесплатная версия с протоколом 3 или платная с протоколом 4, а потом уже развиваешь как хотишь.

Chief писал(а):А вообще, т. к. это никого не заинтересовало, опять же тратить свое время не собираюсь по пусту.

вон сбоку тут висят клон аськи и DC если хочется работать с людьми.
хотя опять же в первом сообщении писал что команда не обязательна.

Chief писал(а):Все любят готовое, вот и все...

сказок начитался? думал что начнешь проэкт и к тебе мульен людей повалит =) ха ха ха. поздравляю со знакомством с реальностью.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение Chief » 03.03.2008 14:36:53

Attid писал(а):тоже глупости. я вообще первый раз об этом сервере слышу, но если ты уверяешь что он крут и все его юзают кто может, тогда реализации и 3 протокола хватит с головой, для идеи в первом сообщении дальше его поддерживать и не стоит, типа реализация того чего можно, а потом как раз выбор у пользователя или бесплатная версия с протоколом 3 или платная с протоколом 4, а потом уже развиваешь как хотишь.

Хм... Я не утверждаю что он "мега крут", все преимущество CommFort заключается в его клиенте, а не в сервере. Но это не по моей специализации, по-этому и взялся за реализацию второго.

Attid писал(а):сказок начитался? думал что начнешь проэкт и к тебе мульен людей повалит =) ха ха ха. поздравляю со знакомством с реальностью.

Ну честно говоря тем кто постоянно находится в командной работе коммерческой продукции в фирме и никогда не сталкиваясь с открытой разработкой раннее, трудно так быстро адаптироваться. Так что соглашусь, что фраза поздравляю со знакомством с реальностью уместна как никогда. Так что огромная просьба не пинать ногами)
Chief
новенький
 
Сообщения: 74
Зарегистрирован: 26.09.2007 17:44:59

Сообщение Chief » 03.03.2008 20:06:37

Черт с ним, продолжим...
Последний раз редактировалось Chief 03.03.2008 20:34:00, всего редактировалось 1 раз.
Chief
новенький
 
Сообщения: 74
Зарегистрирован: 26.09.2007 17:44:59

Сообщение ev » 03.03.2008 20:17:18

Это каким же образом? Существует зарегистрированная торговая марка CommFort(tm) и как автор решил что FreeCommFort нарушает это остается только догадываться.

очень просто - в твоем названии используется зарегистрированная марка
как думаешь почему WindowsCommander переименовали?

Более того, сам протокол тоже охраняется законом (и авторское право на него принадлежит мне, хоть и патента на руках не имею).
Тут автор явно показывает незнание принципа патентирования да и вообще "запугивание авторством" уже в прошлом... юристов можно так натравить, что автор еще и виноват во всех грехах останется.

далеко не факт - читай 4 часть ГК РФ

Так что в случае появления подобных продуктов без суда никак не обойдемся
Хм... Грубо, и со стороны автора банальная трата времени и денежных средств.

ну почему же
судебные издержки компенсирует проигравшая сторона

Протокол третьей версии имеет немало недостатков. Его анализ - трата времени пустая, потому что в протоколе четвертой версии не будет практически ничего общего со старым.
Ну вот... Что и следует из моего предыдущего поста.

я бы сказал это стандартным запугиванием и стандартной мерой против таких программ
об этом я говорил еще в самом начале ;)
ev
долгожитель
 
Сообщения: 1763
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Сообщение Chief » 03.03.2008 20:20:34

И так...

Блок списка пользователей (в первом пакете отсылаемым сервером):
Это не совсем структура Cи, просто так более понятнее большинству.
Код: Выделить всё
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

T_USERS_LIST_STRUCT struct
{
    BYTE          NotifyId;    // <- 0x15 - [список пользователей]
    WORD          Count;        // ко-во пользователей
    T_USER_STRUCT[Count] Users; // пользователи
} // T_USERS_LIST_STRUCT

T_USERS_LIST_PACKET struct
{
    BYTE                Magic;     // 0xD6
    WORD                Length;    // размер пакета
    BYTE                Reserved1;
    T_USERS_LIST_STRUCT Data;
} // T_USERS_LIST_PACKET
Последний раз редактировалось Chief 04.03.2008 00:37:22, всего редактировалось 5 раз(а).
Chief
новенький
 
Сообщения: 74
Зарегистрирован: 26.09.2007 17:44:59

Сообщение Chief » 03.03.2008 20:23:33

ev писал(а):далеко не факт - читай 4 часть ГК РФ

Хм... Я с Украины) Но поищу соответствие в нашем Законе.
Chief
новенький
 
Сообщения: 74
Зарегистрирован: 26.09.2007 17:44:59

Сообщение Chief » 03.03.2008 23:44:25

При подключении пользователя к серверу, сервер отправляет всем уже подключенным клиентам пакет с NotifyId->$14:
Код: Выделить всё
T_USER_CONNECT_NOTIFY_STRUCT struct
{
    BYTE           NotifyId; // 0x14 - [подключение пользователя]
    DWORD          IP;       
    WORD           UHandle; // хендл юзера
    char[3]        Reserved1; // 31 30 30
    char[6]        MAC;
    BYTE           Sex;       // 0 - Male; 1 - Female
    BYTE           Activity;  // 0 - Inactive, 1 - Active
    BYTE           NickLn;
    char[NickLn]   Nick;
} // T_USER_CONNECT_NOTIFY_STRUCT

T_USER_CONNECT_NOTIFY_PACKET struct
{
    BYTE                Magic;  // 0xD6
    WORD                Length; // размер пакета
    BYTE                Nul;    // 0x00
    T_USER_CONNECT_NOTIFY_STRUCT Data;
} // T_USER_CONNECT_NOTIFY_PACKET


Аналогично при отключении пользователя:
Код: Выделить всё
T_USER_DISCONNECT_NOTIFY_STRUCT struct
{
    BYTE                NotifyId; // 0x16 - [отключение пользователя]
    DWORD               IP;
    WORD                UHandle;  // хендл юзера при подключении (вероятно)
} // T_USER_DISCONNECT_NOTIFY_STRUCT

T_USER_DISCONNECT_NOTIFY_PACKET struct
{
    BYTE                Magic;  // 0xD6
    WORD                Length; // размер пакета
    BYTE                Nul;    // 0x00
    T_USER_DISCONNECT_NOTIFY_STRUCT Data;
} // T_USER_CONNECT_NOTIFY_PACKET
Chief
новенький
 
Сообщения: 74
Зарегистрирован: 26.09.2007 17:44:59

Сообщение Chief » 04.03.2008 00:14:14

При отправке сообщения в общие каналы:
Код: Выделить всё
T_PUBLIC_MESSAGE_STRUCT struct
{
    BYTE                NotifyId;  // 0x0D
    BYTE                Reserved1; // 0x30
    DWORD               IP;
    WORD                UHandle;   // хендл юзера
    BYTE                ChannelLn;
    char[ChannelLn]     Channel;   // имя канала
    // compressed zlib data
    // sample: 6E 78 9C B3 CA CE 2C CE C8 49 CC B6 02 00 10 E7 03 5C
    BYTE             ZLibMagic; // 0x6E
    BYTE[]           ZLibData;  // compressed data
} // T_PUBLIC_MESSAGE_STRUCT

T_PUBLIC_MESSAGE_STRUCT_PACKET struct
{
    BYTE                Magic;  // 0xD6
    WORD                Length; // размер пакета
    BYTE                Nul;    // 0x00
    T_PUBLIC_MESSAGE_STRUCT Data;
} // T_PUBLIC_MESSAGE_STRUCT_PACKET


Добавлено
Проблему решил. Действительно ZLib-метод с обычной компрессией, единственное отличие - присутствие байта $6E в начале (смотреть выше).

78 9C B3 CA CE 2C CE C8 49 CC B6 02 00 10 E7 03 5C есть оригинальное сообщение ":kishlak:"
Chief
новенький
 
Сообщения: 74
Зарегистрирован: 26.09.2007 17:44:59

Сообщение Chief » 04.03.2008 01:10:19

Картинки:

Код: Выделить всё
T_PUBLIC_PICTURE_STRUCT struct
{
    BYTE                NotifyId;  // 0x0D
    BYTE                Reserved1; // 0x32
    DWORD               IP;
    WORD                UHandle;   // хендл-юзера
    BYTE                ChannelLn;
    char[ChannelLn]     Channel;
    BYTE                ImgFmtLn;
    char[ImgFmtLn]      ImgFmt;    // формат изображения ('jpg')
    BYTE[]              ImgData;   // изображение
} // T_PUBLIC_PICTURE_STRUCT

T_PUBLIC_PICTURE_PACKET struct
{
    BYTE                Magic;  // 0xD6
    WORD                Length; // размер пакета
    BYTE                Nul;    // 0x00
    T_PUBLIC_PICTURE_STRUCT Data;
} // T_PUBLIC_PICTURE_PACKET
Chief
новенький
 
Сообщения: 74
Зарегистрирован: 26.09.2007 17:44:59

Сообщение Chief » 04.03.2008 01:32:54

Базовое представление основных пакетов:
Код: Выделить всё
  TCF3PacketHead = record
    Magic  : Byte; { $D6 }
    Length : Word;
    Null   : Byte; { $00 }
  end; { TCFPacketHead }

  TCF3UserConnectNotifyPacket = record
    Head: TCF3PacketHead;
    Body: record
      Id        : Byte;                { $14         }
      IP        : LongWord;            { IP-address  }
      Handle    : Word;                { User handle }
      Reserved1 : array[0..2] of Byte; { $31 $30 $30 } { -> '100' }
      MACAddr   : array[0..5] of Byte; { MAC address }
      Gender    : Byte;                { User gender }
      Active    : Byte;                { Activity    }
      Nick      : String[64];          { User nick   }
    end; { Body }
  end; { TCF3UserConnectNotifyPacket }

  TCF3UserDisconnectNotifyPacket = record
    Head: TCF3PacketHead;
    Body: record
      Id        : Byte;                { $16         }
      IP        : LongWord;            { IP-address  }
      Handle    : Word;                { User handle }
    end; { Body }
  end; { TCF3UserDisconnectNotifyPacket }

  TCF3PublicMessagePacket = record
    Head: TCF3PacketHead;
    Body: record
      Id        : Byte;                { $0D         }
      SubId     : Byte;                { $30         }
      IP        : LongWord;            { IP-address  }
      Handle    : Word;                { User handle }
      Channel   : String[32];          { Channel     }
      ZId       : Byte;                { $6E         }
      ZData     : record end;          { Compressed  }
    end; { Body }
  end; { TCF3PublicMessagePacket }

  TCF3PublicPicturePacket = record
    Head: TCF3PacketHead;
    Body: record
      Id        : Byte;                { $0D         }
      SubId     : Byte;                { $32         }
      IP        : LongWord;            { IP-address  }
      Handle    : Word;                { User handle }
      Channel   : String[32];          { Channel     }
      ImgFmt    : String[3];           { ImageFormat }
      ImgData   : record end;          { ImageData   }
    end; { Body }
  end; { TCF3PublicPicturePacket }

    TCF3UsersListItem = record
      IP        : LongWord;            { IP-address  }
      Reserved1 : LongWord;            { $30317256   } { -> 'Vr10' }
      MACAddr   : array[0..5] of Byte; { MAC address }
      Gender    : Byte;                { User gender }
      Active    : Byte;                { Activity    }
      Nick,                            { User nick   }
      Status    : String[64];          { User status }
    end; { TCF3UsersListItem }

  TCF3UsersListPacket = record
    Head: TCF3PacketHead;
    Body: record
      Id        : Byte;                { $15         }
      Count     : Word;                { Users count }
      Users     : array of TCF3UsersListItem;
    end; { Body }
  end; { TCF3UsersListPacket }
Chief
новенький
 
Сообщения: 74
Зарегистрирован: 26.09.2007 17:44:59

Сообщение koi8-r » 17.03.2008 14:31:19

Доброго времени суток.

Клиент 3,20.
Сервер 3,00.
Немного другая структура пакета:

Неразшифрованый TCF3UserConnectNotifyPacket вместе с шапкой:

{0xD6, 0x29, 0x00, 0x00}
0x8D, 0x3A,0x7A, 0x4D, 0x4D, 0x4E, 0x75, 0xAD,
0xB3,0xB7,0xB1,0xB6,0xB1,0xB4,0xB1,0xB1,0xB8,
0xF5, 0x8B, 0x8C, 0x8C, 0xD3, 0x1B,
0x90, 0x91, 0x92, 0x93, 0x94, 0x95,
0x96, 0x96, 0x99, 0x91, 0xCC, 0xFA, 0xF0, 0xF8, 0xF0, 0xEB, 0xC9, 0xCF

Первый байт Id == 0xF4, а не 0x14.
Жирным непонятно.
Затем,курсивом Reserved1 == '100'
Темнокрасный , видимо UserHandle.
Темносиним, непонятная 9-байтовая строка(меняется), но если в ней все старшие байты == B как здесь, то ключ шифрования в месте где первый байт MAC адресса, всегда 0x90.
Далее, желтым IP адресс в формате возвращаемом функцией inet_addr().
Далее, опять непонятные два байта, может быть и это UserHandle.
Зеленым MAC.
Далее жирным три байта с разделителем,gender и activity.
Фиолтовый, длина ника == 8.
Красным ник == 'Valentin'.

Далее в одном tcp сообщении вложены еще три пакета commfort'а:
{0xD6,0x08,0x00,0x00}0xD6,0x2C,0x2E,0x2A,0x5C,0x51,0x5A,0x5D
{0xD6,0x01,0x00,0x00}0x97
{0xD6,0x02,0x00,0x00}0xB7,0x79

Начинаю разшифровывать с первого байта идущего за шапкой. Типа так:
Код: Выделить всё
for(int i = 0; i < PSize ; i++)
    P[i] ^= XorKey++;


Ключ вычисляю относительно первого байта MAC минус, необходимое смещение.

Как разшифровывать дальше? У сервера свой ключ или мне брать последнее значение ключа, получившееся после расшифровки TCF3UserConnectNotifyPacket. Чет не получается... видимо из-за TZlib'а =(

Как я понял три пакета идущие вместе с TCF3UserConnectNotifyPacket ксорить не нада ? Или нада ? Видимо по состоянию, когда у меня клиент шлет свой очередной пакет у меня уже не правильный ключ. Шапки не ксорю)

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

Сообщение Chief » 18.03.2008 01:58:51

koi8-r писал(а):Немного другая структура пакета:
Ты рассматриваешь клиентский пакет, а не серверный.

koi8-r писал(а):Темнокрасный , видимо UserHandle.
Скорее всего под UserHandle идет хэндл сокета привязанный сервером клиенту.

koi8-r писал(а):Темносиним, непонятная 9-байтовая строка(меняется)
Еще не добрался до этого места.

koi8-r писал(а):for(int i = 0; i < PSize ; i++)
P[i] ^= XorKey++;
[/code]
Вообщем трактовка xor-шифрования для CommFort такова:
1. начальный диапазон - не понятно откудого берется и что на его выбор влияет;
2. диапазон константа - значение длины ищи выше, где-то я уже писал.
3. т.е. шифруется так с xor(НАЧ) по xor(КОН) и так по кругу на все тело пакета. (опять же читай выше по теме, где то я расписывал);

На днях выложу декриптор пакетов, надеюсь поможет для дальнейшего изучения.
(Молодца, что отозвался)
Chief
новенький
 
Сообщения: 74
Зарегистрирован: 26.09.2007 17:44:59

Сообщение Chief » 18.03.2008 11:06:00

Для твоего пакета:

Дешифрование:
PacketXorMaskBegin=10
PacketXorMaskEnd=A0


D6 2A 00 00 - заголовок;
F4 40 01 - ???
31 30 30 - "100"
xx - Длина числовой строки (чаще всего 0A)
Строка длинной xx
00 00 00 00 - IP-адрес (DWord)
00 00 00 00 00 00 - MAC-адрес
07 9E - ???
00 - ???
01 - Gender (?)
01 - Activity (?)
yy - Длина ника
Ник длинной yy
Chief
новенький
 
Сообщения: 74
Зарегистрирован: 26.09.2007 17:44:59

Пред.След.

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

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

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

Рейтинг@Mail.ru