1. Соблюдайте Правила форума и проявляйте уважение к другим участникам беседы.

Help Gcbi патч

Тема в разделе 'Garena Client Broadcast', создана пользователем hakersoft, 23 авг 2014.

  1. hakersoft Гуру

    Сообщения:
    91
    Спасибы:
    54
    Сборка бота GHost:
    Ghost++ own edition
    Дата начала использования бота:
    20.03.13
    Есть у кого нормальный патч gcbi, в котором описаны все изменения?
    Пытался поставить те что в папке gcb, и понял что кучу всего не хватает.
    Например нет файлов gcbiprotocol.cpp и .h
    Также не объявлено куча переменных, тот же m_EntryKey.
    В патче так-же не описаны изменения в gameprotocol.cpp, в котором тот же entrykey добавлять надо
    Код:
    BYTEARRAY CGameProtocol :: SEND_W3GS_GAMEINFO( bool TFT, unsigned char war3Version, BYTEARRAY mapGameType, BYTEARRAY mapFlags, BYTEARRAY mapWidth, BYTEARRAY mapHeight, string gameName, string hostName, uint32_t upTime, string mapPath, BYTEARRAY mapCRC, uint32_t slotsTotal, uint32_t slotsOpen, uint16_t port, uint32_t hostCounter, uint32_t entryKey )
    И куча других подводных камней.
    Буду благодарен, если кто кинет нормальный патч с описанием всех изменений, которые надо произвести.Ставить буду на ghost one.
  2. Sparko_Dima Старожила

    Сообщения:
    744
    Спасибы:
    104
    Сборка бота GHost:
    Ghost Sparko
    Дата начала использования бота:
    10.10.09
    Бредовый какой то ты пач взял ну да ладно по своему расспишу
    gameprotocol.h

    находишь
    Код:
    CIncomingJoinPlayer :: CIncomingJoinPlayer( uint32_t nHostCounter, string nName, BYTEARRAY &nInternalIP )
    заменяешь на
    Код:
    CIncomingJoinPlayer :: CIncomingJoinPlayer( uint32_t nHostCounter, uint32_t nEntryKey, string nName, BYTEARRAY &nInternalIP )
    находишь
    Код:
    m_HostCounter = nHostCounter;
    вставляешь ниже
    Код:
    m_EntryKey = nEntryKey;
    находишь
    Код:
    BYTEARRAY SEND_W3GS_GAMEINFO( bool TFT, unsigned char war3Version, BYTEARRAY mapGameType, BYTEARRAY mapFlags, BYTEARRAY mapWidth, BYTEARRAY mapHeight, string gameName, string hostName, uint32_t upTime, string mapPath, BYTEARRAY mapCRC, uint32_t slotsTotal, uint32_t slotsOpen, uint16_t port, uint32_t hostCounter );
    заменяешь на
    Код:
    BYTEARRAY SEND_W3GS_GAMEINFO( bool TFT, unsigned char war3Version, BYTEARRAY mapGameType, BYTEARRAY mapFlags, BYTEARRAY mapWidth, BYTEARRAY mapHeight, string gameName, string hostName, uint32_t upTime, string mapPath, BYTEARRAY mapCRC, uint32_t slotsTotal, uint32_t slotsOpen, uint16_t port, uint32_t hostCounter, uint32_t entryKey );
    gameprotocol.cpp

    находишь
    Код:
    uint32_t HostCounter = UTIL_ByteArrayToUInt32( data, false, 4 );
    и ниже ставляешь
    Код:
    uint32_t EntryKey = UTIL_ByteArrayToUInt32( data, false, 8 );
    находишь
    Код:
    return new CIncomingJoinPlayer( HostCounter, string( Name.begin( ), Name.end( ) ), InternalIP );
    и заменяешь на
    Код:
    return new CIncomingJoinPlayer( HostCounter, EntryKey, string( Name.begin( ), Name.end( ) ), InternalIP );

    game_base.cpp
    находишь
    Код:
    // test if player is reserved/admin/safelisted
    и выше кусок там
    Код:
        // identify their joined realm
        // this is only possible because when we send a game refresh via LAN or battle.net we encode an ID value in the 4 most significant bits of the host counter
        // the client sends the host counter when it joins so we can extract the ID value here
        // note: this is not a replacement for spoof checking since it doesn't verify the player's name and it can be spoofed anyway
     
        uint32_t HostCounterID = joinPlayer->GetHostCounter( ) >> 28;
        string JoinedRealm;
     
        // we use an ID value of 0 to denote joining via LAN
     
        if( HostCounterID != 0 )
        {
            for( vector<CBNET *> :: iterator i = m_GHost->m_BNETs.begin( ); i != m_GHost->m_BNETs.end( ); i++ )
            {
                if( (*i)->GetHostCounterID( ) == HostCounterID )
                    JoinedRealm = (*i)->GetServer( );
            }
        }
    и заменяй на
    Код:
        // identify their joined realm
        // this is only possible because when we send a game refresh via LAN or battle.net we encode an ID value in the 4 most significant bits of the host counter
        // the client sends the host counter when it joins so we can extract the ID value here
        // note: this is not a replacement for spoof checking since it doesn't verify the player's name and it can be spoofed anyway
     
        uint32_t HostCounterID = joinPlayer->GetHostCounter( ) >> 28;
        string JoinedRealm;
     
        for( vector<CBNET *> :: iterator i = m_GHost->m_BNETs.begin( ); i != m_GHost->m_BNETs.end( ); ++i )
        {
            if( (*i)->GetHostCounterID( ) == HostCounterID )
                JoinedRealm = (*i)->GetServer( );
        }
     
        if( JoinedRealm.empty( ) )
        {
            // the player is pretending to join via LAN, which they might or might not be (i.e. it could be spoofed)
            // however, we've been broadcasting a random entry key to the LAN
            // if the player is really on the LAN they'll know the entry key, otherwise they won't
            // or they're very lucky since it's a 32 bit number
     
            if( joinPlayer->GetEntryKey( ) != m_EntryKey )
            {
                // oops!
     
                CONSOLE_Print( "[GAME: " + m_GameName + "] player [" + joinPlayer->GetName( ) + "|" + potential->GetExternalIPString( ) + "] is trying to join the game over LAN but used an incorrect entry key" );
                potential->Send( m_Protocol->SEND_W3GS_REJECTJOIN( REJECTJOIN_WRONGPASSWORD ) );
                potential->SetDeleteMe( true );
                return;
            }
        }
    находишь
    Код:
    m_HostCounter = m_GHost->m_HostCounter++;
    и ниже ставляй
    Код:
    m_EntryKey = rand( );
    game_base.h
    находишь
    Код:
    uint32_t m_HostCounter;                            // a unique game number
    и ниже ставляй
    Код:
    uint32_t m_EntryKey;                            // random entry key for LAN, used to prove that a player is actually joining from LAN
    hakersoft нравится это.
  3. hakersoft Гуру

    Сообщения:
    91
    Спасибы:
    54
    Сборка бота GHost:
    Ghost++ own edition
    Дата начала использования бота:
    20.03.13
    Я так понимаю, это не целый патч.Не поделишься файлом?
    Или остальное можно надергать в gcbi-extend-v2.patch?Или все же другой нужен?
  4. Mr.World Ньюфаг

    Сообщения:
    52
    Спасибы:
    4
    gcbi патч я ставил только на ghost ++
    если нужна помощь с его инсталяцией - пиши в скайп.
    yaremii4uk - skype login
  5. Sparko_Dima Старожила

    Сообщения:
    744
    Спасибы:
    104
    Сборка бота GHost:
    Ghost Sparko
    Дата начала использования бота:
    10.10.09
    это не пач gcbi это из ghost ++ во вторых там есть 2 места лучше если надо пиши скайп TR.Sparko
  6. hakersoft Гуру

    Сообщения:
    91
    Спасибы:
    54
    Сборка бота GHost:
    Ghost++ own edition
    Дата начала использования бота:
    20.03.13
    Все, разобрался.применил патч+наковырял недостающие куски в ohsystem боте, все работает.
    [IMG][IMG]
    Всем спасибо.