Server Tabanlı Anti Hile Rehberi

LDrago

The Dragon's Excalibur
Üye
Mesaj
162
Çözümler
1
Beğeni
181
Puan
726
Ticaret Puanı
0
Anti Waithack:
"battle.cpp" açın ve include listesine aşağıdaki kodu ekleyin
Kod:
Genişlet Daralt Kopyala
#include "db.h"

Örnek;


ss+(2014-11-23+at+06.57.51).png


Şimdi bu kodu aratın;

Kod:
Genişlet Daralt Kopyala
bool IS_SPEED_HACK(LPCHARACTER ch, LPCHARACTER victim, DWORD current_time)

ve altındaki fonksiyonda dahil olmak üzere aşağıda verdiğim kod bloğu ile değiştirin

Kod:
Genişlet Daralt Kopyala
#define ENABLE_SYSCHAT_NOTICE
#define ENABLE_SYSLOG_NOTICE
#define ENABLE_BAN_WAITHACK
bool IS_SPEED_HACK(LPCHARACTER ch, LPCHARACTER victim, DWORD current_time)
{
    if (ch->m_kAttackLog.dwVID == victim->GetVID())
    {
        if (current_time - ch->m_kAttackLog.dwTime < GET_ATTACK_SPEED(ch))
        {
            INCREASE_SPEED_HACK_COUNT(ch);

            if (test_server)
            {
                sys_log(0, "%s attack hack! time (delta, limit)=(%u, %u) hack_count %d",
                        ch->GetName(),
                        current_time - ch->m_kAttackLog.dwTime,
                        GET_ATTACK_SPEED(ch),
                        ch->m_speed_hack_count);

                ch->ChatPacket(CHAT_TYPE_INFO, "%s attack hack! time (delta, limit)=(%u, %u) hack_count %d",
                        ch->GetName(),
                        current_time - ch->m_kAttackLog.dwTime,
                        GET_ATTACK_SPEED(ch),
                        ch->m_speed_hack_count);
            }

            SET_ATTACK_TIME(ch, victim, current_time);
            SET_ATTACKED_TIME(ch, victim, current_time);
            return true;
        }
    }

    SET_ATTACK_TIME(ch, victim, current_time);

    if (victim->m_AttackedLog.dwPID == ch->GetPlayerID())
    {
        if (current_time - victim->m_AttackedLog.dwAttackedTime < GET_ATTACK_SPEED(ch))
        {
            INCREASE_SPEED_HACK_COUNT(ch);
            if (ch->m_speed_hack_count > 50)
            {
#ifdef ENABLE_SYSLOG_NOTICE
                sys_log(0, "%s Attack Speed HACK! time (delta, limit)=(%u, %u), hack_count = %d",
                        ch->GetName(),
                        current_time - victim->m_AttackedLog.dwAttackedTime,
                        GET_ATTACK_SPEED(ch),
                        ch->m_speed_hack_count);
#endif
#ifdef ENABLE_SYSCHAT_NOTICE
                ch->ChatPacket(CHAT_TYPE_INFO, "Attack Speed Hack(%s), (delta, limit)=(%u, %u), hack_count = %d",
                        ch->GetName(),
                        current_time - victim->m_AttackedLog.dwAttackedTime,
                        GET_ATTACK_SPEED(ch),
                        ch->m_speed_hack_count);
#endif           
#ifdef ENABLE_BAN_WAITHACK           
                std::auto_ptr<SQLMsg> msg(DBManager::instance().DirectQuery("UPDATE account.account SET status= 'BLOCK' WHERE id = %d", ch->GetDesc()->GetAccountTable().id));
#endif
                ch->GetDesc()->DelayedDisconnect(3);
            }
       
            SET_ATTACKED_TIME(ch, victim, current_time);
            return true;
        }
    }

    SET_ATTACKED_TIME(ch, victim, current_time);
    return false;
}

Yapıştırdığınızda 3 define da aktif olur kapatmak için başına "//"(comment tag) koymanız yeterlidir.


Kod:
Genişlet Daralt Kopyala
//#define ENABLE_BAN_WAITHACK

gibi

Oluşacak görüntü

ilk hali:

ss+(2014-11-23+at+07.00.43).png


ss+(2014-11-23+at+07.01.41).png


Yeni Hali;

ss+(2014-11-23+at+07.02.18).png

ss+(2014-11-23+at+07.02.41).png



Sonuç:



Anti Safezone:
*char_battle.cpp

Bulun:
Kod:
Genişlet Daralt Kopyala
bool CHARACTER::Attack(LPCHARACTER pkVictim, BYTE bType)
{
    if (test_server)
        sys_log(0, "[TEST_SERVER] Attack : %s type %d, MobBattleType %d", GetName(), bType, !GetMobBattleType() ? 0 : GetMobAttackRange());
    //PROF_UNIT puAttack("Attack");
    if (!CanMove())
        return false;
Altına ekleyin:
Kod:
Genişlet Daralt Kopyala
    SECTREE    *sectree = NULL;
    SECTREE    *vsectree = NULL;
    sectree = GetSectree();
    vsectree = pkVictim->GetSectree();

    if (sectree && vsectree){
        if (sectree->IsAttr(GetX(), GetY(), ATTR_BANPK) || vsectree->IsAttr(pkVictim->GetX(), pkVictim->GetY(), ATTR_BANPK)) {
            if (GetDesc()) {
                LogManager::instance().HackLog("ANTISAFEZONE", this);
                GetDesc()->DelayedDisconnect(3);
            }
        }
    }

ss+(2015-09-10+at+02.27.06).png

safezone.png


Anti Ghostmode:
Uyarı!:
Bu önlem yapılan testlerde oyuncu öldüğünde oyundan atabilir.
*input_main.cpp

Bulun:
Kod:
Genişlet Daralt Kopyala
if (!test_server) //2012.05.15 ±è¿ë¿í : Å×¼·¿¡¼* (¹«Àû»óÅ·Î) ´Ù¼ö ¸ó½ºÅÍ »ó´ë·Î ´Ù¿îµÇ¸é¼* °ø°İ½Ã ÄŞº¸ÇÙÀ¸·Î Á×´Â ¹®Á¦°¡ ÀÖ¾ú´Ù.
Altına ekleyin:
Kod:
Genişlet Daralt Kopyala
 if (ch->IsPC() && ch->IsDead()) {
if (ch->GetDesc()) {
LogManager::instance().HackLog("GHOSTMODE", ch);
ch->GetDesc()->DelayedDisconnect(3);
}
}

ss+(2015-09-10+at+02.30.51).png


ghost.png


Anti Wallhack:
*input_main.cpp


Bulun:
Kod:
Genişlet Daralt Kopyala
const float fDist = DISTANCE_SQRT((ch->GetX() - pinfo->lX) / 100, (ch->GetY() - pinfo->lY) / 100);
Üstüne ekleyin:
Kod:
Genişlet Daralt Kopyala
 PIXEL_POSITION pos = ch->GetXYZ();
if (!SECTREE_MANAGER::instance().GetMovablePosition(c h->GetMapIndex(), pos.x, pos.y, pos)) {
if (ch->GetDesc()) {
LogManager::instance().HackLog("WALLHACK", ch);
ch->GetDesc()->DelayedDisconnect(3);
}
}

ss+(2015-09-10+at+02.34.04).png

ss+(2015-09-10+at+02.19.03).png


Anti Long name generator:
*input_login.cpp


Bulun:
Kod:
Genişlet Daralt Kopyala
if (true == g_BlockCharCreation)
{
d->Packet(&packFailure, sizeof(packFailure));
return;
}
Altına ekleyin:
Kod:
Genişlet Daralt Kopyala
if (strlen(pinfo->name) > 12){
d->Packet(&packFailure, sizeof(packFailure));
return;
}
ss+(2015-09-07+at+06.48.21).png

ss+(2015-09-10+at+02.42.07).png


#Güncelleme 1

-Client taraflı-

PythonPlayerModule.cpp


Kod:
Genişlet Daralt Kopyala
{ "SetItemData", playerSetItemData, METH_VARARGS },
*Sahte item oluşturma fonkiyonu


PythonItemModule.cpp


Kod:
Genişlet Daralt Kopyala
{ "CreateItem", itemCreateItem, METH_VARARGS },
*Sahte item oluşturma fonkiyonu


PythonCharacterModule.cpp


Kod:
Genişlet Daralt Kopyala
{ "IsGameMaster", chrIsGameMaster, METH_VARARGS },
*Gm dedektör fonksiyonu


Bu fonksiyonlar kullanılmıyor, bu satırları silin.

-Server taraflı-

Anti Maden botu


*char.cpp

Ara:
Kod:
Genişlet Daralt Kopyala
 if (mining::GetRawOreFromLoad(chLoad->GetRaceNum()) == 0)
return;
Üstüne ekle:
Kod:
Genişlet Daralt Kopyala
 if (GetMapIndex() != chLoad->GetMapIndex() || DISTANCE_APPROX(GetX() - chLoad->GetX(), GetY() - chLoad->GetY()) > 1000)
return;

ss+(2015-09-18+at+03.13.18).png



Su olmayan yerde balık tutma fix

*char.cpp

Bul:
Kod:
Genişlet Daralt Kopyala
void CHARACTER::fishing()

Üstüne ekle:
Kod:
Genişlet Daralt Kopyala
bool CHARACTER::IsNearWater() const
{
if (!GetSectree())
return false;


for (int x = -1; x <= 1; ++x)
{
for (int y = -1; y <= 1; ++y)
{
if (IS_SET(GetSectree()->GetAttribute(GetX() + x * 100, GetY() + y * 100), ATTR_WATER))
return true;
}
}


return false;
}

ss+(2015-09-18+at+03.21.45).png


Bul:
Kod:
Genişlet Daralt Kopyala
 if (m_pkFishingEvent)
{
fishing_take();
return;
}

Altına ekle:
Kod:
Genişlet Daralt Kopyala
 if (!IsNearWater())
return;

ss+(2015-09-18+at+03.22.57).png



*char.h

Bul:
Kod:
Genişlet Daralt Kopyala
void fishing();

Üstüne ekle:
Kod:
Genişlet Daralt Kopyala
bool IsNearWater() const;

ss+(2015-09-18+at+03.21.17).png



Anti renkli pazar

*input_main.cpp

Bul:
Kod:
Genişlet Daralt Kopyala
 if (uiBytes < sizeof(TPacketCGMyShop) + iExtraLen)
return -1;
Üstüne ekle:
Kod:
Genişlet Daralt Kopyala
 if (strstr(p->szSign, ("|c")) || strstr(p->szSign, ("|C"))){
LogManager::instance().HackLog("COLORFUL_SHOP", ch);
return (iExtraLen);
}

ss+(2015-09-18+at+04.14.00).png



Anti Drophack

*char_item.cpp

Bul:
Kod:
Genişlet Daralt Kopyala
LPCHARACTER owner = funcFindOwnership.owner;
Üstüne ekle:
Kod:
Genişlet Daralt Kopyala
 if (!owner) {
LogManager::instance().HackLog("DROPHACK", this);
return false;
}

ss+(2015-09-18+at+04.47.03).png



#Güncelleme 2

-Server taraflı-


Anti Fishbot

*fishing.cpp

Ara:
Kod:
Genişlet Daralt Kopyala
int ret = Compute(info->fish_id, ms, &item_vnum, GetFishingLevel(ch));
Altına ekle:
Kod:
Genişlet Daralt Kopyala
if (!ch->GetLastFishTime())
ch->SetLastFishTime(ms);
else {
if (ch->GetFishHackCount() == 3) {
ch->ResetFishHackCount();
LogManager::instance().HackLog("FISHBOT", ch);
ch->GetDesc()->DelayedDisconnect(3);
}
else {
if ((ms == ch->GetLastFishTime()) || (abs(ch->GetLastFishTime() - ms) < 70) || (abs(ms - ch->GetLastFishTime()) < 70))
ch->UpdateFishHackCount();
else
ch->ResetFishHackCount();
}
}

if (test_server)
ch->ChatPacket(CHAT_TYPE_INFO, "/HACK-TEST/ Last: %d Now: %d HackCount: %d", ch->GetLastFishTime(), ms, ch->GetFishHackCount());

ss+(2015-09-21+at+05.53.35).png



*char.cpp

Ara:
Kod:
Genişlet Daralt Kopyala
m_dwMountTime = 0;
Üstüne ekle:
Kod:
Genişlet Daralt Kopyala
m_iLastFishTime = 0;
m_iFishHackCount = 0;

ss+(2015-09-21+at+05.57.25).png



Ara:
Kod:
Genişlet Daralt Kopyala
void CHARACTER::ResetChatCounter()
Üstüne ekle:
Kod:
Genişlet Daralt Kopyala
void CHARACTER::SetLastFishTime(int time)
{
m_iLastFishTime = time;
}


int CHARACTER::GetLastFishTime()
{
return m_iLastFishTime;
}


int CHARACTER::GetFishHackCount()
{
return m_iFishHackCount;
}


void CHARACTER::UpdateFishHackCount()
{
m_iFishHackCount += 1;
}


void CHARACTER::ResetFishHackCount()
{
m_iFishHackCount = 0;
}

ss+(2015-09-21+at+05.58.56).png



*char.h

Ara:
Kod:
Genişlet Daralt Kopyala
DWORD GetSkipComboAttackByTime() const;
Altına ekle:
Kod:
Genişlet Daralt Kopyala
int GetFishHackCount();
void UpdateFishHackCount();
void ResetFishHackCount();
void SetLastFishTime(int time);
int GetLastFishTime();

ss+(2015-09-21+at+05.59.53).png



Ara:
Kod:
Genişlet Daralt Kopyala
DWORD m_dwSkipComboAttackByTime;
Altına ekle:
Kod:
Genişlet Daralt Kopyala
int m_iFishHackCount;
int m_iLastFishTime;

Anti Guild Maker(düşük seviyede)

*input_main.cpp


Ara:
Kod:
Genişlet Daralt Kopyala
if (ch->GetGold() < 200000)
return;
Altına ekle:
Kod:
Genişlet Daralt Kopyala
if (ch->GetLevel() < 40)
{
LogManager::instance().HackLog("GUILDMAKER", ch);
ch->GetDesc()->DelayedDisconnect(3);
return;
}

ss+(2015-09-21+at+06.09.16).png



Anti Teleport Hack'i aktif etme
Uyarı:
Bu sistem maymun zindanı gibi yerlerde ışınlanırken oyundan düşürüyor.
*input_main.cpp

Bul:
Kod:
Genişlet Daralt Kopyala
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;
Değiştir:
Kod:
Genişlet Daralt Kopyala
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();
ch->GetDesc()->DelayedDisconnect(0);
return;
ss+(2015-09-21+at+06.14.32).png



-Client taraflı-


Anti py injection

*EterPack/EterPackManager.cpp
Ara:
Kod:
Genişlet Daralt Kopyala
bool CEterPackManager::GetFromFile(CMappedFile & rMappedFile, const char * c_szFileName, LPCVOID * pData)
Bul:
Kod:
Genişlet Daralt Kopyala
#ifndef _DEBUG
//const char *pcExt = strchr(c_szFileName, '.');
//if (pcExt &&
// _strnicmp(pcExt, ".py", 3) == 0 && // python ½ºÅ©¸³Æ® Áß
// stricmp(c_szFileName, "logininfo.py") != 0 && // ·Î±×ÀÎ Á¤º¸ ÆÄÀÏÀÌ ¾Æ´Ï°í
// strnicmp(c_szFileName, "locale", 6) != 0
// )
//{
// return false;
//}
#endif
Değiştir:
Kod:
Genişlet Daralt Kopyala
const char *pcExt = strchr(c_szFileName, '.');
if (_strnicmp(pcExt, ".py", 3) == 0){
PostQuitMessage(0);
}


Anti Anti Stun & Anti Sanal GM Efekti

*PythonCharacterManagerModule.cpp

Silin:
Kod:
Genişlet Daralt Kopyala
{ "SetAffect", chrmgrSetAffect, METH_VARARGS },


Anti Attackspeed & Anti Movespeed

*PythonCharacterModule.cpp


Aşağıdaki satırları silin:
Kod:
Genişlet Daralt Kopyala
{ "SetMoveSpeed", chrSetMoveSpeed, METH_VARARGS },
{ "SetAttackSpeed", chrSetAttackSpeed, METH_VARARGS },


Bu konu altındaki başlıklar genel olarak kullanılan hileleri engellemek için yeterlidir
Daha iyi bir koruma için ve bot, hile ve macro scriptlerini engellemek için modül yada fonksiyon isimlerini değiştirmenizide öneririm
Aşağıda net modülünün adını değiştirmek için basit bir anlatım var




*PythonNetworkStreamModule.cpp


Ara:
Kod:
Genişlet Daralt Kopyala
PyObject* poModule = Py_InitModule("net", s_methods);
Modül adını kendinize göre değiştirin, örnek olarak:
Kod:
Genişlet Daralt Kopyala
PyObject* poModule = Py_InitModule("mt2net", s_methods);

Şimdi, Tüm python dosyalarını Notepad++ ile açın


CTRL+H ye basın ve Gelen ekrandan Değiştir butonuna basın


"Aranan" kısmına bunu yazın: import net


"Değiştir" kısmına bunu yazın: import mt2net as net
 

Dosya Eklentileri

  • ss+(2015-09-10+at+02.19.03).jpg
    ss+(2015-09-10+at+02.19.03).jpg
    332,5 KB · Gösterim: 703
En son bir moderatör tarafından düzenlenmiş:
Çok iyi bir konu olmuş. Yalnız anti safezone filan başlık koymuşsunuz. Onun altında hilenin detaylarını paylaşırsanız iyi olur. En azından kişi neyi fixlediğini daha iyi bilsin. Konunun sabitlenmesini bende onaylıyorum. :)
 
Ghost mode için uygulanan şeyde öldüğünüzde sürekli sizi oyundan atıyor.
Anti teleport hackta aynı şekilde. Maymun zindanında geçitlerden geçerken çok atıyor.
@LDrago lütfen düzgün çalışmayan önlemlerin başına uyarı ekleyin. Aksi halde bu konuyu kapatmak zorunda kalacağım.
 
Son düzenleme:
Anti Waithack:
"battle.cpp" açın ve include listesine aşağıdaki kodu ekleyin
Kod:
Genişlet Daralt Kopyala
#include "db.h"

Örnek;


725 eklentisini görüntüle

Şimdi bu kodu aratın;

Kod:
Genişlet Daralt Kopyala
bool IS_SPEED_HACK(LPCHARACTER ch, LPCHARACTER victim, DWORD current_time)

ve altındaki fonksiyonda dahil olmak üzere aşağıda verdiğim kod bloğu ile değiştirin

Kod:
Genişlet Daralt Kopyala
#define ENABLE_SYSCHAT_NOTICE
#define ENABLE_SYSLOG_NOTICE
#define ENABLE_BAN_WAITHACK
bool IS_SPEED_HACK(LPCHARACTER ch, LPCHARACTER victim, DWORD current_time)
{
    if (ch->m_kAttackLog.dwVID == victim->GetVID())
    {
        if (current_time - ch->m_kAttackLog.dwTime < GET_ATTACK_SPEED(ch))
        {
            INCREASE_SPEED_HACK_COUNT(ch);

            if (test_server)
            {
                sys_log(0, "%s attack hack! time (delta, limit)=(%u, %u) hack_count %d",
                        ch->GetName(),
                        current_time - ch->m_kAttackLog.dwTime,
                        GET_ATTACK_SPEED(ch),
                        ch->m_speed_hack_count);

                ch->ChatPacket(CHAT_TYPE_INFO, "%s attack hack! time (delta, limit)=(%u, %u) hack_count %d",
                        ch->GetName(),
                        current_time - ch->m_kAttackLog.dwTime,
                        GET_ATTACK_SPEED(ch),
                        ch->m_speed_hack_count);
            }

            SET_ATTACK_TIME(ch, victim, current_time);
            SET_ATTACKED_TIME(ch, victim, current_time);
            return true;
        }
    }

    SET_ATTACK_TIME(ch, victim, current_time);

    if (victim->m_AttackedLog.dwPID == ch->GetPlayerID())
    {
        if (current_time - victim->m_AttackedLog.dwAttackedTime < GET_ATTACK_SPEED(ch))
        {
            INCREASE_SPEED_HACK_COUNT(ch);
            if (ch->m_speed_hack_count > 50)
            {
#ifdef ENABLE_SYSLOG_NOTICE
                sys_log(0, "%s Attack Speed HACK! time (delta, limit)=(%u, %u), hack_count = %d",
                        ch->GetName(),
                        current_time - victim->m_AttackedLog.dwAttackedTime,
                        GET_ATTACK_SPEED(ch),
                        ch->m_speed_hack_count);
#endif
#ifdef ENABLE_SYSCHAT_NOTICE
                ch->ChatPacket(CHAT_TYPE_INFO, "Attack Speed Hack(%s), (delta, limit)=(%u, %u), hack_count = %d",
                        ch->GetName(),
                        current_time - victim->m_AttackedLog.dwAttackedTime,
                        GET_ATTACK_SPEED(ch),
                        ch->m_speed_hack_count);
#endif          
#ifdef ENABLE_BAN_WAITHACK          
                std::auto_ptr<SQLMsg> msg(DBManager::instance().DirectQuery("UPDATE account.account SET status= 'BLOCK' WHERE id = %d", ch->GetDesc()->GetAccountTable().id));
#endif
                ch->GetDesc()->DelayedDisconnect(3);
            }
      
            SET_ATTACKED_TIME(ch, victim, current_time);
            return true;
        }
    }

    SET_ATTACKED_TIME(ch, victim, current_time);
    return false;
}

Yapıştırdığınızda 3 define da aktif olur kapatmak için başına "//"(comment tag) koymanız yeterlidir.


Kod:
Genişlet Daralt Kopyala
//#define ENABLE_BAN_WAITHACK

gibi

Oluşacak görüntü

ilk hali:

726 eklentisini görüntüle

727 eklentisini görüntüle

Yeni Hali;

728 eklentisini görüntüle
729 eklentisini görüntüle


Sonuç:



Anti Safezone:
*char_battle.cpp

Bulun:
Kod:
Genişlet Daralt Kopyala
bool CHARACTER::Attack(LPCHARACTER pkVictim, BYTE bType)
{
    if (test_server)
        sys_log(0, "[TEST_SERVER] Attack : %s type %d, MobBattleType %d", GetName(), bType, !GetMobBattleType() ? 0 : GetMobAttackRange());
    //PROF_UNIT puAttack("Attack");
    if (!CanMove())
        return false;
Altına ekleyin:
Kod:
Genişlet Daralt Kopyala
    SECTREE    *sectree = NULL;
    SECTREE    *vsectree = NULL;
    sectree = GetSectree();
    vsectree = pkVictim->GetSectree();

    if (sectree && vsectree){
        if (sectree->IsAttr(GetX(), GetY(), ATTR_BANPK) || vsectree->IsAttr(pkVictim->GetX(), pkVictim->GetY(), ATTR_BANPK)) {
            if (GetDesc()) {
                LogManager::instance().HackLog("ANTISAFEZONE", this);
                GetDesc()->DelayedDisconnect(3);
            }
        }
    }

730 eklentisini görüntüle
731 eklentisini görüntüle

Anti Ghostmode:
Uyarı!:
Bu önlem yapılan testlerde oyuncu öldüğünde oyundan atabilir.
*input_main.cpp

Bulun:
Kod:
Genişlet Daralt Kopyala
if (!test_server) //2012.05.15 ±è¿ë¿í : Å×¼·¿¡¼* (¹«Àû»óÅ·Î) ´Ù¼ö ¸ó½ºÅÍ »ó´ë·Î ´Ù¿îµÇ¸é¼* °ø°İ½Ã ÄŞº¸ÇÙÀ¸·Î Á×´Â ¹®Á¦°¡ ÀÖ¾ú´Ù.
Altına ekleyin:
Kod:
Genişlet Daralt Kopyala
 if (ch->IsPC() && ch->IsDead()) {
if (ch->GetDesc()) {
LogManager::instance().HackLog("GHOSTMODE", ch);
ch->GetDesc()->DelayedDisconnect(3);
}
}

732 eklentisini görüntüle

734 eklentisini görüntüle

Anti Wallhack:
*input_main.cpp


Bulun:
Kod:
Genişlet Daralt Kopyala
const float fDist = DISTANCE_SQRT((ch->GetX() - pinfo->lX) / 100, (ch->GetY() - pinfo->lY) / 100);
Üstüne ekleyin:
Kod:
Genişlet Daralt Kopyala
 PIXEL_POSITION pos = ch->GetXYZ();
if (!SECTREE_MANAGER::instance().GetMovablePosition(c h->GetMapIndex(), pos.x, pos.y, pos)) {
if (ch->GetDesc()) {
LogManager::instance().HackLog("WALLHACK", ch);
ch->GetDesc()->DelayedDisconnect(3);
}
}

735 eklentisini görüntüle
740 eklentisini görüntüle

Anti Long name generator:
*input_login.cpp


Bulun:
Kod:
Genişlet Daralt Kopyala
if (true == g_BlockCharCreation)
{
d->Packet(&packFailure, sizeof(packFailure));
return;
}
Altına ekleyin:
Kod:
Genişlet Daralt Kopyala
if (strlen(pinfo->name) > 12){
d->Packet(&packFailure, sizeof(packFailure));
return;
}
737 eklentisini görüntüle
741 eklentisini görüntüle

#Güncelleme 1

-Client taraflı-

PythonPlayerModule.cpp


Kod:
Genişlet Daralt Kopyala
{ "SetItemData", playerSetItemData, METH_VARARGS },
*Sahte item oluşturma fonkiyonu


PythonItemModule.cpp


Kod:
Genişlet Daralt Kopyala
{ "CreateItem", itemCreateItem, METH_VARARGS },
*Sahte item oluşturma fonkiyonu


PythonCharacterModule.cpp


Kod:
Genişlet Daralt Kopyala
{ "IsGameMaster", chrIsGameMaster, METH_VARARGS },
*Gm dedektör fonksiyonu


Bu fonksiyonlar kullanılmıyor, bu satırları silin.

-Server taraflı-

Anti Maden botu


*char.cpp

Ara:
Kod:
Genişlet Daralt Kopyala
 if (mining::GetRawOreFromLoad(chLoad->GetRaceNum()) == 0)
return;
Üstüne ekle:
Kod:
Genişlet Daralt Kopyala
 if (GetMapIndex() != chLoad->GetMapIndex() || DISTANCE_APPROX(GetX() - chLoad->GetX(), GetY() - chLoad->GetY()) > 1000)
return;

742 eklentisini görüntüle


Su olmayan yerde balık tutma fix

*char.cpp

Bul:
Kod:
Genişlet Daralt Kopyala
void CHARACTER::fishing()

Üstüne ekle:
Kod:
Genişlet Daralt Kopyala
bool CHARACTER::IsNearWater() const
{
if (!GetSectree())
return false;


for (int x = -1; x <= 1; ++x)
{
for (int y = -1; y <= 1; ++y)
{
if (IS_SET(GetSectree()->GetAttribute(GetX() + x * 100, GetY() + y * 100), ATTR_WATER))
return true;
}
}


return false;
}

743 eklentisini görüntüle

Bul:
Kod:
Genişlet Daralt Kopyala
 if (m_pkFishingEvent)
{
fishing_take();
return;
}

Altına ekle:
Kod:
Genişlet Daralt Kopyala
 if (!IsNearWater())
return;

744 eklentisini görüntüle


*char.h

Bul:
Kod:
Genişlet Daralt Kopyala
void fishing();

Üstüne ekle:
Kod:
Genişlet Daralt Kopyala
bool IsNearWater() const;

745 eklentisini görüntüle


Anti renkli pazar

*input_main.cpp

Bul:
Kod:
Genişlet Daralt Kopyala
 if (uiBytes < sizeof(TPacketCGMyShop) + iExtraLen)
return -1;
Üstüne ekle:
Kod:
Genişlet Daralt Kopyala
 if (strstr(p->szSign, ("|c")) || strstr(p->szSign, ("|C"))){
LogManager::instance().HackLog("COLORFUL_SHOP", ch);
return (iExtraLen);
}

746 eklentisini görüntüle


Anti Drophack

*char_item.cpp

Bul:
Kod:
Genişlet Daralt Kopyala
LPCHARACTER owner = funcFindOwnership.owner;
Üstüne ekle:
Kod:
Genişlet Daralt Kopyala
 if (!owner) {
LogManager::instance().HackLog("DROPHACK", this);
return false;
}

747 eklentisini görüntüle


#Güncelleme 2

-Server taraflı-


Anti Fishbot

*fishing.cpp

Ara:
Kod:
Genişlet Daralt Kopyala
int ret = Compute(info->fish_id, ms, &item_vnum, GetFishingLevel(ch));
Altına ekle:
Kod:
Genişlet Daralt Kopyala
if (!ch->GetLastFishTime())
ch->SetLastFishTime(ms);
else {
if (ch->GetFishHackCount() == 3) {
ch->ResetFishHackCount();
LogManager::instance().HackLog("FISHBOT", ch);
ch->GetDesc()->DelayedDisconnect(3);
}
else {
if ((ms == ch->GetLastFishTime()) || (abs(ch->GetLastFishTime() - ms) < 70) || (abs(ms - ch->GetLastFishTime()) < 70))
ch->UpdateFishHackCount();
else
ch->ResetFishHackCount();
}
}

if (test_server)
ch->ChatPacket(CHAT_TYPE_INFO, "/HACK-TEST/ Last: %d Now: %d HackCount: %d", ch->GetLastFishTime(), ms, ch->GetFishHackCount());

748 eklentisini görüntüle


*char.cpp

Ara:
Kod:
Genişlet Daralt Kopyala
m_dwMountTime = 0;
Üstüne ekle:
Kod:
Genişlet Daralt Kopyala
m_iLastFishTime = 0;
m_iFishHackCount = 0;

749 eklentisini görüntüle


Ara:
Kod:
Genişlet Daralt Kopyala
void CHARACTER::ResetChatCounter()
Üstüne ekle:
Kod:
Genişlet Daralt Kopyala
void CHARACTER::SetLastFishTime(int time)
{
m_iLastFishTime = time;
}


int CHARACTER::GetLastFishTime()
{
return m_iLastFishTime;
}


int CHARACTER::GetFishHackCount()
{
return m_iFishHackCount;
}


void CHARACTER::UpdateFishHackCount()
{
m_iFishHackCount += 1;
}


void CHARACTER::ResetFishHackCount()
{
m_iFishHackCount = 0;
}

750 eklentisini görüntüle


*char.h

Ara:
Kod:
Genişlet Daralt Kopyala
DWORD GetSkipComboAttackByTime() const;
Altına ekle:
Kod:
Genişlet Daralt Kopyala
int GetFishHackCount();
void UpdateFishHackCount();
void ResetFishHackCount();
void SetLastFishTime(int time);
int GetLastFishTime();

751 eklentisini görüntüle


Ara:
Kod:
Genişlet Daralt Kopyala
DWORD m_dwSkipComboAttackByTime;
Altına ekle:
Kod:
Genişlet Daralt Kopyala
int m_iFishHackCount;
int m_iLastFishTime;

Anti Guild Maker(düşük seviyede)

*input_main.cpp


Ara:
Kod:
Genişlet Daralt Kopyala
if (ch->GetGold() < 200000)
return;
Altına ekle:
Kod:
Genişlet Daralt Kopyala
if (ch->GetLevel() < 40)
{
LogManager::instance().HackLog("GUILDMAKER", ch);
ch->GetDesc()->DelayedDisconnect(3);
return;
}

752 eklentisini görüntüle


Anti Teleport Hack'i aktif etme
Uyarı:
Bu sistem maymun zindanı gibi yerlerde ışınlanırken oyundan düşürüyor.
*input_main.cpp

Bul:
Kod:
Genişlet Daralt Kopyala
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;
Değiştir:
Kod:
Genişlet Daralt Kopyala
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();
ch->GetDesc()->DelayedDisconnect(0);
return;
753 eklentisini görüntüle


-Client taraflı-


Anti py injection

*EterPack/EterPackManager.cpp
Ara:
Kod:
Genişlet Daralt Kopyala
bool CEterPackManager::GetFromFile(CMappedFile & rMappedFile, const char * c_szFileName, LPCVOID * pData)
Bul:
Kod:
Genişlet Daralt Kopyala
#ifndef _DEBUG
//const char *pcExt = strchr(c_szFileName, '.');
//if (pcExt &&
// _strnicmp(pcExt, ".py", 3) == 0 && // python ½ºÅ©¸³Æ® Áß
// stricmp(c_szFileName, "logininfo.py") != 0 && // ·Î±×ÀÎ Á¤º¸ ÆÄÀÏÀÌ ¾Æ´Ï°í
// strnicmp(c_szFileName, "locale", 6) != 0
// )
//{
// return false;
//}
#endif
Değiştir:
Kod:
Genişlet Daralt Kopyala
const char *pcExt = strchr(c_szFileName, '.');
if (_strnicmp(pcExt, ".py", 3) == 0){
PostQuitMessage(0);
}


Anti Anti Stun & Anti Sanal GM Efekti

*PythonCharacterManagerModule.cpp

Silin:
Kod:
Genişlet Daralt Kopyala
{ "SetAffect", chrmgrSetAffect, METH_VARARGS },


Anti Attackspeed & Anti Movespeed

*PythonCharacterModule.cpp


Aşağıdaki satırları silin:
Kod:
Genişlet Daralt Kopyala
{ "SetMoveSpeed", chrSetMoveSpeed, METH_VARARGS },
{ "SetAttackSpeed", chrSetAttackSpeed, METH_VARARGS },


Bu konu altındaki başlıklar genel olarak kullanılan hileleri engellemek için yeterlidir
Daha iyi bir koruma için ve bot, hile ve macro scriptlerini engellemek için modül yada fonksiyon isimlerini değiştirmenizide öneririm
Aşağıda net modülünün adını değiştirmek için basit bir anlatım var




*PythonNetworkStreamModule.cpp


Ara:
Kod:
Genişlet Daralt Kopyala
PyObject* poModule = Py_InitModule("net", s_methods);
Modül adını kendinize göre değiştirin, örnek olarak:
Kod:
Genişlet Daralt Kopyala
PyObject* poModule = Py_InitModule("mt2net", s_methods);

Şimdi, Tüm python dosyalarını Notepad++ ile açın


CTRL+H ye basın ve Gelen ekrandan Değiştir butonuna basın


"Aranan" kısmına bunu yazın: import net


"Değiştir" kısmına bunu yazın: import mt2net as net


Şu son kısımdaki
Şimdi, Tüm python dosyalarını Notepad++ ile açın


CTRL+H ye basın ve Gelen ekrandan Değiştir butonuna basın


"Aranan" kısmına bunu yazın: import net


"Değiştir" kısmına bunu yazın: import mt2net as net
olayını anlamadım hangi python kodları bunlar nerdekiler değişecek yani?
 
Üst