Исходник Информация Гайд разобранные raknet пакеты радмира(crmp)

Cake_

Известный
Автор темы
Проверенный
263
313
прив, еще летом я реверсил основные пакеты для авторизации на сервер через раксамп / взаимодействия с интерфейсом, но желания писать бота уже не было.
так как гении начали продавать это за 15к - заливаю бесплатно. Ниже найдете текстовик который я заполнял во время реверса и функции с отправкой/обработкой пакетов, краткое объяснения шагов захода.


@@packet name: SendDialogResponse
@@type: outbound
[#]parameters:
[1]uint8_t packetId
[2]uint16_t signalType // !!desirable value!! == 2
[3]uint32_t Unk
[4]uint32_t descriptorLength // !!desirable value!! == 16
[5]char descriptor // !!desirable value!! == "OnDialogResponse"
[6]uint32_t Unk
[7]uint32_t Unk
[8]uint16_t Unk
[9]uint16_t button
[10]uint8_t Unk
[11]uint16_t Unk
[12]uint32_t listItem
[13]uint8_t Unk
[14]uint32_t answerbackLength
[15]char answerback

===================================================================================================================================

@@packet name: SendHardwareSpecifications (Handshake)
@@type: outbound
@@comment: отправляется при получении пакета #34(ID_CONNECTION_REQUEST_ACCEPTED)
[#]parameters: // !!test values!!
[1]uint8_t packetId; // 215
[2]uint16_t signalType; // 1
[3]uint32_t Unk; // 51
[4]uint8_t Unk; // 0
[5]uint32_t str1_length; // 30
[6]char str1; // WD-WCC6Y2XZN97N190449674902806
[7]uint32_t str2_length; // 40
[8]char str2; // 1528FEE466C3A51C875E9D652EFA307F4B7725BE

==========================================================================================================================================

@@packet name: SendAuthenticationQuery
@@type: outbound
@@comment: отправляется при нажатии кнопки подключения(с ввёденым паролем в инпут боксе)
[#]parameters: // !!test values!!
[1]uint8_t packetId; // 215
[2]uint16_t signalType; // 2
[3]uint32_t Unk; // 0
[4]uint32_t descriptor_length; // 18
[5]char descriptor; // OnPlayerStartLogin
[6]uint32_t Unk; // 2
[7]uint8_t Unk; // 115
[8]uint32_t str_pass_length; // 6
[9]char str_pass[6]; // 123123

==========================================================================================================================================

@@packet name: ConfirmBrowserInitialization
@@type: outbound
@@comment: отправляется после Handshake'а
[#]parameters: // !!test values!!
[1]uint8_t packetId // 215
[2]uint16_t signalType // 2
[3]uint32_t Unk // 0
[4]uint32_t descriptor_length // 22
[5]char descriptor // EndedInitializeBrowser
[6]uint32_t unk // 0

===================================================================================================================================
функции захардкожены, т.к. нужны были лишь для проверки правильности заполненных последовательностей. бит. (как это не странно, некоторые участки кода удалены)

сниппеты использования:
#define ID_RADMIR_MESSAGE    215

// processnetwork
case ID_RADMIR_MESSAGE:
    Packet_RadmirMsg( pkt );
    break;


void CBot::Packet_RadmirMsg( Packet* p )
{
    RakNet::BitStream bsPacket( (unsigned char*)p->data, p->length, false );
    uint32_t          uiStrLength;
    char              szStr[0x1000];

    bsPacket.ResetReadPointer();
    bsPacket.IgnoreBits( 64 );
    bsPacket.Read( uiStrLength );
    if ( uiStrLength <= 0x1000 && uiStrLength != 0 )
    {
        bsPacket.Read( szStr, uiStrLength );
        szStr[uiStrLength] = '\0';

        if ( strcmp( szStr, "Auth" ) == 0 )
        {
            SendAuthenticationQuery();

        }
    }
}

void CChiefBot::RmrCloseDialog()
{
    RakNet::BitStream bsData;
    bsData.Write( (uint8_t)215 );
    bsData.Write( (uint16_t)2 );
    bsData.Write( (uint32_t)0 );
    bsData.Write( (uint32_t)16 );
    bsData.Write( "OnDialogResponse", 16 );
    bsData.Write( (uint32_t)8 );
    bsData.Write( (uint32_t)100 );
    bsData.Write( (uint16_t)25600 );
    bsData.Write( (uint16_t)0 ); // button
    bsData.Write( (uint8_t)0 );
    bsData.Write( (uint16_t)25600 );
    bsData.Write( (uint32_t)-1 ); // list item
    bsData.Write( (uint8_t)115 );

    m_pRakClient->Send( &bsData, HIGH_PRIORITY, UNRELIABLE_SEQUENCED, 0 );
}

// отправляется через 1.5 - 3 сек после получении пакета #34(ID_CONNECTION_REQUEST_ACCEPTED)
void CChiefBot::SendHandshake( void )
{
    RakNet::BitStream bsHandshake;
    bsHandshake.Write( (uint8_t)215 );
    bsHandshake.Write( (uint16_t)1 );
    bsHandshake.Write( (uint32_t)51 );
    bsHandshake.Write( (uint8_t)0 );
    bsHandshake.Write( (uint32_t)30 );
    bsHandshake.Write( "WD-WCC6Y2XZN97N190449674902806", 30 );
    bsHandshake.Write( (uint32_t)40 );
    bsHandshake.Write( "1528FEE466C3A51C875E9D652EFA307F4B7725BE", 40 );

    m_pRakClient->Send( &bsHandshake, HIGH_PRIORITY, RELIABLE, NULL );

    RakNet::BitStream bsBrowser;
    bsBrowser.Write( (uint8_t)215 );
    bsBrowser.Write( (uint16_t)2 );
    bsBrowser.Write( (uint32_t)0 );
    bsBrowser.Write( (uint32_t)22 );
    bsBrowser.Write( "EndedInitializeBrowser", 22 );
    bsBrowser.Write( (uint32_t)0 );

    m_pRakClient->Send( &bsBrowser, HIGH_PRIORITY, RELIABLE, NULL );

}

// использование в void CBot::Packet_RadmirMsg( Packet* p )
void CChiefBot::SendAuthenticationQuery( void )
{
    RakNet::BitStream bsAuthQuery;
    bsAuthQuery.Write( (uint8_t)215 );
    bsAuthQuery.Write( (uint16_t)2 );
    bsAuthQuery.Write( (uint32_t)0 );
    bsAuthQuery.Write( (uint32_t)18 );
    bsAuthQuery.Write( "OnPlayerStartLogin", 18 );
    bsAuthQuery.Write( (uint32_t)2 );
    bsAuthQuery.Write( (uint8_t)115 );
    bsAuthQuery.Write( (uint32_t)6 );
    bsAuthQuery.Write( "123123", 6 );

    m_pRakClient->Send( &bsAuthQuery, HIGH_PRIORITY, RELIABLE, NULL );
}


на этом всё.
 

манку хлебал

Потрачен
305
121
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Ты проделал нереально сложную работу, результаты которой выложил в открытый доступ, красавчик. Расскажи как ты научился реверсить это все, если конечно не секрет
 
  • Нравится
  • Вау
Реакции: Sekondr For и kru_tin

Sekondr For

Потрачен
100
23
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
прив, еще летом я реверсил основные пакеты для авторизации на сервер через раксамп / взаимодействия с интерфейсом, но желания писать бота уже не было.
так как гении начали продавать это за 15к - заливаю бесплатно. Ниже найдете текстовик который я заполнял во время реверса и функции с отправкой/обработкой пакетов, краткое объяснения шагов захода.



функции захардкожены, т.к. нужны были лишь для проверки правильности заполненных последовательностей. бит. (как это не странно, некоторые участки кода удалены)

сниппеты использования:
#define ID_RADMIR_MESSAGE    215

// processnetwork
case ID_RADMIR_MESSAGE:
    Packet_RadmirMsg( pkt );
    break;


void CBot::Packet_RadmirMsg( Packet* p )
{
    RakNet::BitStream bsPacket( (unsigned char*)p->data, p->length, false );
    uint32_t          uiStrLength;
    char              szStr[0x1000];

    bsPacket.ResetReadPointer();
    bsPacket.IgnoreBits( 64 );
    bsPacket.Read( uiStrLength );
    if ( uiStrLength <= 0x1000 && uiStrLength != 0 )
    {
        bsPacket.Read( szStr, uiStrLength );
        szStr[uiStrLength] = '\0';

        if ( strcmp( szStr, "Auth" ) == 0 )
        {
            SendAuthenticationQuery();

        }
    }
}

void CChiefBot::RmrCloseDialog()
{
    RakNet::BitStream bsData;
    bsData.Write( (uint8_t)215 );
    bsData.Write( (uint16_t)2 );
    bsData.Write( (uint32_t)0 );
    bsData.Write( (uint32_t)16 );
    bsData.Write( "OnDialogResponse", 16 );
    bsData.Write( (uint32_t)8 );
    bsData.Write( (uint32_t)100 );
    bsData.Write( (uint16_t)25600 );
    bsData.Write( (uint16_t)0 ); // button
    bsData.Write( (uint8_t)0 );
    bsData.Write( (uint16_t)25600 );
    bsData.Write( (uint32_t)-1 ); // list item
    bsData.Write( (uint8_t)115 );

    m_pRakClient->Send( &bsData, HIGH_PRIORITY, UNRELIABLE_SEQUENCED, 0 );
}

// отправляется через 1.5 - 3 сек после получении пакета #34(ID_CONNECTION_REQUEST_ACCEPTED)
void CChiefBot::SendHandshake( void )
{
    RakNet::BitStream bsHandshake;
    bsHandshake.Write( (uint8_t)215 );
    bsHandshake.Write( (uint16_t)1 );
    bsHandshake.Write( (uint32_t)51 );
    bsHandshake.Write( (uint8_t)0 );
    bsHandshake.Write( (uint32_t)30 );
    bsHandshake.Write( "WD-WCC6Y2XZN97N190449674902806", 30 );
    bsHandshake.Write( (uint32_t)40 );
    bsHandshake.Write( "1528FEE466C3A51C875E9D652EFA307F4B7725BE", 40 );

    m_pRakClient->Send( &bsHandshake, HIGH_PRIORITY, RELIABLE, NULL );

    RakNet::BitStream bsBrowser;
    bsBrowser.Write( (uint8_t)215 );
    bsBrowser.Write( (uint16_t)2 );
    bsBrowser.Write( (uint32_t)0 );
    bsBrowser.Write( (uint32_t)22 );
    bsBrowser.Write( "EndedInitializeBrowser", 22 );
    bsBrowser.Write( (uint32_t)0 );

    m_pRakClient->Send( &bsBrowser, HIGH_PRIORITY, RELIABLE, NULL );

}

// использование в void CBot::Packet_RadmirMsg( Packet* p )
void CChiefBot::SendAuthenticationQuery( void )
{
    RakNet::BitStream bsAuthQuery;
    bsAuthQuery.Write( (uint8_t)215 );
    bsAuthQuery.Write( (uint16_t)2 );
    bsAuthQuery.Write( (uint32_t)0 );
    bsAuthQuery.Write( (uint32_t)18 );
    bsAuthQuery.Write( "OnPlayerStartLogin", 18 );
    bsAuthQuery.Write( (uint32_t)2 );
    bsAuthQuery.Write( (uint8_t)115 );
    bsAuthQuery.Write( (uint32_t)6 );
    bsAuthQuery.Write( "123123", 6 );

    m_pRakClient->Send( &bsAuthQuery, HIGH_PRIORITY, RELIABLE, NULL );
}


на этом всё.
Братанчик его можно было бы оформить ешо короче и оптимизирование( а Ладна тут и написано.Я тупой кароче)
 

kin4stat

mq-team
Всефорумный модератор
2,730
4,710
Ты проделал нереально сложную работу
Ахуеть какая нереально сложная работа посмотреть строки в хекс эдиторе лол. Тут половина полей названа unk, хотя там интуитивно понятно почти со всеми полями за что оно отвечает
 

Михаил Бластов

Известный
457
165
слушайте, раз вы тут пиздец какие крутые реверсеры - зареверсите пакетики интерфейсов аризоны и cef в общем
 
  • Ха-ха
Реакции: kwedle

манку хлебал

Потрачен
305
121
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Ахуеть какая нереально сложная работа посмотреть строки в хекс эдиторе лол. Тут половина полей названа unk, хотя там интуитивно понятно почти со всеми полями за что оно отвечает
Смысл твоего сообщения? Для меня то что он проделал - непонятный порядок действий. Я пробовал себя в реверсе (не только хуйня, связанная с сампом, но и обычный десктопный софт), но для меня это сложно. Реверс мне не даётся, поэтому я решил спросить то, как он это сделал (с целью попытаться открыть для себя новую область в "околопрограммировании".
Давай поставим тебя вырезать аппендикс человеку. Ты сможешь? Ни-ху-я. А хирург скажет "ахуеть какая нереально сложная работа", ему же надо всего провести скапелем по коже, вырезать сам аппендикс и все.
 

Sekondr For

Потрачен
100
23
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

Rei

Известный
Друг
1,589
1,614
Смысл твоего сообщения? Для меня то что он проделал - непонятный порядок действий. Я пробовал себя в реверсе (не только хуйня, связанная с сампом, но и обычный десктопный софт), но для меня это сложно. Реверс мне не даётся, поэтому я решил спросить то, как он это сделал (с целью попытаться открыть для себя новую область в "околопрограммировании".
Давай поставим тебя вырезать аппендикс человеку. Ты сможешь? Ни-ху-я. А хирург скажет "ахуеть какая нереально сложная работа", ему же надо всего провести скапелем по коже, вырезать сам аппендикс и все.
onSendPacket()?
 
  • Нравится
Реакции: Sargon

манку хлебал

Потрачен
305
121
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
во-первых, сначала нужно поебаться со скриптом, который позволит выводить инфу о пакете (насколько я знаю, на лаунчере радмира не поддерживается sf)
во-вторых, с этим скриптом нужно зайти в игру
в-третьих, сидеть гадать структуру пакета
 
  • Нравится
Реакции: kru_tin

Похожие темы