PDA

Просмотр полной версии : хук исходящих rpc с заменой данных


Majunti
06.05.2021, 15:04
Как в SF реализовать хук ClientJoin?

sc6ut
09.05.2021, 21:01
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
;
}