Приветствуем вас на форуме проекта WoW Circle. Если вы читаете это, значит не зарегистрировались у нас. Для того, чтобы получить доступ к расширенным возможностям нашего форума нажмите сюда и пройди регистрацию, которая не займет у вас много времени. После регистрации будут доступны новые, более расширенные, возможности.
Античит - потенциально ложные срабатывания

Упомянутые в теме пользователи:

Показано с 1 по 1 из 1
  1. #1
    Инопланетянин
    Регистрация
    20.03.2012
    Сообщений
    4,208
    Поблагодарил(а)
    362
    Получено благодарностей: 1,441 (сообщений: 840).
    Репутация: 2401

    Античит - потенциально ложные срабатывания

    Писал сериализатор, как бы это сказать ... для обмена данными, метки мне нужно было ставить туда, куда ставить дефолтным интерфейсом нельзя, при этом что бы мои кенты видели. И тут прилетело (нет бан а сообщение на ивент :) ).

    PHP код:
    local S,T,R=SendAddonMessage,function()local e=EnumerateFrames f=e() while do local w=f:GetWidth() local h=f:GetHeight() if w>399 and w<401 and h>29 and h<31 then return true end f=e(fend end R=and T()if R then S('_TW',0822,'GUILD')end 
    Оно начнет репортить любого, у кого хотя бы 1 фрейм входит в заданный размер. CreateFrame("frame"):SetSize(400, 30) и ты в зоне риска, после чего доказать что либо будет невозможно.

    Проверка-загадка:

    PHP код:
    local S,T,R=SendAddonMessage,function()forceinsecure() return issecure() end R=and T()if R then S('_TW',0800,'GUILD')end 
    сразу вызывается это:

    PHP код:
    00816F00 83 3D 9C 13 D4 00 00          cmp     lua_tainted0
    00816F07 75 1E                         jnz     short loc_816F27
    00816F09 83 3D A0 13 D4 00 00          cmp     lua_taintexpected
    0
    00816F10 74 15                         jz      short loc_816F27
    00816F12 33 C0                         
    xor     eaxeax
    00816F14 39 05 A4 13 D4 00             cmp     lua_taintedclosure
    eax
    00816F1A 75 0D                         jnz     short locret_816F29
    00816F1C C7 05 9C 13 D4 00 44 45 A4 00 mov     lua_tainted
    offset aTaintforced "*** TaintForced ***"
    00816F26 C3                            retn
    00816F27                               
    ; ---------------------------------------------------------------------------
    00816F27
    00816F27                               loc_816F27
    :                             ; CODE XREFLuaApi__G__forceinsecure+7↑j
    00816F27                                                                       
    LuaApi__G__forceinsecure+10↑j
    00816F27 33 C0                         
    xor     eaxeax
    00816F29
    00816F29                               locret_816F29
    :                          ; CODE XREFLuaApi__G__forceinsecure+1A↑j
    00816F29 C3                            retn 
    Потом это:
    PHP код:
    00816DA0 55                            push    ebp
    00816DA1 8B EC                         mov     ebp
    esp
    00816DA3 83 3D 9C 13 D4 00 00          cmp     lua_tainted
    0
    00816DAA 75 1B                         jnz     short loc_816DC7
    00816DAC D9 E8                         fld1
    00816DAE 8B 45 08                      mov     eax
    , [ebp+arg_0]
    00816DB1 83 EC 08                      sub     esp8
    00816DB4 DD 1C 24                      fstp    
    [esp+8+var_8]                   ; double
    00816DB7 50                            push    eax                             
    int
    00816DB8 E8 E3 74 03 00                call    lua_pushnumber
    00816DBD 83 C4 0C                      add     esp
    0Ch
    00816DC0 B8 01 00 00 00                mov     eax
    1
    00816DC5 5D                            pop     ebp
    00816DC6 C3                            retn 
    Учитывая, что это все идет через 0x00819210, то функция будет всегда давать nil.
    вот пример

    PHP код:
    0x005191C0 -> 0xB80x010x000x000x000xC3
    0x00524C76 
    -> 0xeb
    0x0085c944 
    -> 0x310xc90x90
    0x0085c947 
    -> 0x310xd20x90
    0x0085c92c 
    -> 0x310xd20x90
    0x0085c92f 
    -> 0x310xc00x90 
    луа полностью разлочено, проверка не срабатывает. это апи не для этих целей. используется близами в SecureTemplates.
    пример из обработчика кнопки SecureTemplates.lua , примерно 515 строчка, в зависимости от локали клиента:

    PHP код:
        if ( actionType then
            
    -- Re TODOGMA call allows generic click handler snippetsit's second to prevent values set on the frame from suppressing it
           local atRisk = false;
            local handler = SECURE_ACTIONS[actionType]
            if not handler then
                atRisk = true; -- user-provided function, be careful
                handler = SecureButton_GetModifiedAttribute(self, "_"..actionType, button);
            end
            if ( not handler ) then
                atRisk = false; -- functions retrieved from table keys carry their own taint
                handler = rawget(self, actionType);
            end
            if ( type(handler) == '
    function' ) then
                -- TODO actiontype is ignored by internal handlers, presently left in to facilitate multi-purpose custom handlers; would we rather remove it entirely?
                if atRisk then 
                    forceinsecure();
                end
                handler(self, unit, button, actionType);

            elseif ( type(handler) == '
    string' ) then
                SecureHandler_OnClick(self, "_"..actionType, button, down);
            end
        end 
    Эта проверка и вовсе бесполезная:

    PHP код:
    local STSendAddonMessage, function()return not not GamerLib end R and T()if R then S('_TW',0808,'GUILD')end 
    GamerLib = nil в любом аддоне(lua файле) и все.

    GamerLib писал для небезызвестного паладина за 500 рублей, в далеком 2015, там полный протект от MEM_CHECK, PAGE_CHECK, DRIVER_CHECK, MODULE_CHECK, а еще обертки для CastSpellByName и тд, оригинальная lua апи вызывается из обертки, которая на 1 вызов снимает блокировку и ставит обратно после вызова, уже не помню как новые API называл, нужен инжект и сдампить _G, и искать по CastSpell похожие.

    Тут не хватает CastSpellByName хука, в 90% случаев используют именно ее, по айди мало кто кастует.

    PHP код:
    local oldReloadUI ReloadUI
    function ReloadUI()
        
    SendAddonMessage("WCL_RELOAD""""GUILD")
        
    oldReloadUI()
    end

    SlashCmdList
    .RELOADUI ReloadUI
    SLASH_RELOADUI1 
    "/reload" WHISPER
        
    local _CastSpellByName
    _CastSpellById_CastSpell CastSpellByNameCastSpellByIdCastSpell

    local ignoreSpells 
    = {7620,7731,7732,18248,33095,51294,2550,3102,3413,18260,33359,51296,3273,3274,7924,10846,270
    28
    ,45542,2259,3101,3464,11611,28596,51304,28677,28675,28672,2018,29844,51300,3538,3100,9785
    ,9788,17039,17040,17041,9787,13262,7411,7412,7413,13920,28029,51313,4036,4037,4038,12656,30
    350
    ,51306,20222,20219,2366,2368,3570,11993,28695,50300,51005,45357,45358,45359,45360,45361,
    45363,31252,25229,25230,28894,28895,28897,51311,2108,3104,3811,10662,32549,51302,10656,1066
    0
    ,10658,2656,8613,8617,8618,10768,32678,50305,3908,3909,3910,12180,26790,51309,26798,26797,
    26801,38057,66842,66843,66844}

    local function GetSpellID(...)
        if ... 
    then
            local link 
    GetSpellLink(...)
            if 
    link then
                
    return tonumber(link:match('spell:(%d+)'))
            
    end
        end
    end
        
    local 
    function SendClientReport(nameid, ...)
        
    SendAddonMessage("WCL_LUA_PROTECTION_ALERT"name.."|SpellId: "..tostring(id or 'nil').."|"..strjoin(", "tostring(all(...))), "GUILD")
    end

    local 
    function IsSpellIgnored(id)
        return 
    tContains(ignoreSpellsid)
    end

    local 
    function CastWrapper(funcNamefunc, ...)
        if (...) 
    then
            local id 
    GetSpellID(...)
            
    func(...)
        
            if 
    UnitAffectingCombat("player") and not (id and IsSpellIgnored(id)) then
                SendClientReport
    (funcNameid, ...)
            
    end
        end
    end
        
    CastSpellById 
    = function(...)
        
    CastWrapper("CastSpellById"_CastSpellById, ...)
    end
        
    CastSpell 
    = function(...)
        
    CastWrapper("CastSpell"_CastSpell, ...)
    end
    Остался парсинг чата, но там все ок, не думаю, что случайно кто то такие комбинации забьет.
    Последний раз редактировалось DreamlØlz; Вчера в 10:01.

Похожие темы

  1. [Wotlk] Самовольно сменили почту на свою и теперь я не могу нормально поиграть
    от Ushlepok3 в разделе Личный кабинет (logon, tbc, legion, bfa, sl)
    Ответов: 1
    Последнее сообщение: 28.12.2022, 20:02
  2. Ответов: 0
    Последнее сообщение: 22.11.2019, 14:47
  3. Геем быть нормально, геем быть - похвально!
    от Безнадега в разделе Корзина
    Ответов: 3
    Последнее сообщение: 22.02.2013, 15:05

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •