lua func:size() возвращает 0 для всех функций
Posted: Sun Nov 23, 2025 7:09 pm
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