
Obfusk8: легковесная библиотека обфускации на основе C++17 / Header Only для Windows-бинарных файлов
Obfusk8 — это легкая, header-only библиотека на C++17, предназначенная для значительного усиления обфускации ваших приложений, что делает обратную разработку значительно более сложной задачей. Она достигает этого с помощью разнообразных методов во время компиляции и выполнения, направленных на защиту логики и данных вашего кода.

main (макрос _main)Точка входа вашего приложения (main) преобразуется в сложный, многоуровневый движок обфускации:
main_body мини-ВМ (эмулируемый процессор) запускает последовательность «зашифрованных» инструкций. Это скрывает истинную точку входа и начальные операции. Состояние ВМ (регистры, счётчик команд, ключ диспетчеризации) инициализируется случайными значениями во время выполнения._main (как в прологе, так и в эпилоге) преобразуются в сложные конечные автоматы. Поток управления не является прямым, а определяется сильно «зашифрованными» переменными состояния. Ключи кодирования/декодирования этих переменных состояния динамичны, они зависят от состояния ВМ, счётчиков циклов, случайности времени компиляции (например, __COUNTER__, __LINE__, __TIME__) и глобального непрозрачного начального числа. Это делает статический анализ потока управления чрезвычайно сложным.
obf_icff_ns_dcff и obf_icff_ns_epd) с разной логикой перехода состояний и генерацией ключей, что ещё больше усложняет анализ.OBF_BOGUS_FLOW_*): По всему _main внедряются многочисленные вводящие в заблуждение шаблоны переходов и запутанные условные конструкции. Они используют операторы goto в сочетании с непрозрачными предикатами (условия, которые всегда истинны или ложны, но вычислительно дороги или трудно определяемы статически). Это создаёт лабиринт ложных путей для дизассемблеров и декомпиляторов.
OBF_BOGUS_FLOW_LABYRINTH, OBF_BOGUS_FLOW_GRID, OBF_BOGUS_FLOW_SCRAMBLE, OBF_BOGUS_FLOW_WEAVER, OBF_BOGUS_FLOW_CASCADE и OBF_BOGUS_FLOW_CYCLONE для генерации разнообразных и сложных фиктивных потоков.Runtime, SEH):
__except могут изменять состояние программы, что затрудняет её отслеживание, если отладчик пропускает исключения.Runtime содержит условия, которые при выполнении (из-за определённых состояний ВМ или временных задержек) могут вызвать __debugbreak() или выбросить исключения, предназначенные для нарушения сеансов отладки.obf_vm_engine)Ключевой компонент обфускации макроса _main:
r0, r1, r2), счётчиком команд (pc) и ключом диспетчеризации (dispatch_key). Он выполняет пользовательские «инструкции» (обработчики).reg_dispatch_idx).get_mem_dispatch_table).mixed_dispatch_idx).
Ключ диспетчеризации (dispatch_key) постоянно мутирует, что делает последовательность выполняемых обработчиков высоконепредсказуемой.vm_handler_table) мутируется во время выполнения в прологе и эпилоге _main, что ещё больше скрывает поведение ВМ.OBFUSCATE_STRING из AES8.hpp)__FILE__, __LINE__) и времени сборки (__DATE__, __TIME__).AES8.hpp).STEALTH_API_OBFSTR / STEALTH_API_OBF из Resolve8.hpp)GetModuleHandle и GetProcAddress для первоначального разрешения, если они сами ещё не разрешены этим механизмом.CT_HASH) имён DLL и API для поиска. Это предотвращает появление имён DLL и API в открытом виде в данных, связанных с импортом, или в таблицах строк двоичного файла при использовании этих макросов.K8_SYSCALL)Obfusk8 теперь включает современный механизм косвенного системного вызова для обхода пользовательских перехватчиков (EDR/AV) и проверок статического анализа.
syscall; ret в памяти ntdll.dll во время выполнения.K8_SYSCALL("ZwOpenProcess", ...) вместо NtOpenProcess.