Надо понимать что видов детекта со стороны AV существует несколько статический, динамический. Статический - анализ сигнатур в коде, анализ таблицы импорта на подозрительное сочетание API функций. Статику обойти достаточно легко достаточно написать RunPE/LoadPE которые будут повторять работу виндового загрузчика. Для того чтобы было понятнее - у тебя есть файл со своими заголовками секциями кода и т.д. LoadPE заключается в том чтобы написать программу которая сможет грузить файл в виртуальную память "ручками", обработав все секции таблицу импорта, релоки, и всякие экзотические вещи типа TLS колбэков. RunPE этот тот же LoadPE но имеет меньшую проработку т.е. может грузить меньшее число исполняемых файлов. Очевидно что в плане статики недостаточно просто реализовать LoadPE и грузить всё что хочешь потому что если у тебя будет пустой файл без импорта и с 1 секцией это будет странно) как вариант можно сделать в файле фейковый импорт и фейковый код но как по мне проще написать LoadPE/RunPE в виде шеллкода и инфицировать им легитимные файлы, таким образом не придётся заботиться о фейковом коде и таблице импорта. Переходим к более интересным вещам - детект в динамике, если твоя malware написана плохо то никакой крипт не поможет, например, существует ряд функций для установки подписки на события в WINDOWS, по типу создания нового процесса, антивирусный драйвер(эти подписки доступны только из ring0) может установить подписку на создания новых процессов или например обращения к файловой системе (минифильтры). Однако далеко не все опасные API функции можно перехватить таким образом. Поэтому антивирусы могут устанавливать хуки (перехватчики) вызовов, они могут это делать многими способами, например могут во время загрузки все файлов в системе, устанавливать трамплины сплайсом на опасных функциях и они это делают! У меня стоял Kaspersky cloud security и он устанавливал хуки сплайсом в ntdll на некоторые API по типу NtWriteVirtualMemory, что интересно хуки он ставил только в WOW64 приложухах, вернёмся к теме, и так, мы уже поняли что AV могут ставить хуки, как это можно обойти, мы находямся в юзермоде так что всё что мы можем сделать это вызывать системный вызовы (syscall) напрямую, ну или не напрямую передавая все аргументы и делая jmp на инструкции syscall + ret в ntdll почитай в гугле indirect system calls. К слову прямые системные вызовы в 32 битных файла код 64 битной виндой (WOW64) невозможны, для этого нужно делать jmp или retf на адрес с секцией 0x33, и кстати это ещё один вариант обхода статики - создать 32 битный файл и исполнять в нём 64 битный код, некоторые отладчики просто пропустят весь 64 битный код, а статические анализаторы кода будут видеть совсем другие ассемблерные инструкции ( так как код-то 64 битный). Для того чтобы в файле который мы криптуем сделать системные вызовы напрямую и снять ловушки можно подменить адреса функций в таблице импорта файла, т.е. грузить все библиотеке по типу ntdll, kernel32dll самому чтобы AV не смог поставить хук и в таблице импорта менять адреса на адреса в дллках загруженных вручную. Ну и опять же стоит повториться что если файл который криптуешь хреново написан никакой крипт не поможет словишь детект в динамике в любом случае. AV могут хукать системные вызовы в ядре тогда мы из юзермода ничего сделать не сможем однако, Если пишешь свою malware для обхода AV можешь найти альтернативный системный вызов который не будет перехватываться AV например можно любую NTAPI до 4 аргументов ( или больше если прочие опциональны) вызывать через NTQueueProcessAPC. Поздравляю ты можешь писать свой криптор удачи