Просмотр полной версии : хук исходящих rpc с заменой данных
Как в SF реализовать хук ClientJoin?
C++:
// в мейнлуп регаешь колбэк
SF
->
getRakNet
(
)
->
registerRakNetCallback
(
RAKHOOK_TYPE_OUTCOMING_RPC
,
outcomingRPC
)
;
bool
__stdcall
outcomingRPC
(
stRakNetHookParams
*
params
)
{
if
(
params
->
packetId
==
RPC_ClientJoin
)
{
int32_t
version
;
uint8_t
mod
,
nickNameLen
,
authKeyLen
,
clientVerLen
;
std
::
string nickName
,
authKey
,
clientVersion
;
uint32_t
clientChallengeResponse
;
// читаешь данные
params
->
bitStream
->
ResetReadPointer
(
)
;
params
->
bitStream
->
Read
(
version
)
;
params
->
bitStream
->
Read
(
mod
)
;
params
->
bitStream
->
Read
(
nickNameLen
)
;
nickName
.
reserve
(
nickNameLen
)
;
params
->
bitStream
->
Read
(
const_cast
(
nickName
.
data
(
)
)
,
nickNameLen
)
;
params
->
bitStream
->
Read
(
clientChallengeResponse
)
;
params
->
bitStream
->
Read
(
authKeyLen
)
;
authKey
.
reserve
(
authKeyLen
)
;
params
->
bitStream
->
Read
(
const_cast
(
authKey
.
data
(
)
)
,
authKeyLen
)
;
params
->
bitStream
->
Read
(
clientVerLen
)
;
clientVersion
.
reserve
(
clientVerLen
)
;
params
->
bitStream
->
Read
(
const_cast
(
clientVersion
.
data
(
)
)
,
clientVerLen
)
;
// меняешь данные
// обратно вписываешь данные
params
->
bitStream
->
ResetWritePointer
(
)
;
params
->
bitStream
->
Write
(
version
)
;
params
->
bitStream
->
Write
(
mod
)
;
params
->
bitStream
->
Write
(
static_cast
(
nickName
.
size
(
)
)
)
;
params
->
bitStream
->
Write
(
nickName
.
c_str
(
)
,
nickName
.
size
(
)
)
;
params
->
bitStream
->
Write
(
clientChallengeResponse
)
;
params
->
bitStream
->
Write
(
static_cast
(
authKey
.
size
(
)
)
)
;
params
->
bitStream
->
Write
(
authKey
.
c_str
(
)
,
authKey
.
size
(
)
)
;
params
->
bitStream
->
Write
(
static_cast
(
clientVer
.
size
(
)
)
)
;
params
->
bitStream
->
Write
(
clientVersion
.
c_str
(
)
,
clientVer
.
size
(
)
)
;
}
return
true
;
}
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot