[FIX] Flooding CPU Attack - Ikarus Offlineshop System

  • Autor subiect Petrinel
  • Dată creare
  • Răspunsuri: Răspunsuri 2
  • Vizualizări: Vizualizări 2K

Petrinel

Well-known member
29 Aug 2020
159
705
93
23
Falciu
Monede Dragon
0
Cod:
//FILE : new_offlineshop_manager.cpp
//SEARCH FOR
    bool CShopManager::RecvShopCreateOfferClientPacket(LPCHARACTER ch, TOfferInfo& offer)
    {
        if(!ch)
            return false;

        //offlineshop-updated 03/08/19
        if(ch->GetPlayerID() == offer.dwOwnerID)
            return false;

//ADD UNDER
        // fix flooding offers
        if (!CheckOfferCooldown(ch->GetPlayerID()))
            return false;
      

      
      
//SEARCH FOR: 
    void CShopManager::ClearSearchTimeMap()
    {
        m_searchTimeMap.clear();

//ADD UNDER
        // fix flooding offers
        m_offerCooldownMap.clear();
      
      
      
      
      
      
//SEARCH FOR     
    void CShopManager::ClearSearchTimeMap()
    {
        m_searchTimeMap.clear();
    }

      
//ADD UNDER
    // fix flooding offers
    bool CShopManager::CheckOfferCooldown(DWORD dwPID) {
        DWORD now = get_dword_time();
        const DWORD cooldown_seconds = 15;

        itertype(m_offerCooldownMap) it = m_offerCooldownMap.find(dwPID);
        if (it == m_offerCooldownMap.end()) {
            m_offerCooldownMap[dwPID] = now + cooldown_seconds *1000;
            return true;
        }

        if (it->second > now)
            return false;

        it->second = now + cooldown_seconds * 1000;
        return true;
    }
    
      
      
      
      
      
//FILE : new_offlineshop_manager.h
//SEARCH FOR:
        //search time map (checking to avoid search abouse)
        void        ClearSearchTimeMap();
        bool        CheckSearchTime(DWORD dwPID);

//ADD UNDER:
        // fix flooding offers
        bool        CheckOfferCooldown(DWORD dwPID);
 
      
      
      
//SEARCH FOR:
        AUCTIONMAP        m_mapAuctions;
//ADD UNDER:
        // fix flooding offers
        SEARCHTIMEMAP    m_offerCooldownMap;
      
      
      
      
      
      
//FILE : ClientManagerOfflineshop.cpp
//SEARCH FOR:

bool CClientManager::RecvOfflineShopOfferAccepted(const char* data)
{
    offlineshop::TSubPacketGDOfferAccept* subpack;
    data = Decode(subpack, data);

    offlineshop::COfferCache::TOfferCacheInfo* pOffer=nullptr;
    m_offlineshopOfferCache.Get(subpack->dwOfferID,&pOffer);
 
//ADD UNDER:
    if(!pOffer)
        return true;