Çözüldü SPEEDHACK: DETECTED! sorunu

Bu konu çözüme ulaştırılmıştır. Çözüm için konuya yazılan tüm yorumları okumayı unutmayın. Eğer konudaki yorumlar sorununuzu çözmediyse yeni bir konu açabilirsiniz.
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.

Toranaga

Efendi Toranaga
Süper Moderatör
Geliştirici
Yardımsever Üye
Mesaj
864
Çözümler
45
Beğeni
948
Puan
959
Ticaret Puanı
0
Anlamadığım bir şekilde bunları diyor ve oyundan atıyor.
karekterin hareket hızı 110 civarı.
bunu neden yapıyor olabilir.
Kod:
Genişlet Daralt Kopyala
Sep 14 02:22:50.966322 :: SPEEDHACK: DETECTED! Real (delta -11187 127440)
Sep 14 02:22:51.166278 :: SPEEDHACK: DETECTED! Real (delta -11020 127640)
Sep 14 02:22:51.166384 :: SPEEDHACK: DETECTED! Real (delta -11020 127640)
 
Çözüm
bu kod bloğunu kaldırmayı bende düşündüm, ama benim amacım nedeni öğrenmek. Hiç anlamadığım bir sorun.
C++ la dün başlamış biri olarak düşünüyorum :) iDelta diye bir değişken oluşturulmuş , bu iDelta client saatinin 50 ile bölümünden çıkan sonuçtan küçükse bu sorun oluyormuş yani client saatin yanlış olabilir

Yani freebsd nin saati ile PC nin saatini eşitlersen sorun çözülmüş olacaktır
Syserrler boş mu yani sadece bu mu var ? Client ve server srclerinde ? Yanılmıyorsam bu benimde başıma gelmişti ve client tabanlı vir sıkıntıydı ama nasıl çözdüğümü hatırlamıyorum ama şimdi araştırırım
 
input_main.cpp CInputMain::Move(LPCHARACTER ch, const char * data) fonksiyonunun tamamını ekleyebilir misiniz?
 
input_main.cpp:
Genişlet Daralt Kopyala
void CInputMain::Move(LPCHARACTER ch, const char * data)
{
    if (!ch->CanMove())
        return;

    struct command_move * pinfo = (struct command_move *) data;

    if (pinfo->bFunc >= FUNC_MAX_NUM && !(pinfo->bFunc & 0x80))
    {
        sys_err("invalid move type: %s", ch->GetName());
        return;
    }

    //enum EMoveFuncType
    //{   
    //    FUNC_WAIT,
    //    FUNC_MOVE,
    //    FUNC_ATTACK,
    //    FUNC_COMBO,
    //    FUNC_MOB_SKILL,
    //    _FUNC_SKILL,
    //    FUNC_MAX_NUM,
    //    FUNC_SKILL = 0x80,
    //}; 

    // 텔레포트 핵 체크

//    if (!test_server)    //2012.05.15 김용욱 : 테섭에서 (무적상태로) 다수 몬스터 상대로 다운되면서 공격시 콤보핵으로 죽는 문제가 있었다.
    {
        #ifdef ENABLE_CHECK_GHOSTMODE_HACK
        if (ch->IsPC() && ch->IsDead())
        {
            sys_log(0, "MOVE: %s trying to move as dead", ch->GetName());

            ch->Show(ch->GetMapIndex(), ch->GetX(), ch->GetY(), ch->GetZ());
            ch->Stop();
            return;
        }
        #endif
        const float fDist = DISTANCE_SQRT((ch->GetX() - pinfo->lX) / 100, (ch->GetY() - pinfo->lY) / 100);

        if (((false == ch->IsRiding() && fDist > 25) || fDist > 40) && OXEVENT_MAP_INDEX != ch->GetMapIndex())
        {
            if( false == LC_IsEurope() )
            {
                const PIXEL_POSITION & warpPos = ch->GetWarpPosition();

                if (warpPos.x == 0 && warpPos.y == 0)
                    LogManager::instance().HackLog("Teleport", ch); // 부정확할 수 있음
            }

            sys_log(0, "MOVE: %s trying to move too far (dist: %.1fm) Riding(%d)", ch->GetName(), fDist, ch->IsRiding());

            ch->Show(ch->GetMapIndex(), ch->GetX(), ch->GetY(), ch->GetZ());
            ch->Stop();
            return;
        }

        //
        // 스피드핵(SPEEDHACK) Check
        //
        DWORD dwCurTime = get_dword_time();
        // 시간을 Sync하고 7초 후 부터 검사한다. (20090702 이전엔 5초였음)
        bool CheckSpeedHack = (false == ch->GetDesc()->IsHandshaking() && dwCurTime - ch->GetDesc()->GetClientTime() > 7000);

        if (CheckSpeedHack)
        {
            int iDelta = (int) (pinfo->dwTime - ch->GetDesc()->GetClientTime());
            int iServerDelta = (int) (dwCurTime - ch->GetDesc()->GetClientTime());

            iDelta = (int) (dwCurTime - pinfo->dwTime);

            // 시간이 늦게간다. 일단 로그만 해둔다. 진짜 이런 사람들이 많은지 체크해야함. TODO
            if (iDelta >= 30000)
            {
                sys_log(0, "SPEEDHACK: slow timer name %s delta %d", ch->GetName(), iDelta);
                ch->GetDesc()->DelayedDisconnect(3);
            }
            // 1초에 20msec 빨리 가는거 까지는 이해한다.
            else if (iDelta < -(iServerDelta / 50))
            {
                sys_log(0, "SPEEDHACK: DETECTED! %s (delta %d %d)", ch->GetName(), iDelta, iServerDelta);
                ch->GetDesc()->DelayedDisconnect(3);
            }
        }

        //
        // 콤보핵 및 스피드핵 체크
        //
        if (pinfo->bFunc == FUNC_COMBO && g_bCheckMultiHack)
        {
            CheckComboHack(ch, pinfo->bArg, pinfo->dwTime, CheckSpeedHack); // 콤보 체크
        }
    }

    if (pinfo->bFunc == FUNC_MOVE)
    {
        if (ch->GetLimitPoint(POINT_MOV_SPEED) == 0)
            return;

        ch->SetRotation(pinfo->bRot * 5);    // 중복 코드
        ch->ResetStopTime();                // ""

        ch->Goto(pinfo->lX, pinfo->lY);
    }
    else
    {
        if (pinfo->bFunc == FUNC_ATTACK || pinfo->bFunc == FUNC_COMBO)
            ch->OnMove(true);
        else if (pinfo->bFunc & FUNC_SKILL)
        {
            const int MASK_SKILL_MOTION = 0x7F;
            unsigned int motion = pinfo->bFunc & MASK_SKILL_MOTION;

            if (!ch->IsUsableSkillMotion(motion))
            {
                const char* name = ch->GetName();
                unsigned int job = ch->GetJob();
                unsigned int group = ch->GetSkillGroup();

                char szBuf[256];
                snprintf(szBuf, sizeof(szBuf), "SKILL_HACK: name=%s, job=%d, group=%d, motion=%d", name, job, group, motion);
                LogManager::instance().HackLog(szBuf, ch->GetDesc()->GetAccountTable().login, ch->GetName(), ch->GetDesc()->GetHostName());
                sys_log(0, "%s", szBuf);

                if (test_server)
                {
                    ch->GetDesc()->DelayedDisconnect(number(2, 8));
                    ch->ChatPacket(CHAT_TYPE_INFO, szBuf);
                }
                else
                {
                    ch->GetDesc()->DelayedDisconnect(number(150, 500));
                }
            }

            ch->OnMove();
        }

        ch->SetRotation(pinfo->bRot * 5);    // 중복 코드
        ch->ResetStopTime();                // ""

        ch->Move(pinfo->lX, pinfo->lY);
        ch->Stop();
        ch->StopStaminaConsume();
    }

    TPacketGCMove pack;

    pack.bHeader      = HEADER_GC_MOVE;
    pack.bFunc        = pinfo->bFunc;
    pack.bArg         = pinfo->bArg;
    pack.bRot         = pinfo->bRot;
    pack.dwVID        = ch->GetVID();
    pack.lX           = pinfo->lX;
    pack.lY           = pinfo->lY;
    pack.dwTime       = pinfo->dwTime;
    pack.dwDuration   = (pinfo->bFunc == FUNC_MOVE) ? ch->GetCurrentMoveDuration() : 0;

    ch->PacketAround(&pack, sizeof(TPacketGCMove), ch);
/*
    if (pinfo->dwTime == 10653691) // 디버거 발견
    {
        if (ch->GetDesc()->DelayedDisconnect(number(15, 30)))
            LogManager::instance().HackLog("Debugger", ch);

    }
    else if (pinfo->dwTime == 10653971) // Softice 발견
    {
        if (ch->GetDesc()->DelayedDisconnect(number(15, 30)))
            LogManager::instance().HackLog("Softice", ch);
    }
*/
    /*
    sys_log(0,
            "MOVE: %s Func:%u Arg:%u Pos:%dx%d Time:%u Dist:%.1f",
            ch->GetName(),
            pinfo->bFunc,
            pinfo->bArg,
            pinfo->lX / 100,
            pinfo->lY / 100,
            pinfo->dwTime,
            fDist);
    */
}
 
// Çözümü sağlamadığı için harici link kaldırıldı - Whistle

Şöyle bir konu var istersen bir bak
 
bu kod bloğunu kaldırmayı bende düşündüm, ama benim amacım nedeni öğrenmek. Hiç anlamadığım bir sorun.
 
Kodlar bendeki dosyalarla aynı ama neden bu şekilde atıyor anlam veremedim. İsterseniz şu kodları yorum satırına çevirip tekrar deneyin.
C++:
Genişlet Daralt Kopyala
            else if (iDelta < -(iServerDelta / 50))
            {
                sys_log(0, "SPEEDHACK: DETECTED! %s (delta %d %d)", ch->GetName(), iDelta, iServerDelta);
                ch->GetDesc()->DelayedDisconnect(3);
            }

Server ve client arasında zaman farkı çok fazla olduğu için bu hatayı veriyor olabilir.
 
bu kod bloğunu kaldırmayı bende düşündüm, ama benim amacım nedeni öğrenmek. Hiç anlamadığım bir sorun.
C++ la dün başlamış biri olarak düşünüyorum :) iDelta diye bir değişken oluşturulmuş , bu iDelta client saatinin 50 ile bölümünden çıkan sonuçtan küçükse bu sorun oluyormuş yani client saatin yanlış olabilir

Yani freebsd nin saati ile PC nin saatini eşitlersen sorun çözülmüş olacaktır
 
Çözüm
Tam olarak değerleri görebilmek için sys_log içerisinde Handshake: client_time bunu aratın. Client ve server time verileri bulunacak. Belki sorunun kaynağını bu şekilde anlayabiliriz.
 
C++ la dün başlamış biri olarak düşünüyorum :) iDelta diye bir değişken oluşturulmuş , bu iDelta client saatinin 50 ile bölümünden çıkan sonuçtan küçükse bu sorun oluyormuş yani client saatin yanlış olabilir

Yani freebsd nin saati ile PC nin saatini eşitlersen sorun çözülmüş olacaktır
:) gözünün önündeki kodları okumazsam boş boş düşünürüm tabi :) makinenin saatini ayarlarım ve düzeldi. teşekkür ederim.
konu kapatılabilir.
 
Son durumu bildirdiğiniz için teşekkürler. Demek ki kaldırmaya gerek yokmuş. :D
@DARKNESNIGHT çözüme yardımcı olduğunuz için teşekkürler
Teşekkür ederim , şuan çok mutlu oldum daha döngülere gelmeden kodları okuyabilmeye başladığımı görmek güzel:matrix_gf::matrix:
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Üst