bList 1
bList
emirhanHCL 1
emirhanHCL
farkmt2official 1
farkmt2official
R 1
Roksam
[DEV]AB 1
[DEV]AB
Mt2Hizmet 1
Mt2Hizmet
Sevdamsın 1
Sevdamsın
TuZaKK 1
TuZaKK
Bvural41 1
Bvural41
Hikaye Ekle

Enchanced Captcha System - Bot koruma

Bir kaç değişiklik ile karaktere stun ve görünmezlik + ölümsüzlük eklendi yani hiç birşekilde hiç bir işlem yapılmaması için gerekli müdahaleler yapıldı + yanlış bilindiği taktirde 3 kere deneme yaptırıyor yanlış olursa 30 saniye 1 dakika 2 dakika ve 30 dakika olarak revize ettim karakter kilitleniyor tamamen sabit hardcode tamamen kalktı artık algoritma nereyi istiyorsa ona göre grid içerisinde hareket ediyor.

0726_215937.jpg
0726_220509.jpg
0726_220519.jpg
 
C++:
bool CHARACTER::ReplyCaptcha(const DWORD dwFileCrc, const LONG x, const LONG y)
{
    if (dwFileCrc == m_dwCaptchaFileCrc)
        if (x == 220 && y == 88) // HARD CODED POSITION
            return true;

    return false;
}

zeka küpü maşallah, doğru cevabın crc'sini paketin içinde clienta yolluyorsun

C++:
    const char* szFileName = vSendImgFiles[number(0, vSendImgFiles.size() - 1)].c_str();
    m_dwCaptchaFileCrc = GetCRC32(szFileName, strlen(szFileName));

    TPacketGCCaptcha Packet;
    Packet.bHeader = HEADER_GC_CAPTCHA;
    Packet.dwFileCrc = m_dwCaptchaFileCrc;

hileciler, gelen paketten crc'yi okuyun 2 saniye bekleyin aynısını x=220, y=88 ile geri gönderin.

tebrikler, doğrulamayı geçtiniz..

C++:
void CCaptcha::SetSetting(const BYTE& bToken, const DWORD& dwValue)

primitive türü const referans parametre olarak yazmak, vay be..

böyle captcha sistemi olmaz.
sistemi kendime göre baştan yaptım kod mantıgı aşşagıda ki gibi olabilir bence kullanacaklar örnek alabilir

Kod:
bool CHARACTER::CreateCaptchaChallenge(bool bAnnounce)
{
    if (!GetDesc() || m_bCaptchaState != CAPTCHA_STATE_ACTIVE)
        return false;

    if (m_pkCaptchaTimeoutEvent)
        event_cancel(&m_pkCaptchaTimeoutEvent);

    std::array<BYTE, CAPTCHA_VISUAL_COUNT> aVisuals;
    for (size_t i = 0; i < aVisuals.size(); ++i)
        aVisuals[i] = static_cast<BYTE>(i);

    for (size_t i = aVisuals.size() - 1; i > 0; --i)
        std::swap(aVisuals[i], aVisuals[number(0, static_cast<int>(i))]);

    std::array<BYTE, CAPTCHA_OPTION_COUNT> aOptions;
    for (size_t i = 0; i < aOptions.size(); ++i)
        aOptions[i] = aVisuals[i];

    for (size_t i = aOptions.size() - 1; i > 0; --i)
        std::swap(aOptions[i], aOptions[number(0, static_cast<int>(i))]);

    DWORD dwChallenge = 0;
    do
    {
        dwChallenge = CreateCaptchaRandomValue(GetPlayerID());
    }
    while (dwChallenge == m_dwCaptchaChallenge);

    m_dwCaptchaChallenge = dwChallenge;
    m_dwCaptchaCorrectToken = 0;
    m_bCaptchaTargetCell = number(0, CAPTCHA_TARGET_CELL_COUNT - 1);
    m_dwCaptchaOpenTime = get_dword_time();

    TPacketGCCaptchaSystem packet = {};
    packet.bHeader = HEADER_GC_CAPTCHA_SYSTEM;
    packet.bSubHeader = CAPTCHA_GC_OPEN;
    packet.bResult = CAPTCHA_RESULT_NONE;
    packet.bAttempt = m_bCaptchaFailCount + 1;
    packet.bTargetCell = m_bCaptchaTargetCell;
    packet.dwChallenge = m_dwCaptchaChallenge;
    packet.dwDuration = GetCaptchaDuration();

    const BYTE bTarget = aVisuals[0];
    packet.wTargetVisual = c_aCaptchaVisuals[bTarget].aTarget[number(0, CAPTCHA_ALIAS_COUNT - 1)];

    std::array<DWORD, CAPTCHA_OPTION_COUNT> aTokens = {};
    for (size_t i = 0; i < aOptions.size(); ++i)
    {
        DWORD dwToken = 0;
        bool bUnique = false;

        while (!bUnique)
        {
            dwToken = CreateCaptchaRandomValue(GetPlayerID() + static_cast<DWORD>(i + 1));
            bUnique = std::find(aTokens.begin(), aTokens.end(), dwToken) == aTokens.end();
        }

        aTokens[i] = dwToken;
        packet.aOptions[i].wVisual = c_aCaptchaVisuals[aOptions[i]].aOption[number(0, CAPTCHA_ALIAS_COUNT - 1)];
        packet.aOptions[i].dwToken = dwToken;

        if (aOptions[i] == bTarget)
            m_dwCaptchaCorrectToken = dwToken;
    }

    GetDesc()->Packet(&packet, sizeof(packet));

    captcha_event_info* info = AllocEventInfo<captcha_event_info>();
    info->ch = this;
    m_pkCaptchaTimeoutEvent = event_create(captcha_timeout_event, info, PASSES_PER_SEC(packet.dwDuration));

    if (bAnnounce)
        ChatPacket(CHAT_TYPE_INFO, "[LS;2398]");

    return true;
}
 

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

Geri
Üst