Страница 1 из 1

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

Добавлено: Чт окт 23, 2008 5:13 pm
xVoRoNx
сабж
Еше подскажи пожалуста заголовок пакета и адреса ключей paramOne paramTwo для криптования.
ЗЫ bigendian и littleendian путаю не я а WPEpro, я всего лишь привел логи, и в размере пакета я не ошибся.

Добавлено: Чт окт 23, 2008 6:50 pm
Fury Fox
02AE Initialize Message ID Encryption
длина: 10;

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

А что там, я не знаю (

Добавлено: Пт окт 24, 2008 7:10 am
xVoRoNx
да спасибо. у меня что то наверно с wpe, пока идет прогруз он успевает все пришедшие пакеты склеить в один.

Добавлено: Пт окт 24, 2008 1:54 pm
vit
xVoRoNx писал(а):да спасибо. у меня что то наверно с wpe, пока идет прогруз он успевает все пришедшие пакеты склеить в один.
Что пакеты склеиваются, это нормально(по идее сервер так и посылает несколько пакетов как один). Особенно большая пачка пакетов приходит при коннекте к мап-серверу).
Так что бери длины пакетов из recvpackets.txt и дели эту пачку вручную.

Добавлено: Пт окт 24, 2008 4:10 pm
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), все перепробовал, но правильное значение не получается...
Вопрос: это рабочий декриптор раггейма? Где я ошибся?

Добавлено: Пт окт 24, 2008 11:31 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, с которым изрядно перестарались.

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

Добавлено: Сб окт 25, 2008 1:03 am
kLabMouse
Хм... посмотри на тот что работает наверняка.

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