- Mesaj
- 840
- Çözümler
- 29
- Beğeni
- 824
- Puan
- 839
- Ticaret Puanı
- 0
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 @pasha37 <3) 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.
C++:
m_lpInputBuffer = buffer_new(MAX_INPUT_LEN);
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 @pasha37 <3) 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
C++:
//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);
Dosya Eklentileri
En son bir moderatör tarafından düzenlenmiş: