Neler yeni
XenForo Bannerlar
Modern AdBlock Uyarısı

Foruma hoş geldin, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Kod Son Zamanlarda Çıkan Flood Saldırısı Deneysel Fix

Fatih Bulut

Süper Üye
Katılım
6 Kas 2021
Mesajlar
3,979
Tepkime puanı
5,364
Puanları
113
Yaş
31
Konum
Türkiye
Dc
fatihbulut
Konuya az çok piyasadaki insanlar hakimdir, handshake/login phase'inde random size'lı packet atarak farklı bağlantılardan buffer size şişirip oyunu çökertiyorlar.

Her bağlantı için 65kb'lık bir buffer açılıyor.

Kod:
m_lpInputBuffer = buffer_new(MAX_INPUT_LEN);

Farklı desclerden çokça bu buffer doldurulduğunda kanal 4 gb memory limitine ulaşıp çöküyor.

Yaptığımız değişiklik handshake ve loginde oturum üstünden alınan toplam byte'ı kontrol edip (Simüle edildiğinde total 1.25kb bir veri akışı oluyor max potansiyel alınacak veriden fazlaysa ipyi banlıyor. Bir host için belirlediğimiz bağlantıdan fazla bağlantı alırsak da ban yer.

Anlatımda unutulan yer: desc.cpp

Kod:
//Search
    SetPhase(PHASE_HANDSHAKE);
    StartHandshake(_handshake);

// Add above
    {

        desc_event_info* timeout_info = AllocEventInfo<desc_event_info>();
        timeout_info->desc = this;
        m_pkPhaseTimeoutEvent = event_create(phase_timeout_event, timeout_info, PASSES_PER_SEC(DESC_HANDSHAKE_TIMEOUT_SEC));

    }

// Search
m_pInputProcessor = &m_inputMain;

// Add under
event_cancel(&m_pkPhaseTimeoutEvent);
DESC_MANAGER::instance().DecUnauthCount(this);

Gizli içerik
Bu içeriği görüntülemek için beğenmelisiniz.
 

Forumdan daha fazla yararlanmak için giriş yapın yada üye olun!

Forumdan daha fazla yararlanmak için giriş yapın veya kayıt olun!

Kayıt ol

Forumda bir hesap oluşturmak tamamen ücretsizdir.

Şimdi kayıt ol
Giriş yap

Eğer bir hesabınız var ise lütfen giriş yapın

Giriş yap

Tema düzenleyici

Tema özelletirmeleri

Grafik arka planlar

Granit arka planlar