ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   разобранные raknet пакеты радмира(crmp) (https://forum.antichat.xyz/showthread.php?t=1457287)

Cake_ 10.11.2022 00:04

прив, еще летом я реверсил основные пакеты для авторизации на сервер через раксамп / взаимодействия с интерфейсом, но желания писать бота уже не было.

так как гении начали продавать это за 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

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
)
;
}



на этом всё.

kwedle 10.11.2022 01:26

@FakeSince что с лицом?

манку хлебал 10.11.2022 02:59

Ты проделал нереально сложную работу, результаты которой выложил в открытый доступ, красавчик. Расскажи как ты научился реверсить это все, если конечно не секрет

Михаил Бластов 10.11.2022 13:42

Цитата:

Сообщение от Cake_

гении начали продавать это за 15к

бля, что в этом такого? реверс не быстро происходит. а продавать начали еще в марте если что

Sargon 10.11.2022 13:58

Цитата:

Сообщение от Михаил Бластов

реверс не быстро происходит

дело нескольких минут

Михаил Бластов 10.11.2022 14:31

Цитата:

Сообщение от Sargon

дело нескольких минут

нет

kru_tin 10.11.2022 15:35

Цитата:

Сообщение от Sargon

дело нескольких минут

при условии что ты знаешь как устроена структура пакета)))))

Sekondr For 10.11.2022 21:22

Цитата:

Сообщение от Cake_

прив, еще летом я реверсил основные пакеты для авторизации на сервер через раксамп / взаимодействия с интерфейсом, но желания писать бота уже не было.
так как гении начали продавать это за 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

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 11.11.2022 01:36

Цитата:

Сообщение от манку хлебал

Ты проделал нереально сложную работу

Ахуеть какая нереально сложная работа посмотреть строки в хекс эдиторе лол. Тут половина полей названа unk, хотя там интуитивно понятно почти со всеми полями за что оно отвечает

Михаил Бластов 11.11.2022 01:38

слушайте, раз вы тут пиздец какие крутые реверсеры - зареверсите пакетики интерфейсов аризоны и cef в общем

манку хлебал 11.11.2022 04:19

Цитата:

Сообщение от kin4stat

Ахуеть какая нереально сложная работа посмотреть строки в хекс эдиторе лол. Тут половина полей названа unk, хотя там интуитивно понятно почти со всеми полями за что оно отвечает

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

Давай поставим тебя вырезать аппендикс человеку. Ты сможешь? Ни-ху-я. А хирург скажет "ахуеть какая нереально сложная работа", ему же надо всего провести скапелем по коже, вырезать сам аппендикс и все.

Sekondr For 11.11.2022 08:23

Цитата:

Сообщение от Михаил Бластов

слушайте, раз вы тут пиздец какие крутые реверсеры - зареверсите пакетики интерфейсов аризоны и cef в общем

Пакеты интрфейсов арз?Настолько лень человеку.

Rei 11.11.2022 15:37

Цитата:

Сообщение от манку хлебал

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

onSendPacket()?

манку хлебал 11.11.2022 16:24

Цитата:

Сообщение от Rei

onSendPacket()?

во-первых, сначала нужно поебаться со скриптом, который позволит выводить инфу о пакете (насколько я знаю, на лаунчере радмира не поддерживается sf)

во-вторых, с этим скриптом нужно зайти в игру

в-третьих, сидеть гадать структуру пакета

Михаил Бластов 11.11.2022 17:14

Цитата:

Сообщение от Minavit

Пакеты интрфейсов арз?Настолько лень человеку.

нихуя не понял

Arabqik 14.11.2022 01:14

куда это вставлять?

zFriks 24.11.2022 19:29

Frame 6.pngzFriks · 24 Ноя 2022 в 18:29' data-fancybox="lb-post-1202279" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/179152/" style="cursor: pointer;" title="Frame 6.png">
https://forum.antichat.xyz/attachments/28202279/

js функция, которая отправляет dialog response

sendClientEvent(0, "OnDialogResponse",0, 0, -1, "")

Thrill_Pill 25.11.2022 16:27

Цитата:

Сообщение от zFriks

js функция, которая отправляет dialog response

sendClientEvent(0, "OnDialogResponse",0, 0, -1, "")


Мб кому-то надо для RakSAMP Lite..

Lua:





Код:

local
bs
=
bitStream
.
new
(
)
bs
:
writeUInt8
(
215
)
bs
:
writeUInt16
(
2
)
bs
:
writeUInt32
(
0
)
bs
:
writeUInt32
(
16
)
bs
:
writeString
(
"OnDialogResponse"
)
bs
:
writeUInt32
(
8
)
bs
:
writeUInt32
(
100
)
bs
:
writeUInt16
(
25600
)
bs
:
writeUInt16
(
button
)
bs
:
writeUInt8
(
0
)
bs
:
writeUInt16
(
25600
)
bs
:
writeUInt32
(
item
)
bs
:
writeUInt8
(
115
)
bs
:
writeUInt32
(
input
:
len
(
)
)
bs
:
writeString
(
input
)


loossklxm 10.06.2023 03:43

Цитата:

Сообщение от Thrill_Pill

Мб кому-то надо для RakSAMP Lite..

Lua:





Код:

local
bs
=
bitStream
.
new
(
)
bs
:
writeUInt8
(
215
)
bs
:
writeUInt16
(
2
)
bs
:
writeUInt32
(
0
)
bs
:
writeUInt32
(
16
)
bs
:
writeString
(
"OnDialogResponse"
)
bs
:
writeUInt32
(
8
)
bs
:
writeUInt32
(
100
)
bs
:
writeUInt16
(
25600
)
bs
:
writeUInt16
(
button
)
bs
:
writeUInt8
(
0
)
bs
:
writeUInt16
(
25600
)
bs
:
writeUInt32
(
item
)
bs
:
writeUInt8
(
115
)
bs
:
writeUInt32
(
input
:
len
(
)
)
bs
:
writeString
(
input
)



Есть то же самое, но для инвентаря?

Переместить, продать, передать

Jaz1zl 27.09.2023 21:44

[5]char descriptor; // OnPlayerStartLogin

Как получить это значение(метод)?

Знаю что уже прошло почти год, но может кто-то да и ответит

F0RQU1N and 28.09.2023 16:36

Цитата:

Сообщение от Jaz1zl

[5]char descriptor; // OnPlayerStartLogin
Как получить это значение(метод)?
Знаю что уже прошло почти год, но может кто-то да и ответит

там сейчас вроде OnAuthorizationStart

или что ты имеешь ввиду

Jaz1zl 30.09.2023 01:50

Цитата:

Сообщение от F0RQU1N and

там сейчас вроде OnAuthorizationStart
или что ты имеешь ввиду

Всё это я нашёл даже для регистрации, через пакеты узнал, теперь осталось понять в какой последовательности и какие пакеты отпровлять

F0RQU1N and 30.09.2023 04:24

Цитата:

Сообщение от Jaz1zl

Всё это я нашёл даже для регистрации, через пакеты узнал, теперь осталось понять в какой последовательности и какие пакеты отпровлять

Ну посмотри в какой последовательности у тебя отправляется в игре, домой приду могу кинуть скрипт , если конечно оно не устарело еще

Jaz1zl 30.09.2023 23:45

Цитата:

Сообщение от F0RQU1N and

Ну посмотри в какой последовательности у тебя отправляется в игре, домой приду могу кинуть скрипт , если конечно оно не устарело еще

ну смотри. легко я разобрался в бонуске

Lua:





Код:

local
bs
=
raknetNewBitStream
(
)
local
method
=
'OnRegistrationBonuses'
local
ref
=
''
raknetBitStreamWriteInt8
(
bs
,
215
)
raknetBitStreamWriteInt16
(
bs
,
2
)
raknetBitStreamWriteInt32
(
bs
,
0
)
raknetBitStreamWriteInt32
(
bs
,
#
method
)
raknetBitStreamWriteString
(
bs
,
method
)
raknetBitStreamWriteInt32
(
bs
,
2
)
raknetBitStreamWriteInt8
(
bs
,
115
)
raknetBitStreamWriteInt32
(
bs
,
#
ref
)
raknetBitStreamWriteString
(
bs
,
ref
)
raknetSendBitStreamEx
(
bs
,
1
,
9
,
0
)



А вот в вводе пароля для регистрации не как не пойму что не так отправляю

Lua:





Код:

function
reg1
(
email
,
pass
)
print
(
'---------------reg---------'
)
local
bs
=
raknetNewBitStream
(
)
local
method
=
'OnRegistrationData'
print
(
email
)
print
(
pass
)
raknetBitStreamWriteInt8
(
bs
,
215
)
raknetBitStreamWriteInt16
(
bs
,
2
)
raknetBitStreamWriteInt32
(
bs
,
0
)
raknetBitStreamWriteInt32
(
bs
,
#
method
)
raknetBitStreamWriteString
(
bs
,
method
)
raknetBitStreamWriteInt8
(
bs
,
115
)
raknetBitStreamWriteInt32
(
bs
,
#
email
)
raknetBitStreamWriteString
(
bs
,
email
)
raknetBitStreamWriteInt8
(
bs
,
115
)
raknetBitStreamWriteInt32
(
bs
,
#
pass
)
raknetBitStreamWriteString
(
bs
,
pass
)
raknetSendBitStreamEx
(
bs
,
1
,
9
,
0
)
end


F0RQU1N and 01.10.2023 12:51

Цитата:

Сообщение от Jaz1zl

А вот в вводе пароля для регистрации не как не пойму что не так отправляю

хз, я регистрацию себе не делал.


Время: 06:03