lua func:size() возвращает 0 для всех функций

Issues related to VMProtect
Post Reply
bigproblem
Posts: 18
Joined: Wed Feb 10, 2021 3:58 pm

lua func:size() возвращает 0 для всех функций

Post by bigproblem »

Code: Select all

function OnBeforeCompilation()
    local input = vmprotect:core():inputFile()
    local total_mutated = 0
    
    for arch_index = 1, input:count() do
        local architecture = input:item(arch_index)
        local map_functions = architecture:mapFunctions()
        
        if map_functions ~= nil then
            print("Архитектура: " .. architecture:name() .. ", функций найдено: " .. map_functions:count())
            local arch_mutated = 0
            local skipped_small = 0
            local skipped_type = 0
            local skipped_protected = 0
            local processed = 0
            
            for func_index = 1, map_functions:count() do
                local func = map_functions:item(func_index)
                processed = processed + 1
                
                -- Пропускаем маленькие функции
                if func:size() < 14 then
                    skipped_small = skipped_small + 1
                    goto continue
                end
                
                -- Пропускаем если не код
                if func:type() ~= ObjectType.Code then
                    skipped_type = skipped_type + 1
                    goto continue
                end
                
                -- Проверяем, не защищена ли уже эта функция
                local is_protected = false
                local protected_functions = architecture:functions()
                
                if protected_functions ~= nil then
                    for i = 1, protected_functions:count() do
                        if protected_functions:item(i):address() == func:address() then
                            is_protected = true
                            break
                        end
                    end
                end
                
                if is_protected then
                    skipped_protected = skipped_protected + 1
                    goto continue
                end
                
                -- Если дошли сюда - добавляем мутацию
                local func_name = func:name() or "безымянная"
                architecture:functions():addByAddress(func:address(), CompilationType.Mutation)
                print("Защищена функция: " .. func_name .. " (размер: " .. func:size() .. " байт, адрес: " .. tostring(func:address()) .. ")")
                arch_mutated = arch_mutated + 1
                total_mutated = total_mutated + 1
                
                ::continue::
            end
            
            print("→ Обработано: " .. processed .. " функций")
            print("→ Пропущено из-за размера: " .. skipped_small)
            print("→ Пропущено из-за типа: " .. skipped_type)
            print("→ Пропущено (уже защищены): " .. skipped_protected)
            print("→ Новых защищено: " .. arch_mutated)
        end
    end
    
    print("\n=== ИТОГ ===")
    print("Автоматическая мутация применена к " .. total_mutated .. " функциям")
end
баг или код говно?
защищаю dll, vmp 3.10.2
Admin
Site Admin
Posts: 2776
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: lua func:size() возвращает 0 для всех функций

Post by Admin »

В MapFunction нет размера кода.
Post Reply