HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > [HELP] packet decoding
Говном прошу не кидаться
  Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
Stolen
Новичок

Дата регистрации: Dec 2013
Проживает: Новосибирск
Сообщений: 9
Возраст: 27

Рейтинг



Post [HELP] packet decoding

Всем привет. Понадобилась функция которая бы расшифровывала пакеты cs После прогулки по гуглу наткнулся на функции COM_UnMunge2 и COM_Munge2, погуляв ещё немного узнал что именно они (де)шифруют пакеты.

Нашёл osHLDS, выдрал оттуда эти функции, отловил пакеты cs. Получилось следующее:
http://f6.s.qip.ru/oHGou2qO.png

В принципе, все пакеты до №8 читабельны, а вот с него уже идут в шифрованном виде.

Ну вообщем пробую расшифровать пакет №8, вроде получилось:
http://f6.s.qip.ru/oHGou2qP.png

Так же получилось расшифровать и другой пакет(dropclient)

Но вот другие пакеты функции не хотят расшифровывать никак :\

Сама функция:

C++ Source Code:
1
typedef unsigned long int uint32;
2
 
3
#define FlipBytes32(A) ((((uint32)(A) & 0xff000000) >> 24) | (((uint32)(A) & 0x00ff0000) >> 8)  | (((uint32)(A) & 0x0000ff00) << 8)  | (((uint32)(A) & 0x000000ff) << 24))
4
 
5
static const unsigned char MungeTable2[] = {0x05, 0x61, 0x7A, 0xED, 0x1B, 0xCA, 0x0D, 0x9B, 0x4A, 0xF1, 0x64, 0xC7, 0xB5, 0x8E, 0xDF, 0xA0 };
6
 
7
void Crypt(char *packet, int length, int z, bool unpack)
8
{
9
  unsigned int * lbuff = (unsigned int *)packet;
10
  unsigned int ebpc;
11
  int i, count = 0;
12
  int notz = ~z;
13
 
14
  if(length < 1) { return; }
15
 
16
  length = length >> 2;
17
 
18
  while(length--)
19
  {
20
    if(unpack)
21
      ebpc = *lbuff ^ z;
22
    else
23
      ebpc = FlipBytes32(*lbuff ^ notz);
24
 
25
    for(i=0;i<4;i++)
26
      *((unsigned char *)(&ebpc) + i) ^= (((MungeTable2[(count + i) & 0x0F] | (i << i)) | i) | 0xA5);
27
 
28
    if(unpack)
29
      *lbuff = FlipBytes32(ebpc) ^ notz;
30
    else
31
      *lbuff = ebpc ^ z;
32
 
33
    lbuff++;
34
    count++;
35
  }
36
}


Юзаю так:
Crypt(packet, 8, 1, true);
packet - сам пакет(первые 8 байт отрезаются)
8 - размер пакета(уже без первых 8)
1 - номер пакета true - true == unpack, false == pack

Вообщем то такой вопрос, что не так?
Почему не хотят расшифровываться другие пакеты?

Сообщить модератору | | IP: Записан
Сообщение: 132234

Старое сообщение 02-02-2014 13:11
- За что?
marikcool
Житель форума

Дата регистрации: Jul 2011
Проживает: kz
Сообщений: 1522
Возраст: 37

Рейтинг



Как ты определяешь что пакет правильно расшифрован? По стринг значениям?

__________________
vk.com/skullcapstudios

Сообщить модератору | | IP: Записан
Сообщение: 132236

Старое сообщение 02-02-2014 13:16
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32202
Нанёс повреждений: 392 ед.

Рейтинг



Munge в переводе - запутывать. Т.е. они нарочно это делают.
Но, насколько я знаю, есть еще Munge1 и Munge3.
Изучи OSHLDS повнимательнее, там есть полная картина общения клиент-сервер.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 132237

Старое сообщение 02-02-2014 13:16
-
Stolen
Новичок

Дата регистрации: Dec 2013
Проживает: Новосибирск
Сообщений: 9
Возраст: 27

Рейтинг



marikcool,
Ну да
После выполнения функции с пакетом номер 8, я получаю "new", после других получаю что-то типа [NULL], [SOH][SOH][SOH][SOH][SOH][SOH] и тд

Сообщить модератору | | IP: Записан
Сообщение: 132240

Старое сообщение 02-02-2014 13:22
- За что?
fire64
Житель форума

Дата регистрации: Apr 2007
Проживает: Москва
Сообщений: 2362
Возраст: 33

Рейтинг



Stolen, ну и?

О_о
Ты что, думаешь, что там все данные в строчном формате?

__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей

Сообщить модератору | | IP: Записан
Сообщение: 132249

Старое сообщение 02-02-2014 14:45
- За что?
Stolen
Новичок

Дата регистрации: Dec 2013
Проживает: Новосибирск
Сообщений: 9
Возраст: 27

Рейтинг



fire64
Не все конечно, но как я понимаю команды от сервера типа fullserverinfo "\*gamedir\cstrike", echo "* Права доступа предоставлены!", bind bla bla
Должны быть строками

Сообщить модератору | | IP: Записан
Сообщение: 132256

Старое сообщение 02-02-2014 15:08
- За что?
marikcool
Житель форума

Дата регистрации: Jul 2011
Проживает: kz
Сообщений: 1522
Возраст: 37

Рейтинг



Цитата:
Stolen писал:

Ну эт обычно броадкаст пакеты, они не шифрованы. Нужно на том пакете пробывать где info и данные других игроков в виде ников пролетают.

__________________
vk.com/skullcapstudios

Сообщить модератору | | IP: Записан
Сообщение: 132315

Старое сообщение 03-02-2014 04:00
- За что?
fire64
Житель форума

Дата регистрации: Apr 2007
Проживает: Москва
Сообщений: 2362
Возраст: 33

Рейтинг



Первые 8 байтов, это данные синхронизации,
Данные идут позже, вот правильный код:

C++ Source Code:
1
template <typename T>
2
inline T DWordSwapC( T dw )
3
{
4
  unsigned int temp;
5
 
6
  temp  =   *((unsigned int *)&dw) 				>> 24;
7
  temp |= ((*((unsigned int *)&dw) & 0x00FF0000) >> 8);
8
  temp |= ((*((unsigned int *)&dw) & 0x0000FF00) << 8);
9
  temp |= ((*((unsigned int *)&dw) & 0x000000FF) << 24);
10
 
11
  return *((T*)&temp);
12
}
13
 
14
#define DWordSwap DWordSwapC
15
 
16
static unsigned char mungify_table[ 16 ] =
17
{
18
  5, 97, 122, 237,
19
  27, 202, 13, 155,
20
  74, 241, 100, 199,
21
  181, 142, 223, 160,
22
};
23
 
24
void COM_Munge( unsigned char *data, int len, int seq )
25
{
26
  int i;
27
  int mungelen;
28
 
29
  int c;
30
  int *pc;
31
  unsigned char *p;
32
 
33
  int j;
34
 
35
  mungelen = len & ~3;
36
  mungelen /= 4;
37
 
38
  for ( i = 0; i < mungelen; i++ )
39
  {
40
    pc = (int *)&data[ i * 4 ];
41
    c = *pc;
42
 
43
    c ^= ~seq;
44
 
45
    c = DWordSwap( c );
46
 
47
    p = ( unsigned char *)&c;
48
    for ( j = 0 ; j < 4; j++ )
49
    {
50
      *p++ ^= ( 0xa5 | ( j << j) | j | mungify_table[ ( i + j ) & 0x0f ] );
51
    }
52
 
53
    c ^= seq;
54
 
55
    *pc = c;
56
  }
57
}
58
 
59
 
60
void COM_UnMunge( unsigned char *data, int len, int seq )
61
{
62
  int i;
63
  int mungelen;
64
 
65
  int c;
66
  int *pc;
67
  unsigned char *p;
68
 
69
  int j;
70
 
71
  mungelen = len & ~3;
72
  mungelen /= 4;
73
 
74
  for ( i = 0; i < mungelen; i++ )
75
  {
76
    pc = (int *)&data[ i * 4 ];
77
    c = *pc;
78
 
79
    c ^= seq;
80
 
81
    p = ( unsigned char *)&c;
82
    for ( j = 0 ; j < 4; j++ )
83
    {
84
      *p++ ^= ( 0xa5 | ( j << j) | j | mungify_table[ ( i + j ) & 0x0f ] );
85
    }
86
 
87
    c = DWordSwap( c );
88
 
89
    c ^= ~seq;
90
 
91
    *pc = c;
92
  }
93
}
94
 
95
bool SimpleData( char *pData )
96
{
97
  if( pData[0] == '\xFF' && pData[1] == '\xFF' && pData[2] == '\xFF' && pData[3] == '\xFF' )
98
  {
99
    return true;
100
  }
101
 
102
  return false;
103
}


COM_Munge - шифровка данных
COM_UnMunge - дешифровка
SimpleData - провка на базовые информационные пакеты

__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей

Сообщить модератору | | IP: Записан
Сообщение: 132323

Старое сообщение 03-02-2014 06:34
- За что?
Ghoul [BB]
МРАЗЬ ОПАСНАЯ

Дата регистрации: Jan 2006
Проживает: ...и прожигает...
Сообщений: 2567

Рейтинг



О нет, опять сладкий хлеб Counter-Strike...
Браток, ты погляди, тут уже 2 темы про декриптовку подняли.. но так и слились авторы. Fail, однако...

__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.

Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo

Сообщить модератору | | IP: Записан
Сообщение: 132324

Старое сообщение 03-02-2014 07:50
- За что?
Chuvi
Частый гость

Дата регистрации: Nov 2012
Проживает: Россия/Санкт-Петербург
Сообщений: 36
Возраст: 33

Рейтинг



fire64 Помимо 0xFFFFFFFF есть же ещё 0xFFFFFFFE

Добавлено 03-02-2014 в 12:00:

Ghoul [BB], если ты про мою тему, которую я когда-то поднимал, то я понял, что ждать от вас помощи бесполезно и пошёл копаться сам.
VoiceCodecFix, который я уже забросил, кстати, писался уже с использованием результатов этого копания.

Сообщить модератору | | IP: Записан
Сообщение: 132325

Старое сообщение 03-02-2014 08:00
- За что?
fire64
Житель форума

Дата регистрации: Apr 2007
Проживает: Москва
Сообщений: 2362
Возраст: 33

Рейтинг



Цитата:
Chuvi писал:
0xFFFFFFFE

А это для чего такой заголовок применяется?
Как-то не сталкивался.

__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей

Сообщить модератору | | IP: Записан
Сообщение: 132327

Старое сообщение 03-02-2014 09:08
- За что?
Stolen
Новичок

Дата регистрации: Dec 2013
Проживает: Новосибирск
Сообщений: 9
Возраст: 27

Рейтинг



Цитата:
Chuvi писал:
0xFFFFFFFE

Я только 0xFEFFFFFF встречал

Сообщить модератору | | IP: Записан
Сообщение: 132329

Старое сообщение 03-02-2014 09:26
- За что?
Chuvi
Частый гость

Дата регистрации: Nov 2012
Проживает: Россия/Санкт-Петербург
Сообщений: 36
Возраст: 33

Рейтинг



fire64, он применяется, когда пакет не влезает в допустимые пределы и его нужно разбить на части.
Например, в таком виде приходит A2S_RULES.
А, да, я действительно порядок байт перепутал.
0xFEFFFFFF, а не то, что я написал.

Сообщить модератору | | IP: Записан
Сообщение: 132330

Старое сообщение 03-02-2014 09:35
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32202
Нанёс повреждений: 392 ед.

Рейтинг



fire64 там же incoming_sequence юзается в качестве третьего аргумента? Я просто подзабыл уже. Если не знать этой секвенции, то на выходе получим такой же мусор, что и на входе.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 132342

Старое сообщение 03-02-2014 16:15
-
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 20:22. Новая тема    Ответить
  Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > [HELP] packet decoding
Говном прошу не кидаться
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024