[Fix] Flood/Kickhack Mantığı ile Oyuncunun Bağlantısını Kesme

  • Konuyu açan Konuyu açan Kaiser
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 3
  • Gösterim Gösterim 921

Kaiser

Admin
Admin
Geliştirici
Yardımsever Üye
Mesaj
4.402
Çözümler
441
Beğeni
5.012
Puan
2.849
Ticaret Puanı
0
Ülkemizde ne kadar bilinip kullanıldığı belli olmamakla birlikte, bazı yabancı ülkelerde pek bilinen ve hala kullanılan bir açık.
Açığa gelecek olursak; herhangi bir karakterden /messenger_auth t Emre yazdığımızda Emre isimli karaktere flood gönderiyor.
Bazı kötü niyetli kişiler bot vb. araçlarla bu floodu çok daha fazla sayıda gönderebilirler.

Bkz:
hak1kwa.gif


Çözüm için aşağıdaki adımları uygulayınız:

game/src/messenger_manager.cpp açın ve arayın:
C++:
Genişlet Daralt Kopyala
void MessengerManager::AuthToAdd(MessengerManager::keyA account, MessengerManager::keyA companion, bool bDeny)

Fonksiyonu komple değiştirin:
C++:
Genişlet Daralt Kopyala
bool MessengerManager::AuthToAdd(MessengerManager::keyA account, MessengerManager::keyA companion, bool bDeny)
{
    DWORD dw1 = GetCRC32(companion.c_str(), companion.length());
    DWORD dw2 = GetCRC32(account.c_str(), account.length());

    char buf[64];
    snprintf(buf, sizeof(buf), "%u:%u", dw1, dw2);
    DWORD dwComplex = GetCRC32(buf, strlen(buf));

    if (m_set_requestToAdd.find(dwComplex) == m_set_requestToAdd.end())
    {
        sys_log(0, "MessengerManager::AuthToAdd : request not exist %s -> %s", companion.c_str(), account.c_str());
        return false;
    }

    m_set_requestToAdd.erase(dwComplex);

    if (!bDeny)
    {
        AddToList(companion, account);
        AddToList(account, companion);
    }
    return true;
}

messenger_manager.h açın ve arayın:
C++:
Genişlet Daralt Kopyala
void    AuthToAdd(keyA account, keyA companion, bool bDeny);

Değiştirin:
C++:
Genişlet Daralt Kopyala
bool    AuthToAdd(keyA account, keyA companion, bool bDeny);

cmd_general.cpp açın ve arayın:
C++:
Genişlet Daralt Kopyala
ACMD(do_messenger_auth)

Komple değiştirin:
C++:
Genişlet Daralt Kopyala
ACMD(do_messenger_auth)
{
    if (ch->GetArena())
    {
        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("´ë·ÃÀå¿¡¼ »ç¿ëÇÏ½Ç ¼ö ¾ø½À´Ï´Ù."));
        return;
    }

    char arg1[256], arg2[256];
    two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));

    if (!*arg1 || !*arg2)
        return;

    char answer = LOWER(*arg1);
    bool bIsDenied = answer != 'y';
    bool bIsAdded = MessengerManager::instance().AuthToAdd(ch->GetName(), arg2, bIsDenied); // DENY
    if (bIsAdded && bIsDenied)
    {
        LPCHARACTER tch = CHARACTER_MANAGER::instance().FindPC(arg2);

        if (tch)
            tch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s ´ÔÀ¸·Î ºÎÅÍ Ä£±¸ µî·ÏÀ» °ÅºÎ ´çÇß½À´Ï´Ù."), ch->GetName());
    }

}
 
Eline sağlık. Martysama altyapı kullanan kişilerde bu @fixme130 olarak mevcut.
 
Konu için teşekkür ederim. Ben de bu fix yokmuş uyguladım.
 
Son düzenleme:
Uyarı: Bu konu açıldığından bu yana baya zaman geçmiş.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.
Geri
Üst