Показать сообщение отдельно
Старый 04.06.2017, 19:49   #1
g00dw1n
Эксперт
Аватар для g00dw1n
OFFLINE
Регистрация: 30.01.2016
Возраст: 32
Сообщений: 2,265
Благодарностей:
355 всего
Мнения: + 1104
Репутация: 1066
Отправить сообщение для g00dw1n с помощью Skype™

[GU] Корейцы - чудаки


//Очередная записка, с полей реверса сервера.

*С буквы М
Сейчас поясню за свой "базар", на примере ошибки, благодаря которой возможна накрутка через снятие рас. дэбафа.

Имеем функцию
Код:
CPotionMgr::PreCheckPotion
Казалось бы, функция должна производить только проверку условий использования капы, но хуй там, не угадали:
Код:
if ( pFld->m_nTempEffectType == 56 && !(*pTargetCharacter)->m_ObjID.m_byID )
  {
    pkPlayer = (CPlayer *)*pTargetCharacter;
    v13 = CRaceBuffManager::Instance();
    v40 = CRaceBuffManager::GetRaceBuffLevel(v13, pkPlayer);
    v13 = CRaceBuffManager::Instance();
    v41 = CRaceBuffManager::CancelPlayerRaceBuff(v13, pkPlayer, RT_LOSE, v40);
    if ( (v40 & 0x80000000) != 0 || (signed int)v40 > 2 )
      return 35i64;
    if ( v41 == -3 || (float)(signed int)(v40 + 1) > pFld->m_fTempValue[0] )
      return 36i64;
  }
Ой, а что же мы видим? А это ни что иное, как вызов функции которая снимает рас. дэбаф:
Код:
CRaceBuffManager::CancelPlayerRaceBuff(v13, pkPlayer, RT_LOSE, v40);
COMMIT

Добавлено через 2 часа 52 минуты
Немного поясню, почему же этот кусок кода позволяет делать накрутку
При вызове CancelPlayerRaceBuff передаётся текущий уровень дэбафа, а поскольку внутри есть проверка текущего уровня и снимаемого(то что передали), то эта проверка будет всегда валидна
По сути, даже если снимать легально, то дэбаф будет снят дважды, при проверке и в функции которая более полно реализует снятие дэбафа
Так же в этом месте не хватает проверки IsUseReleaseRaceBuffPotion, это даёт возможность повторного снятия дэбафа, даже если он уже снят на постоянно основе

Последний раз редактировалось g00dw1n; 04.06.2017 в 22:42. Причина: Добавлено сообщение
 
Ответить с цитированием
Сказали спасибо:
stopitsot (24.08.2017), arka0228 (16.06.2017), Big Bad Sensey (13.06.2017), Rangris (06.06.2017)