Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

0x02 CMKey

-

Общение разработчиков

- Программирование для Perfect World, общение и обсуждене разработок

Ответ
 
Опции темы
Старый 21.11.2012, 16:46   #1
 Разведчик
Аватар для evo-x
 
evo-x скоро будет известенevo-x скоро будет известенevo-x скоро будет известен
Регистрация: 12.07.2010
Сообщений: 5
Популярность: 235
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию 0x02 CMKey

Возникла проблема с этим пакетом. Не могу понять как его зашифровать с помощью алгоритма шифрации RC4.
Использую эти алгоритмы:
C#:
Код:
using System;

namespace OOGLibrary.Cryptography
{
    class RC4
    {
        public RC4()
        {
            for (int i = 0; i < 256; i++)
                m_Table[i] = Convert.ToByte(i);
            m_Shift1 = 0;
            m_Shift2 = 0;
        }

        public void Shuffle(byte[] Key)
        {
            byte Shift = 0;
            for (int i = 0; i < 256; i++)
            {
                byte A = Key[i % 16];
                Shift += (byte)(A + m_Table[i]);

                byte B = m_Table[i];
                m_Table[i] = m_Table[Shift];
                m_Table[Shift] = B;
            }
        }

        public byte Encode(byte InPacket)
        {
            m_Shift1++;
            byte A = m_Table[m_Shift1];
            m_Shift2 += A;
            byte B = m_Table[m_Shift2];
            m_Table[m_Shift2] = A;
            m_Table[m_Shift1] = B;
            byte C = (byte)(A + B);
            byte D = m_Table[C];
            return (byte)(InPacket ^ D);
        }

        private byte m_Shift1;
        private byte m_Shift2;
        private byte[] m_Table = new byte[256];
    }
}
Delphi:
Код:
type
        TRC4 = class
        private
          S: array[0..255] of Byte;
          x,y: Integer;
        public
          constructor Create; virtual;
          procedure Init(Key: THexData);
          procedure Swap(Index1,Index2: Integer);
          function Encode(Data: THexData): THexData;
          function Decode(Data: THexData): THexData;
          function KeyItem: Byte;
        end;
implementation
{ TRC4 }

constructor TRC4.Create;
begin
        x:= 0;
        y:= 0;

end;

function TRC4.Decode(Data: THexData): THexData;
begin
        Result:= Encode(Data);
end;

function TRC4.Encode(Data: THexData): THexData;
var
        cipher: THexData;
        m: Integer;
begin
        FillChar(cipher,SizeOf(cipher),0);
        for m:= 0 to Data.Size-1 do
          cipher.Bytes[m]:= Byte(Data.Bytes[m] xor KeyItem);

        cipher.Size:= Data.Size;

        Result:= cipher;
end;

procedure TRC4.Init(Key: THexData);
var
        i,j: Integer;
begin

        for i:= 0 to 255 do
        begin
          S[i]:= Byte(i);
        end;

        j:= 0;
        for i:= 0 to 255 do
        begin
          j:= (j + S[i] + Key.Bytes[I mod Key.Size]) mod 256;
          Swap(i,j);
        end;
end;

function TRC4.KeyItem: Byte;
begin
        x:= (x+1) mod 256;
        y:= (y + S[x]) mod 256;

        Swap(x,y);

        Result:= S[(S[x] + S[y]) mod 256];
end;

procedure TRC4.Swap(Index1, Index2: Integer);
var
        temp: Byte;
begin
        temp:= s[index1];
        s[Index1]:= s[index2];
        s[Index2]:= temp;
end;
С начальными пакетами разобрался, где нет шифрации, 0x01 ServerInfo, 0x03 LogginAnnounce, 0x02 SMKey, все как надо выполняется. А вот шифрацию не могу понять. Помогите разобраться пожалуйста. Ответ напишите в личку или тут.
  Ответить с цитированием
Пользователь сказал cпасибо:
ramazan15 (20.12.2012)
Старый 21.11.2012, 18:48   #2
Заблокирован
 Разведчик
Аватар для left24
 
left24 никому не известный тип
Регистрация: 10.11.2012
Сообщений: 0
Популярность: 12
Сказал(а) спасибо: 0
Поблагодарили 7 раз(а) в 7 сообщениях
Отправить сообщение для left24 с помощью ICQ Отправить сообщение для left24 с помощью Skype™
 
По умолчанию Re: 0x02 CMKey

Такаяже прроблема, только я чцуть далек от того что тут...
  Ответить с цитированием
Пользователь сказал cпасибо:
ramazan15 (20.12.2012)
Старый 21.11.2012, 19:21   #3
-= Элитный Мастер =-
 Главнокомандующий
Аватар для Kitsune
 
Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(
Регистрация: 20.01.2010
Сообщений: 1,539
Популярность: 22780
Золото Zhyk.Ru: 600
Сказал(а) спасибо: 43
Поблагодарили 1,717 раз(а) в 538 сообщениях
 
По умолчанию Re: 0x02 CMKey

Цитата:
Сообщение от left24Посмотреть сообщение
Такаяже прроблема, только я чцуть далек от того что тут...

________________
Fireball - Быстрое снятие и загрузка скриншотов на хостинг.
  Ответить с цитированием
Старый 22.11.2012, 06:35   #4
 Разведчик
Аватар для evo-x
 
evo-x скоро будет известенevo-x скоро будет известенevo-x скоро будет известен
Регистрация: 12.07.2010
Сообщений: 5
Популярность: 235
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: 0x02 CMKey

Скажите тогда хотябы каким ключом шифровать и как его создать. в соседних темах читал, и что-то не понял как.
  Ответить с цитированием
Старый 29.11.2012, 13:30   #5
 Разведчик
Аватар для evo-x
 
evo-x скоро будет известенevo-x скоро будет известенevo-x скоро будет известен
Регистрация: 12.07.2010
Сообщений: 5
Популярность: 235
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: 0x02 CMKey

мда...опять никто помогать не хочет)) сам разобрался с шифровкой RC4)) пакет зашифровал, отправил. в ответ получил запакованный и зашифрованный пакет. может кто поможет с распаковкой разобраться? желательно бы на Delphi.
  Ответить с цитированием
Старый 29.11.2012, 13:39   #6
 Пехотинец
Аватар для ToRcH2565
 
ToRcH2565 скоро будет известенToRcH2565 скоро будет известенToRcH2565 скоро будет известенToRcH2565 скоро будет известенToRcH2565 скоро будет известен
Регистрация: 02.08.2009
Сообщений: 57
Популярность: 417
Сказал(а) спасибо: 12
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: 0x02 CMKey

+1 к предыдущему оратору) можно примерчик(готовый вариант) распаковки данных желательно на Delphi
  Ответить с цитированием
Старый 04.01.2013, 22:00   #7
 Разведчик
Аватар для evo-x
 
evo-x скоро будет известенevo-x скоро будет известенevo-x скоро будет известен
Регистрация: 12.07.2010
Сообщений: 5
Популярность: 235
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: 0x02 CMKey

Немного забросил OOG разработку, но вот решил снова восстановить. На C# все работает, RC4 шифровка и расшифровка, распаковка пакетов тоже работает. Но вот чего не могу сказать про Delphi. На Delphi какая-то интересная ситуация получается. Пакет 0x02 CMKey зашифровал, отправил, в ответ получил зашифрованный и запакованный пакет. Расшифровываю пакет, получается белиберда, расшифровывается не правильно. Ключ для RC4 создаю с помощью такой функции:

C#

Delphi

RC4 ключ для шифровки естественно создаю с помощью ключа из пакета 0x02 SMKey, а для расшифровки с помощью ключа созданного рандомно который передаю в пакете 0x02 CMKey.
Вот как я зашифровываю и расшифровываю на C#:
Код:
rc4enckey = GetKey(enckey,hash,tbLogin.Text);
rc4deckey = GetKey(deckey,hash,tbLogin.Text);
encoder = new RC4(rc4enckey);
decoder = new RC4(rc4deckey);
byte[] res = encoder.Encode(Send.ToArray(), (byte)Send.Count);
byte[] res2 = decoder.Decode(data, data.Length);
Аналогично делаю на Delphi:
Код:
rc4enckey := GetKey(teLogin.Text,enckey);
rc4deckey := GetKey(teLogin.Text,deckey);
encoder := RC4.TRC4.Create();
decoder := RC4.TRC4.Create();
encoder.Init(rc4enckey);
decoder.Init(rc4deckey);
res := encoder.Encode(pck);
res2 := decoder.Decode(buf);
И как результат, на C# все работает, на Delphi только шифровка работает, расшифровка не работает. Реализацию RC4 использую такую же, какая написана в моем первом посте. А реализовать все это нужно на Delphi. Помогите пожалуйста разобраться, уже не знаю где моя ошибка. Функции правильные, так как шифровка проходит правильно, мой пакет 0x02 CMKey зашифрованный сервер принимает.
  Ответить с цитированием
Старый 05.01.2013, 00:20   #8
 Разведчик
Аватар для nitrotek
 
nitrotek душа компанииnitrotek душа компанииnitrotek душа компанииnitrotek душа компанииnitrotek душа компанииnitrotek душа компанииnitrotek душа компанииnitrotek душа компании
Регистрация: 10.06.2010
Сообщений: 30
Популярность: 940
Сказал(а) спасибо: 7
Поблагодарили 139 раз(а) в 22 сообщениях
 
По умолчанию Re: 0x02 CMKey

Вы вообще читали про RC4? Как почитаете задавайте свои вопросы, пока они некорректно поставлены.
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]
  Ответить с цитированием
Старый 05.01.2013, 11:45   #9
 Разведчик
Аватар для evo-x
 
evo-x скоро будет известенevo-x скоро будет известенevo-x скоро будет известен
Регистрация: 12.07.2010
Сообщений: 5
Популярность: 235
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: 0x02 CMKey

Цитата:
Сообщение от nitrotekПосмотреть сообщение
Вы вообще читали про RC4?

Ну естественно я читал про RC4, неужели я бы методом тыка стал бы что-то делать.

Разобрался сам, я по своей не внимательности допустил ошибку в функции генерации ключа для RC4. Видимо после праздников голова плохо соображала) Еще бы разобраться с распаковкой на Delphi.
  Ответить с цитированием
Старый 22.07.2013, 11:40   #10
 Разведчик
Аватар для wajskopf
 
wajskopf никому не известный тип
Регистрация: 15.08.2011
Сообщений: 25
Популярность: 10
Сказал(а) спасибо: 8
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: 0x02 CMKey

Люди, подскажите или ткните носом, алгоритм без привязки к языку как составить сообщение СМ 0х02.
  Ответить с цитированием
Старый 22.07.2013, 12:04   #11
 Разведчик
Аватар для xxproduction
 
xxproduction никому не известный тип
Регистрация: 12.07.2013
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: 0x02 CMKey

Цитата:
Сообщение от wajskopfПосмотреть сообщение
Люди, подскажите или ткните носом, алгоритм без привязки к языку как составить сообщение СМ 0х02.

Также как SM 0x02
  Ответить с цитированием
Старый 22.07.2013, 12:29   #12
 Разведчик
Аватар для wajskopf
 
wajskopf никому не известный тип
Регистрация: 15.08.2011
Сообщений: 25
Популярность: 10
Сказал(а) спасибо: 8
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: 0x02 CMKey

Цитата:
Также как SM 0x02

Это я знаю... там надо составить один ключ хэшированием, другой получить рандомно... вот эти процессы бы в правильной последовательности увидеть. Не в виде кода, а так сказать логику понять.
  Ответить с цитированием
Старый 22.07.2013, 15:08   #13
-= Мастер Света =-
 Рыцарь-лейтенант
Аватар для Smertig
 
Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(
Регистрация: 31.01.2011
Сообщений: 413
Популярность: 14489
Золото Zhyk.Ru: 300
Сказал(а) спасибо: 77
Поблагодарили 361 раз(а) в 145 сообщениях
Отправить сообщение для Smertig с помощью ICQ Отправить сообщение для Smertig с помощью Skype™
 
По умолчанию Re: 0x02 CMKey

Цитата:
Сообщение от wajskopfПосмотреть сообщение
Люди, подскажите или ткните носом, алгоритм без привязки к языку как составить сообщение СМ 0х02.

byte - тип пакета (02)
byte - длина пакета (12)
byte - длина хэша (10)
bytes[16] - рандомный хэш (DecHash), который нужно запомнить
byte - усиленный вход (00 или 01)

Получится примерно такое:
Код:
021210C8759613B8B13A580C49D92B848BB1EC00
EncHash получаем из пакета S02 (с 4-го до предпоследнего байта - хэш)
Перед тем, как отправить, получаем два ключа:
RC4_Key_CS = HMACMD5(Login){Hash + EncHash} ; используется для шифрации трафика C->S
RC4_Key_SC = HMACMD5(Login){Hash + DecHash} ; используется для шифрации трафика S->C

Затем полученный выше пакет шифруется RC4, используя в качестве ключа RC4_Key_CS. И отправляется.
Все принятые пакеты дешифруются RC4, используя RC4_Key_SC.


Логика вот в чём. Сервер в C02 получает тот ключ, которым ОН будет шифровать нам трафик, чтобы не было разногласий. Примерно так:
Цитата:
Клиент: Сервер, лови хэш, который я сделал
Сервер: отлично, поймал, сделал ключ. Теперь я буду тебе этим ключом шифровать трафик.
Клиент: ок, босс, я тогда буду его расшифровывать тем же ключом

________________
Больше не занимаюсь читами, ушёл в серверную часть. Новый ник - int 3.
P.S. Но я всё такой же добрый модератор раздела PW.

Последний раз редактировалось Smertig; 22.07.2013 в 15:20.
  Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
MembRupt (09.07.2014), wajskopf (22.07.2013)
Старый 22.07.2013, 15:58   #14
 Разведчик
Аватар для wajskopf
 
wajskopf никому не известный тип
Регистрация: 15.08.2011
Сообщений: 25
Популярность: 10
Сказал(а) спасибо: 8
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: 0x02 CMKey

Во, то что надо. теперь есть над чем думать и что пробовать. спасибо огромное. + в репутацию поставил.
Спасибо
  Ответить с цитированием
Старый 24.06.2014, 13:27   #15
 Разведчик
Аватар для bestbeer
 
bestbeer никому не известный тип
Регистрация: 06.10.2013
Сообщений: 27
Популярность: 10
Сказал(а) спасибо: 24
Поблагодарили 12 раз(а) в 8 сообщениях
 
По умолчанию Re: 0x02 CMKey

Интересует DecHash. Где он берется? Или его рандомить надо?
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
0x02 CMKey evo-x Разработка ПО для Perfect World 2 21.11.2012 16:34

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 22:11.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net