хук исходящих rpc с заменой данных

Решение
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<char *>( nickName.data() ), nickNameLen...

sc6ut

неизвестный
Модератор
382
1,074
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<char *>( nickName.data() ), nickNameLen );
        params->bitStream->Read( clientChallengeResponse );
        params->bitStream->Read( authKeyLen );
        authKey.reserve( authKeyLen );
        params->bitStream->Read( const_cast<char *>( authKey.data() ), authKeyLen );
        params->bitStream->Read( clientVerLen );
        clientVersion.reserve( clientVerLen );
        params->bitStream->Read( const_cast<char *>( clientVersion.data() ), clientVerLen );
        
        // меняешь данные
        
        // обратно вписываешь данные
        params->bitStream->ResetWritePointer();
        params->bitStream->Write( version );
        params->bitStream->Write( mod );
        params->bitStream->Write( static_cast<uint8_t>( nickName.size() ) );
        params->bitStream->Write( nickName.c_str(), nickName.size() );
        params->bitStream->Write( clientChallengeResponse );
        params->bitStream->Write( static_cast<uint8_t>( authKey.size() ) );
        params->bitStream->Write( authKey.c_str(), authKey.size() );
        params->bitStream->Write( static_cast<uint8_t>( clientVer.size() ) );
        params->bitStream->Write( clientVersion.c_str(), clientVer.size() );
    }
    return true;
}
 
Последнее редактирование:
  • Нравится
Реакции: yung milonov и novi4eeeek