Bodyguardd 1
Bodyguardd
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
noisiv 1
noisiv
Manwe Work 1
Manwe Work
romegames 1
romegames
Agora Metin2 1
Agora Metin2
TuZaKK 1
TuZaKK
kaptanmikro1 1
kaptanmikro1
mavzermete 1
mavzermete
Reklam vermek için turkmmo@gmail.com

Buffer Exploit

  • Konuyu başlatan Konuyu başlatan Silverhand
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 91
  • Görüntüleme Görüntüleme 9K
  • Etiketler Etiketler
    bufferexploit

Türkiye'nin ilk OldSchool MOBİL 1-99 Sunucusu Sezar2 9 Ekim'de Açılıyor! Rekor Açılışı Kaçırma! HEMEN TIKLA!

Kişi yaptığı işlerle meydana gelir ciddiye alabileceğim bir şey değil. Fırsatçılığı sevmiyorum m2 kültürünü bu hale getirenlerin başında meşale tutanları ise hiç hiç sevmiyorum tüylerim ürperiyor


Aynen
 
Düzenleme!
Desc.cpp'de şu düzenlemeyi yapmıştık hatırlarsanız.
Kod:
int DESC::ProcessInput()
{
    if (!m_lpInputBuffer)
    {
        sys_err("DESC::ProcessInput : nil input buffer");
        return -1;
    }

    const DWORD now = get_dword_time();

    if (now - m_dwPacketTick >= 1000)
    {
        m_dwPacketTick = now;
        m_iPacketCounter = 0;
    }

    if (++m_iPacketCounter > 256)
    {
        sys_err("DESC::ProcessInput: packet flood from %s", GetHostName());
        return -1;
    }

    if (m_iPhase == PHASE_HANDSHAKE)
    {
        if (get_global_time() - m_dwConnectTime > 10)
        {
            sys_err("DESC::ProcessInput: handshake timeout %s", GetHostName());
            return -1;
        }
    }

    buffer_adjust_size(m_lpInputBuffer, m_iMinInputBufferLen);

    ssize_t bytes_read = socket_read(
        m_sock,
        (char*)buffer_write_peek(m_lpInputBuffer),
        buffer_has_space(m_lpInputBuffer)
    );

    if (bytes_read < 0)
        return -1;

    if (bytes_read == 0)
        return 0;

    buffer_write_proceed(m_lpInputBuffer, bytes_read);

    if (buffer_size(m_lpInputBuffer) > (2 * 1024 * 1024))
    {
        sys_err("DESC::ProcessInput: input buffer too large (%u) from %s",
            (unsigned)buffer_size(m_lpInputBuffer), GetHostName());
        return -1;
    }

    if (!m_pInputProcessor)
    {
        sys_err("DESC::ProcessInput: no input processor");
        return -1;
    }

    int iBytesProceed = 0;

    while (!m_pInputProcessor->Process(
        this,
        buffer_read_peek(m_lpInputBuffer),
        buffer_size(m_lpInputBuffer),
        iBytesProceed))
    {
        // Infinite loop protection
        if (iBytesProceed <= 0)
        {
            sys_err("DESC::ProcessInput: invalid proceed size %d from %s",
                iBytesProceed, GetHostName());
            return -1;
        }

        buffer_read_proceed(m_lpInputBuffer, iBytesProceed);
        iBytesProceed = 0;
    }

    if (iBytesProceed > 0)
        buffer_read_proceed(m_lpInputBuffer, iBytesProceed);

    return bytes_read;
}

Buradaki şu kısım :

Kod:
    if (buffer_size(m_lpInputBuffer) > (2 * 1024 * 1024))

    {

        sys_err("DESC::ProcessInput: input buffer too large (%u) from %s",

            (unsigned)buffer_size(m_lpInputBuffer), GetHostName());

        return -1;

    }

Şu şekilde değişmelidir!

Kod:
    if (GetType() == DESC_TYPE_ACCEPTOR && !IsPhase(PHASE_P2P) && buffer_size(m_lpInputBuffer) > (2 * 1024 * 1024))

    {

        sys_err("DESC::ProcessInput: input buffer too large (%u) from %s",

            (unsigned)buffer_size(m_lpInputBuffer), GetHostName());

        return -1;

    }

Gelen veriyi kimden geldiğine bakmadan kontrol ediyordu. Game sunucusu iki tür bağlantı kullanıyor ve bu satır ikisine de uygulanıyordu.
O zamanlar tam olarak konuya dikkatli yaklaşmadığımız için gözden kaçmış.
 

Şu an konuyu görüntüleyenler (Toplam : 3, Üye: 3, Misafir: 0)

Geri
Üst