Какую инфу содержит пакет 02 AE ?

Общие вопросы по OpenKore обсуждаются здесь. Можно сказать, что это - основной раздел форума.
Возник вопрос? Вам сюда.

Модератор: 4epT

Правила форума
Все вопросы по OK не касающиеся плагинов и макросов публикуются в этом разделе.
Перед тем как что то писать, пожалуйста, удостоверьтесь что данная тема не поднималась, вы полностью изучили мануалы по конфигурационным файлам бота и не нашли там решения.
xVoRoNx
Новичок
Сообщения: 9
Зарегистрирован: Вт окт 21, 2008 5:54 am

Какую инфу содержит пакет 02 AE ?

Сообщение xVoRoNx »

сабж
Еше подскажи пожалуста заголовок пакета и адреса ключей paramOne paramTwo для криптования.
ЗЫ bigendian и littleendian путаю не я а WPEpro, я всего лишь привел логи, и в размере пакета я не ошибся.
Fury Fox
Энтузиаст
Сообщения: 102
Зарегистрирован: Сб июн 16, 2007 8:02 am

Сообщение Fury Fox »

02AE Initialize Message ID Encryption
длина: 10;

два параметра. Может ключ?

А что там, я не знаю (
xVoRoNx
Новичок
Сообщения: 9
Зарегистрирован: Вт окт 21, 2008 5:54 am

Сообщение xVoRoNx »

да спасибо. у меня что то наверно с wpe, пока идет прогруз он успевает все пришедшие пакеты склеить в один.
vit
Бывалый
Сообщения: 624
Зарегистрирован: Вс мар 25, 2007 9:18 pm
Сервер RO:: localhost
Откуда: Санкт-Петербург

Сообщение vit »

xVoRoNx писал(а):да спасибо. у меня что то наверно с wpe, пока идет прогруз он успевает все пришедшие пакеты склеить в один.
Что пакеты склеиваются, это нормально(по идее сервер так и посылает несколько пакетов как один). Особенно большая пачка пакетов приходит при коннекте к мап-серверу).
Так что бери длины пакетов из recvpackets.txt и дели эту пачку вручную.
xVoRoNx
Новичок
Сообщения: 9
Зарегистрирован: Вт окт 21, 2008 5:54 am

Сообщение xVoRoNx »

С длиной пакетов разобрался по заголовкам легко найти длину,
другая проблема:
Лог WPEpro

AE 02 64 14 7A E3 CD 8F 26 0F

AE 02 это видимо заголовок пакета 02AE Initialize Message ID Encryption, синий и красный видимо ключи (DWORD)

Немного изменил код отсюда Message ID Encryption

сделал такую программу:

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

TForm1 *Form1;
DWORD encOne;
DWORD encTwo;

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
   DWORD paramOne=0x64147AE3;
   DWORD paramTwo=0xCD8F260F;
   char c[8];
   DWORD dwTemp=paramOne;

   for (int i=7; i >= 0; i--) {
      c[i] = dwTemp & 0x0F;
      dwTemp >>= 4;
   }

   WORD w = (c[5]<<12) + (c[3]<<8) + (c[6]<<4) + c[0];
   DWORD encValOne = (c[1]<<12) + (c[2]<<8) + (c[4]<<4) + c[7];
   DWORD encValTwo = ((((encValOne ^ 0x0000F3AC) + w) << 16) | ((encValOne ^ 0x000049DF) + w)) ^ paramTwo;

   encOne=encValOne;
   encTwo=encValTwo;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   int iEnc=(0x000343FD * encOne) + encTwo;
   DWORD tempEncOne=iEnc % 4294967296;
   WORD dwRet=(tempEncOne >> 16) & 0x7FFF;
   encOne=tempEncOne;

   WORD messageID = 0xFA55 ^ dwRet;
   Edit1->Text = messageID;
}
[/url]

В том же логе нашел пакет на движение Move
FA 55 29 88 A0
Подставил в программу значение FA55 заголовок этого пакета.
Должен был получится заголовок пакета Move 0085, но расшифрованное значение вообще неподходит не под один пакет...
Менял местами ключи, менял местами байты в заголовке(т.к. WPE путает littleendian bigendian), все перепробовал, но правильное значение не получается...
Вопрос: это рабочий декриптор раггейма? Где я ошибся?
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

[quote="xVoRoNx"][/quote]

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

  for (int i=7; i >= 0; i--) {
      c[i] = dwTemp & 0x0F;
      dwTemp >>= 4;
   }
 WORD w = (c[5]<<12) + (c[3]<<8) + (c[6]<<4) + c[0]; 
часть просто переворачивает биты.

Смотри поетапно, как оно пашет.

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

   int iEnc=(0x000343FD * encOne) + encTwo;
   DWORD tempEncOne=iEnc % 4294967296;
Я не понял, зачем тебе деление по модулю??? оно только для перла, чтобы не вызвать переполнения переменной.
И тем более, инт там зачем???

И обрати внимание, что для дальнейшего декодинга, тебе потребуется структура, из дух переменных.
Первая из нх, ето encOne, вторая encTwo. Или наоборот, уже нопомню.

ЗЫ: Я тебе уже говорил о переполнении числового значения.
Так, вот. Изначально там был не DWORD а один unsigned int64, с которым изрядно перестарались.
xVoRoNx
Новичок
Сообщения: 9
Зарегистрирован: Вт окт 21, 2008 5:54 am

Сообщение xVoRoNx »

kLabMouse очень порадовало что ты обратил внимание я думал ты на меня обиделся :)
int iEnc=(0x000343FD * encOne) + encTwo;
DWORD tempEncOne=iEnc % 4294967296;
Зачем мне деление по модулю? зачем инт? Это ведь не мой код... я взял его с сайта опенкора см ссылка выше, только чуть переделал для удобного запуска. Кстати этот код на си я перевел на свой язык работает также, проверил.
Я тебе уже говорил о переполнении числового значения.
Да я помню что ты говорил, если бы я знал что, где, какая переменная переполняется...
Я НЕ ПОНИМАЮ ЭТОТ АЛГОРИТМ!!! Я не знаю как преобразуются ключи, как ключиами кодируется заголовок итд... Если кто то ошибся в этом коде, то как я могу его исправить не зная алгоритма???
В коде на си я разобрался я понимаю как он работает, но незная алгоритма исправить немогу.... Я же не криптолог, чтобы часами разглядывая логи выделить закономерность и сделать дешифратор. Если не трудно поправь код на си...
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

Хм... посмотри на тот что работает наверняка.

Я просто не могу доствупится к своим старым исходникам и логам всех переменных поетапно.
Ответить