- 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.
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
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.
