VictoryasHD 1
VictoryasHD
xranzei 1
xranzei
mavzermete 1
mavzermete
lHezarfeNl 1
lHezarfeNl
TuZaKK 1
TuZaKK
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Bodyguardd 1
Bodyguardd
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
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 Cross-Platform OldSchool MOBİL & PC 1-99 Sunucusu Lamira2 6 Kasım'da Açılıyor! Büyük 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 : 1, Üye: 0, Misafir: 1)

Geri
Üst