Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Obfusk8 — Obfusk8: легковесная библиотека обфускации на основе C++17 / Header Only для Windows-бинарных файлов | Kitploit
Инструменты/GitHubGitHub/x86byte/obfusk8
Фреймворки для эксплойтовОбратная инженерияШелл-кодКриптографияТестирование на ПроникновениеRed TeamingРазработка Полезной Нагрузки
GitHubx86byte/obfusk8

Obfusk8

Obfusk8: легковесная библиотека обфускации на основе C++17 / Header Only для Windows-бинарных файлов

Репозиторий
793821 месяц назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Obfusk8: Библиотека обфускации на C++17

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

banner


Содержание

  1. Основные стратегии обфускации
  2. Зависимости
  3. Визуализация
  4. Анализ движка и профиль обнаружения
  5. Структурные и криминалистические характеристики
  6. Использование
  7. Сборка
  8. Демо
  9. Вклад и обратная связь

Основные стратегии обфускации

1. Обёртывание функции main (макрос _main)

Точка входа вашего приложения (main) преобразуется в сложный, многоуровневый движок обфускации:

  • Выполнение виртуальной машины (концептуально): Перед выполнением вашего кода main_body мини-ВМ (эмулируемый процессор) запускает последовательность «зашифрованных» инструкций. Это скрывает истинную точку входа и начальные операции. Состояние ВМ (регистры, счётчик команд, ключ диспетчеризации) инициализируется случайными значениями во время выполнения.
  • Непрямое выравнивание потока управления (ICFF): Критические циклы внутри макроса _main (как в прологе, так и в эпилоге) преобразуются в сложные конечные автоматы. Поток управления не является прямым, а определяется сильно «зашифрованными» переменными состояния. Ключи кодирования/декодирования этих переменных состояния динамичны, они зависят от состояния ВМ, счётчиков циклов, случайности времени компиляции (например, __COUNTER__, __LINE__, __TIME__) и глобального непрозрачного начального числа. Это делает статический анализ потока управления чрезвычайно сложным.
    • Используются два различных движка ICFF (obf_icff_ns_dcff и obf_icff_ns_epd) с разной логикой перехода состояний и генерацией ключей, что ещё больше усложняет анализ.
  • Фиктивный поток управления (макросы OBF_BOGUS_FLOW_*): По всему _main внедряются многочисленные вводящие в заблуждение шаблоны переходов и запутанные условные конструкции. Они используют операторы в сочетании с непрозрачными предикатами (условия, которые всегда истинны или ложны, но вычислительно дороги или трудно определяемы статически). Это создаёт лабиринт ложных путей для дизассемблеров и декомпиляторов.

2. Виртуальный ISA-движок (obf_vm_engine)

Ключевой компонент обфускации макроса _main:

  • Эмуляция мини-ЦПУ: Эмулирует процессор с волатильными регистрами (r0, r1, r2), счётчиком команд (pc) и ключом диспетчеризации (dispatch_key). Он выполняет пользовательские «инструкции» (обработчики).
  • Обфусцированные инструкции: Обработчики инструкций ВМ выполняют операции, которые сильно маскируются с помощью смешанной булево-арифметики (MBA) и битовых манипуляций. Обработчики включают арифметику, битовую логику, искажение ключей, мусорные последовательности, условные обновления, эмуляцию памяти и искажение счётчика команд.
  • Динамическая диспетчеризация: Выбор следующего обработчика инструкций ВМ рандомизируется с помощью нескольких механизмов диспетчеризации:
    • Диспетчеризация на основе регистра (reg_dispatch_idx).
    • Диспетчеризация на основе таблицы памяти (перемешанная таблица указателей на функции get_mem_dispatch_table).
    • Смешанная диспетчеризация (mixed_dispatch_idx). Ключ диспетчеризации (dispatch_key) постоянно мутирует, что делает последовательность выполняемых обработчиков высоконепредсказуемой.
  • Мутация таблицы обработчиков: Сама таблица обработчиков инструкций ВМ (vm_handler_table) мутируется во время выполнения в прологе и эпилоге , что ещё больше скрывает поведение ВМ.

3. Шифрование строк на этапе компиляции (OBFUSCATE_STRING из AES8.hpp)

  • Скрытые строки: Шифрует все строковые литералы на этапе компиляции с помощью модифицированного шифра AES.
  • Динамические ключи: Ключи шифрования уникальны для каждого экземпляра строки и формируются на основе содержимого строки, расположения файла (__FILE__, __LINE__) и времени сборки (__DATE__, __TIME__).
  • Дешифрование по требованию: Строки расшифровываются в стеке только при обращении к ним во время выполнения, что минимизирует время нахождения их открытого текста в памяти.
  • (Опционально) Обманные PE-секции: Может хранить зашифрованные строки в пользовательских PE-секциях, предназначенных для имитации распространённых сигнатур упаковщиков, что потенциально может ввести в заблуждение аналитиков (функция, специфичная для MSVC, из AES8.hpp).

4. Скрытый вызов Windows API (STEALTH_API_OBFSTR / STEALTH_API_OBF из Resolve8.hpp)

  • Скрытие IAT: Позволяет избежать создания прямых, легко идентифицируемых записей для Windows API в таблице импорта (IAT).
  • Разрешение на основе PEB: Динамически находит базовые адреса загруженных DLL и адреса функций API, напрямую анализируя структуры данных Process Environment Block (PEB) во время выполнения. Это обходит стандартные GetModuleHandle и GetProcAddress для первоначального разрешения, если они сами ещё не разрешены этим механизмом.
  • Хэшированные имена: Использует хэширование на этапе компиляции (пользовательский алгоритм CT_HASH) имён DLL и API для поиска. Это предотвращает появление имён DLL и API в открытом виде в данных, связанных с импортом, или в таблицах строк двоичного файла при использовании этих макросов.

5. Движок косвенного системного вызова (K8_SYSCALL)

Obfusk8 теперь включает современный механизм косвенного системного вызова для обхода пользовательских перехватчиков (EDR/AV) и проверок статического анализа.

  • Разрешение «Сортировочная шляпа»: Вместо чтения секции .text ntdll.dll (которая часто перехватывается или отслеживается) движок анализирует экспортный каталог. Он фильтрует функции, начинающиеся с Zw, сортирует их по адресу в памяти и определяет номер системного вызова (SSN) на основе их индекса. Это позволяет разрешить SSN, не затрагивая исполняемый код.
  • Латеральное выполнение гаджетов: Движок не содержит инструкцию системного вызова (0F 05) в собственном двоичном файле. Вместо этого он находит действительный гаджет syscall; ret в памяти ntdll.dll во время выполнения.
  • Чистые стеки вызовов: Выделяется пользовательский thunk, который переходит к гаджету ntdll. Для ядра ОС и датчиков безопасности системный вызов выглядит так, как будто он законно происходит из ntdll.dll, что поддерживает чистоту стека вызовов.
  • Использование: Просто используйте K8_SYSCALL("ZwOpenProcess", ...) вместо NtOpenProcess.

6. Обфускация на основе методов с помощью (OBF_METHOD)

Obfusk8 теперь предоставляет гранулярный контроль над безопасностью вашего двоичного файла с помощью обфускации на основе методов. Вместо обфускации всего проекта (что может повлиять на производительность) вы можете выборочно защищать конкретные, важные функции или методы классов.


Как использовать

  1. Подключите проход
    Убедитесь, что вы включили логику обфускации методов в свой проект: ```cpp #include "../transform/PASSES/obf_cmethods.cxx"
    root@kitploit:~
  2. Синтаксис макроса
    Определите свой метод с помощью макроса OBF_METHOD: ```cpp OBF_METHOD(ret_type, func_name, params, method_body)
    root@kitploit:~
  • ret_type: Тип возвращаемого значения вашей функции (например, bool, int, void*).
  • func_name: Имя метода.
  • params: Параметры функции (должны быть заключены в круглые скобки).
  • method_body: Фактическая логика вашей функции, заключенная в { }.

Пример: Стандартные и обфусцированные методы

В этом примере PrintStatus — это обычная, читаемая функция. Obfusk8_PrintStatus защищена с помощью Obfusk8.```cpp #include "../Instrumentation/materialization/state/Obfusk8Core.hpp" #include "../Instrumentation/materialization/transform/K8_UTILS/k8_utils.hpp" // for the printf_, u can change the printf_ with anything else...

class Obfusk8_C { public: // standard method which is visible to reverse engineers void PrintStatus(void) { printf_("method\n"); }

root@kitploit:~
// Obfuscated method protected by Obfusk8
OBF_METHOD_(void, Obfusk8_PrintStatus, (void),
{
    printf_("same method but Obfuscated\n");
})

};

_main({ Obfusk8_C *pp = new Obfusk8_C; pp->PrintStatus(); pp->Obfusk8_PrintStatus(); delete pp; })

root@kitploit:~
*Вы можете просмотреть полный пример здесь: [obfusk8_methods.cpp](https://github.com/x86byte/Obfusk8/blob/main/Obfusk8/EXAMPLES/obfusk8_methods.cpp)*

---
### 6. Классы абстракции API со встроенной скрытностью
Obfusk8 предоставляет вспомогательные классы, которые инкапсулируют стандартные наборы Windows API. Эти классы автоматически используют скрытный механизм разрешения API (`STEALTH_API_OBFSTR`) во время своей конструкции, гарантируя, что базовые функции Windows разрешаются без оставления очевидных следов статического импорта.

   - **`K8_ProcessManipulationAPIs::ProcessAPI` (`k8_ProcessManipulationAPIs.hpp`)**:
     *   Обеспечивает удобный доступ к Windows API для манипуляции процессами, таким как `OpenProcess`, `TerminateProcess`, `CreateRemoteThread`, `VirtualAllocEx`, `WriteProcessMemory`, `ReadProcessMemory`, `GetProcAddress`, `GetModuleHandleA`, `NtQueryInformationProcess`, `SuspendThread` и `GetCurrentProcessId`.
     *   **Автоматическое скрытное разрешение**: Скрытно разрешает необходимые функции из `kernel32.dll` и `ntdll.dll`.
     *   Упрощает выполнение операций, связанных с процессами, при уменьшенном следе для статического анализа. Включает перечисление `PROCESSINFOCLASS` для использования с `NtQueryInformationProcess`.

   - **`k8_CryptographyAPIs::CryptographyAPI` (`k8_CryptographyAPIs.hpp`)**:
     *   Предоставляет обёртки для стандартных функций Windows Cryptography API (CAPI/CNG). (Функциональность зависит от фактической реализации этого файла — предоставленный фрагмент был дублирован. Предполагаются типичные функции CAPI, такие как `CryptAcquireContextA`, `CryptCreateHash` и т.д.)
     *   **Автоматическое скрытное разрешение**: Скрытно разрешает необходимые функции в основном из `advapi32.dll` (и `kernel32.dll` для основных функций).
     *   Облегчает криптографические операции, минимизируя раскрытие использования крипто API.

   - **`k8_NetworkingAPIs::NetworkingAPI` (`k8_NetworkingAPIs.hpp`)**:
     *   Обеспечивает лёгкий доступ к широкому спектру сетевых функций из `wininet.dll` (например, `InternetOpenA`, `HttpOpenRequestA`, `FtpPutFileA`), `urlmon.dll` (например, `URLDownloadToFileA`), `ws2_32.dll` (например, `socket`, `connect`, `WSAStartup`), `shell32.dll` (например, `ShellExecuteA`), `dnsapi.dll` (например, `DnsQuery_A`) и `mpr.dll` (например, `WNetOpenEnumA`).
     *   **Автоматическое скрытное разрешение**: В своём конструкторе использует `STEALTH_API_OBFSTR` и `OBFUSCATE_STRING` для разрешения всех необходимых функций из соответствующих DLL (и `kernel32.dll` для `LoadLibraryA`/`GetLastError`) без оставления очевидных следов импорта.
     *   Упрощает выполнение обфусцированных сетевых запросов и других сетевых задач.

   - **`RegistryAPIs::RegistryAPI` (`k8_RegistryAPIs.hpp`)**:
     *   Обёртывает часто используемые функции реестра Windows, такие как `RegSetValueExA`, `RegCreateKeyExA`, `RegOpenKeyExA`, `RegQueryValueExA`, `RegCloseKey` и т.д.
     *   **Автоматическое скрытное разрешение**: Скрытно разрешает функции из `advapi32.dll` (и `kernel32.dll`) во время конструкции.
     *   Помогает выполнять операции с реестром с менее отслеживаемыми вызовами API.

### 7. Основные примитивы обфускации (макросы в `Obfusk8Core.hpp`)
Это строительные блоки, широко используемые во всей библиотеке, особенно в макросе `_main` и VM-движке:
*   **Смешанная булево-арифметика (MBA)**: Преобразует простые математические и логические операции (ADD, SUB, XOR, NOT, MUL) в сложные, но эквивалентные последовательности побитовых и арифметических формул (например, `OBF_MBA_ADD`, `OBF_MBA_XOR`). Они разработаны так, чтобы дизассемблерам было очень сложно упростить их обратно до исходных форм.
*   **Непрозрачные предикаты**: Вставляет условные ветвления, где условие всегда истинно (например, `OBF_OPAQUE_PREDICATE_TRUE_1`) или всегда ложно (например, `OBF_OPAQUE_PREDICATE_FALSE_1`). Эти кондиции строятся из сложных, трудно поддающихся статическому анализу выражений, включающих `__COUNTER__`, `__LINE__`, `__TIME__` и `_obf_global_opaque_seed`. Они создают вводящие в заблуждение пути кода и могут использоваться для защиты мёртвого кода или принуждения определённых потоков выполнения.
*   **Внедрение мусорного кода**:
    *   `OBF_CALL_ANY_LOCAL_JUNK`: Вызывает одну из множества маленьких рандомизированных мусорных функций, определённых в `obf_junk_ns`. Эти функции выполняют тривиальные, изменчивые операции и выбираются случайным образом во время компиляции. Их цель — увеличить энтропию кода, разбить простые шаблоны кода и потенциально ввести в заблуждение сигнатурные детекторы или инструменты анализа.
    *   `NOP()`: Макрос, который вставляет изменчивые операции, предназначенные для предотвращения лёгкого удаления оптимизаторами и тонкого изменения глобального сида.
*   **Трюки анти-дизассемблирования и анти-анализа**:
    *   **Обфусцированные переходы (макросы `OBF_JUMP_*`)**: Создаёт операторы `goto`, условия или цели которых обфусцированы, часто полагаясь на непрозрачные предикаты или MBA.
    *   **Обфусцированные переходы состояний (макросы `OBF_SET_NEXT_STATE_*`)**: Используются в ICFF, эти макросы устанавливают следующую переменную состояния для диспетчера упрощённого потока управления, используя методы обфускации, аналогичные обфусцированным переходам.
    *   **Манипуляции стеком (`OBF_STACK_ALLOC_MANIP`, `OBF_FAKE_PROLOGUE_MANIP`)**: Выделяет блоки переменного размера на стеке и выполняет над ними фиктивные манипуляции. Фальшивые прологи пытаются запутать анализ стека.
    *   **Обфусцированные вызовы функций (`OBF_CALL_VIA_OBF_PTR`)**: Указатели на функции XORятся с динамическим ключом до и после использования, скрывая истинную цель вызова.
    *   `K8_ASSUME(0)`: Используется в путях мёртвого кода, чтобы подсказать компилятору MSVC, что эти пути недостижимы, потенциально допуская различные оптимизации или генерацию кода, которые могут ещё больше запутать анализ, если предположение нарушается патчем.

### Зависимости

Библиотека Obfusk8 является модульной. Основная функциональность зависит от:

- `Obfusk8/Instrumentation/materialization/state/Obfusk8Core.hpp`: (Этот файл) Центральный заголовочный файл, который координирует и предоставляет основные макросы и примитивы обфускации.
- `Obfusk8/Instrumentation/materialization/transform/AES8.hpp`: Обеспечивает AES-основанное шифрование строк на этапе компиляции и опциональные функции манипуляции секциями PE.
- `Obfusk8/Instrumentation/materialization/transform/Resolve8.hpp`: Реализует скрытное разрешение Windows API на основе PEB.
* `Obfusk8/Instrumentation/materialization/transform/k8_indsys.hpp`: Оркестрирует **движок косвенных системных вызовов**. Он управляет жизненным циклом переходных заглушек и предоставляет интерфейс для выполнения системных вызовов через боковые гаджеты в памяти.
* `Obfusk8/Instrumentation/materialization/transform/getpeb8.hpp`: Обеспечивает начальную загрузку и **обнаружение PEB**. Содержит пользовательскую логику хеширования, определения нативных структур и алгоритм «Сортировочная шляпа» для вывода SSN. Служит низкоуровневой основой для всех задач перечисления модулей.
Опциональные вспомогательные классы API предоставляются в отдельных заголовочных файлах, обычно расположенных в подкаталогах:
- `k8_ProcessManipulationAPIs/k8_ProcessManipulationAPIs.hpp`: Для скрытных API манипуляции процессами.
- `k8_CryptographyAPIs/k8_CryptographyAPIs.hpp`: Для скрытных криптографических API.
- `k8_NetworkingAPIs/k8_NetworkingAPIs.hpp`: Для скрытных сетевых API.
- `k8_RegistryAPIs/k8_RegistryAPIs.hpp`: Для скрытных API реестра.

### Визуализация

  *   **граф в IDA**:
    
      ![image](https://assets.kitploit.com/production/public/readmes/8984/3e59704c1c37835ddc2e47faf69914ba1fb63943fcd37a983f5690bcc4b4e373.png)
     
  *   **некоторые фрагменты из IDA Pro**:
    
      ![image](https://assets.kitploit.com/production/public/readmes/8984/5c24307f490de40a07f88ca20821999c19912088d3047ca9446a84dfda2d0ec7.png)
      ![image](https://assets.kitploit.com/production/public/readmes/8984/edd0c5deae9d9d69006ca4bb1cd0cc0d2ba3e9794ac242460028fe438388c338.png)
      ![image](https://assets.kitploit.com/production/public/readmes/8984/341057315e4d3ea12c920df05ce3e6bcd13ecbc86386ffc3265e80b34f3bdcee.png)
    
  *   **результаты сигнатур из Detect It Easy**:
    
      ![image](https://assets.kitploit.com/production/public/readmes/8984/007b2a1139fc33a9ff82675e10c8fe99f6be7b1d012ce773a5b7464db6b299ab.png)

  *   **Краудсорсинговые YARA правила из VirusTotal**:

      ![yararules](https://assets.kitploit.com/production/public/readmes/8984/b168f882e1f945399908ab0cf4638a151e6991f98ec03460d305c1eca0b482cd.png)


  *   **карта памяти (из DIE)**:

      ![map](https://assets.kitploit.com/production/public/readmes/8984/75d11fce1656cc1944251d0e46f14c88ed9b8684acf5d1230c53f4d7385aaaf8.png)
  
  *   **секции**:

      ![sections](https://assets.kitploit.com/production/public/readmes/8984/bdb9bef4c155c4af8a73656ab5bdba533cf3283b7b729d9fa42fbb125e208978.png)

  *   **связанные файлы**:

      ![bfiles](https://assets.kitploit.com/production/public/readmes/8984/fe8cf0d963706cdd0fc532144e0e9b118daad7f3ca6d53705b4691b5f8c0aba2.png)

### Анализ движка и профиль обнаружения

Obfusk8 разработан с приоритетом обхода статических сигнатурных движков. Тестирование на ведущих вендорах показывает, что основная логика обфускации остаётся необнаруженной крупными продуктами безопасности, включая:

*   **Microsoft Defender**: Не обнаружен
*   **Kaspersky**: Не обнаружен
*   **ESET-NOD32**: Не обнаружен
*   **BitDefender**: Не обнаружен

Хотя статические сигнатуры обходятся, некоторые Next-Gen AV и EDR (такие как CrowdStrike или Symantec) могут генерировать эвристические флаги с пометкой "подозрительный" или "высокая уверенность во вредоносности". Эти обнаружения обычно вызываются высокой архитектурной сложностью и наличием пользовательских секций PE, а не идентифицируемым вредоносным кодом.

### Структурные и криминалистические характеристики

*   **Управление энтропией**: Текущая реализация даёт глобальную энтропию около 6,2. Это намеренно сбалансировано, чтобы быть достаточно высоким для сокрытия логики, но достаточно низким, чтобы избежать частых предупреждений о «упакованном файле», которые возникают при энтропии выше 7,0.
*   **Настройка секций**: Конфигурация по умолчанию включает 23 секции PE, некоторые из которых используют имена-приманки (например, `.themida`, `.vmp0`, `.enigma2`) для имитации известных коммерческих защитников. 
    *   **Эвристическая оптимизация**: Чтобы ещё больше снизить оценку подозрительности, пользователи могут переименовать эти секции в общие строки (например, `.data_01`, `.rdata_aux`). Стандартизация имён секций часто снижает эвристическую оценку «уникальности», делая бинарный файл более похожим на обычное скомпилированное приложение.
*   **Обфускация импорта**: Библиотека успешно устраняет след Import Address Table (IAT) для критических Windows API. Используя Process Environment Block (PEB) для разрешения и движок косвенных системных вызовов, бинарный файл поддерживает чистый стек вызовов, предотвращая отслеживание поведенческими мониторами системных вызовов обратно к защищённым областям кода.
     - **Краткое объяснение**:
        *   **Вывод SSN**: Чтобы обойти пользовательские хуки, часто размещаемые на потоке инструкций ntdll.dll, движок использует алгоритм относительной сортировки. Путём анализа экспортного каталога и сортировки всех функций с префиксом Zw по их адресам в памяти, движок выводит номера системных служб (SSN) на основе их относительного индекса. Это позволяет фреймворку определить правильный индекс системного вызова, никогда не читая захваченные байты пролога функции.
Динамические заглушки системных вызовов: Вместо использования статических инструкций syscall в пользовательском бинарнике, библиотека динамически выделяет исполняемую память для размещения временных переходных заглушек. Движок заполняет эти заглушки пользовательской последовательностью шеллкода (`mov r10, rcx; mov eax, ssnnumber; syscall; ret`) для непрямого выполнения системных вызовов.
        *   **Цепочная начальная загрузка**: Процесс разрешения является самозагружаемым; движок использует начальный разрешённый вызов для установки среды для последующих косвенных системных вызовов. Это гарантирует, что весь жизненный цикл процесса — от перечисления модулей до выполнения функций — остаётся непрозрачным для поведенческих мониторов и поддерживает чистый стек вызовов.
*   **Анти-криминалистика**: Использование смешанной булево-арифметики (MBA) и многоуровневой архитектуры виртуального набора инструкций (V-ISA) гарантирует, что даже если будет получен дамп памяти, восстановить базовую логику с помощью автоматизированных инструментов деобфускации нетривиально.

### Использование

1.  Включите `Obfusk8/Instrumentation/materialization/state/Obfusk8Core.hpp` в ваш основной файл проекта (например, `main.cpp`).
    ```cpp
    #include "Obfusk8/Instrumentation/materialization/state/Obfusk8Core.hpp" // Настройте путь по необходимости
    ```
2.  Оберните тело вашей функции `main` с помощью `_main`:
    ```cpp
    _main({
        // Ваш оригинальный код main здесь
        // Пример:
        // OBFUSCATE_STRING("Hello, Obfuscated World!").c_str();
        
        // Использование класса-обёртки API
        k8_NetworkingAPIs::NetworkingAPI* netAPI = new k8_NetworkingAPIs::NetworkingAPI;
        if (netAPI->IsInitialized() && netAPI->pInternetOpenA) {
            HINTERNET hInternet = netAPI->pInternetOpenA(OBFUSCATE_STRING("MyAgent").c_str(), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
            if (hInternet) {
                // ... используем hInternet ...
                netAPI->pInternetCloseHandle(hInternet);
            }
        }

        delete netAPI;
    })
    ```
3.  Используйте `OBFUSCATE_STRING("your string")` для всех важных строковых литералов. Получите доступ к расшифрованной строке через её метод `.c_str()` при необходимости для вызовов API или используйте другие её методы, такие как `.print_to_console()`, если они предоставлены `Obfusk8/Instrumentation/materialization/transform/AES8.hpp`.
4.  Используйте `STEALTH_API_OBFSTR("dll_name.dll", "FunctionNameA")` для прямых скрытных вызовов API или, что предпочтительнее, используйте классы-обёртки API (например, `K8_ProcessManipulationAPIs::ProcessAPI`, `k8_NetworkingAPIs::NetworkingAPI`) для удобства и встроенной скрытности.
5.  Разбрасывайте `OBF_BOGUS_FLOW_*`, `OBF_CALL_ANY_LOCAL_JUNK`, `NOP()` и другие примитивы в критических с точки зрения производительности, но не чувствительных ко времени участках вашего кода для добавления дополнительных слоёв обфускации.

* смотрите файл main.cpp.

### Сборка

*   **Требования к компилятору**: Эта библиотека разработана для C++17. В первую очередь нацелен на компилятор Microsoft C++ (`cl.exe`), особенно для функций секций PE и использования SEH.
*   **Получение `cl.exe` (компилятор MSVC) в Windows**:
    1.  **Установите Visual Studio**: Самый простой способ получить `cl.exe` — установить Visual Studio. Вы можете скачать Visual Studio Community бесплатно с [веб-сайта Visual Studio](https://visualstudio.microsoft.com/downloads/).
    2.  **Выберите рабочую нагрузку**: Во время установки убедитесь, что выбрана рабочая нагрузка "Разработка классических приложений на C++". Это установит компилятор C++, Windows SDK и другие необходимые инструменты.
    3.  **Используйте командную строку разработчика**: После установки найдите в меню Пуск "Командная строка разработчика для VS" (например, "x64 Native Tools Command Prompt for VS 2022") и запустите её. Эта командная строка автоматически устанавливает переменные среды (PATH, INCLUDE, LIB), необходимые для использования `cl.exe`.
*   **Пути включения**:
    *   Убедитесь, что каталог, содержащий `Obfusk8/Instrumentation/materialization/state/Obfusk8Core.hpp`, находится в пути включения вашего компилятора.
    *   Если `Obfusk8/Instrumentation/materialization/transform/AES8.hpp`, `Obfusk8/Instrumentation/materialization/transform/Resolve8.hpp` и каталоги с обёртками API (например, `k8_NetworkingAPIs/`) не находятся в том же каталоге, что и `Obfusk8/Instrumentation/materialization/state/Obfusk8Core.hpp`, настройте их пути соответствующим образом. `Obfusk8/Instrumentation/materialization/state/Obfusk8Core.hpp` использует относительные пути, такие как `../Obfusk8Core.hpp`, для некоторых своих внутренних включений обёрток API, поэтому структура каталогов важна. Если `Obfusk8/Instrumentation/materialization/state/Obfusk8Core.hpp` находится в корне каталога включения для этой библиотеки, то обёртки API должны находиться в подкаталогах, таких как `k8_NetworkingAPIs/`, относительно того места, где их ожидает `Obfusk8/Instrumentation/materialization/state/Obfusk8Core.hpp`, или откорректируйте пути включения внутри самого `Obfusk8/Instrumentation/materialization/state/Obfusk8Core.hpp`.
*   **Пример компиляции (с использованием командной строки разработчика)**:
    Предполагая, что ваш `main.cpp` и заголовочные файлы Obfusk8 структурированы правильно, вы можете скомпилировать с помощью команды, похожей на:
    ```bash
    cl /std:c++17 /EHsc main.cpp
    ```
    *   после открытия `x64 Native Tools Command Prompt for VS 2022`:
      
        ![x64 Native Tools Command Prompt for VS 2022](https://assets.kitploit.com/production/public/readmes/8984/86c7ebae9ed88a06bb6de06a0766ebeebd213ac98a9f353af8db4dd462acd849.jpg)

        
    *   `/std:c++17`: Указывает стандарт C++17.
    *   `/EHsc`: Указывает модель обработки исключений C++.
    *   `main.cpp`: Ваш основной исходный файл.
    *   `/I"путь/к/вашим/include_obfusk8"`: (Необязательно, если заголовки не находятся в путях по умолчанию) Добавьте каталог, где находятся `Obfusk8/Instrumentation/materialization/state/Obfusk8Core.hpp` и его зависимости. Если они находятся в подкаталогах, убедитесь, что относительные пути внутри `Obfusk8Core.hpp` соответствуют вашей структуре.
    *   **Замечание по библиотекам**: Хотя скрытное разрешение API стремится избежать статического связывания для обфусцированных функций, сами заголовки Windows SDK могут требовать доступности некоторых файлов `.lib` для компоновщика для разрешения любого необфусцированного использования SDK или внутренних типов (например, `Ws2_32.lib`, `Wininet.lib`, `Advapi32.lib` и т.д.). Для простого проекта, такого как `cl /std:c++17 /EHsc main.cpp`, компоновщик часто разрешает их автоматически, если это стандартные библиотеки Windows.

*   **CMAKE**: Вы также можете собрать Obfusk8 с помощью cmake.
   1. клонируйте и перейдите в репозиторий: `git clone https://github.com/x86byte/Obfusk8.git` и перейдите в каталог `cd Obfusk8`
   2. настройте и сгенерируйте файлы: `cmake CMakeLists.txt`
   3. автоматический выбор инструментов сборки и компиляция: `cmake --build .`
   *   после открытия `x64 Native Tools Command Prompt for VS 2022`:
     
        ![x64 Native Tools Command Prompt for VS 2022](https://assets.kitploit.com/production/public/readmes/8984/0f644508b0677934acc81220dfe0131598c22302f78aefaea101cc38e413cb2b.png)

*   **CMAKE && Microsoft Visual Studio**:
    *   после открытия `microsoft visual studio`, нажмите `Ctrl + B` для компиляции проекта:
      
       ![Microsoft Visual Studio](https://assets.kitploit.com/production/public/readmes/8984/23789327b22943c754f4a06e036cb2c7521c5b764d4c78f1363ed0edf974cb1e.png)
        
*   **Соображения по размеру бинарного файла и будущие улучшения**:
    *   **Влияние на размер**: Имейте в виду, что интенсивное использование заголовочной обфускации, особенно методов, таких как вставка мусорного кода, MBA-расширения и упрощённый поток управления, может привести к значительному увеличению конечного бинарного файла. Небольшая программа может вырасти с килобайт до потенциально 2 МБ или более, в зависимости от интенсивности применяемой обфускации.
    *   **Настройка и упаковка (будущее направление)**:
        *   В настоящее время Obfusk8 фокусируется на обфускации внутри кода. Пользователям может потребоваться тонкая настройка использования различных макросов (например, уменьшение плотности `OBF_CALL_ANY_LOCAL_JUNK` или сложности циклов `_main`), если размер бинарного файла является критическим ограничением.
        *   Для существенного уменьшения размера после обфускации интеграция или использование внешнего упаковщика PE (например, UPX, MPRESS или пользовательских решений) будет отдельным шагом.
        *   Будущее развитие Obfusk8 может исследовать возможности более гранулированного контроля над интенсивностью обфускации или даже интегрировать лёгкие заглушки упаковки/сжатия непосредственно в библиотеку, хотя это значительно увеличит её сложность.

### Пост-сборочная обфускация PE
Obfusk8 включает в себя пост-сборочный скрипт для дальнейшего усиления скомпилированного бинарного файла путём удаления криминалистических артефактов.

*   **Расположение скрипта**: `Obfusk8/SCRIPTS/obfuscate_pe.ps1`
*   **Что он делает**:
    1.  **Удаляет Rich Header** — удаляет отпечаток среды сборки MSVC, который раскрывает информацию о версии компилятора и деталях инструментария.
    2.  **Подменяет TimeDateStamp** — заменяет временную метку в заголовке PE фиксированным значением, чтобы скрыть время сборки.
    3.  **Очищает отладочный каталог** — удаляет записи отладочного каталога, которые могут раскрыть пути к PDB или метаданные сборки.
*   **Использование**:
    Запускайте как пост-сборочный шаг после компиляции:
    ```powershell
    PowerShell -NoProfile -ExecutionPolicy Bypass -File Obfusk8/SCRIPTS/obfuscate_pe.ps1 -Path "путь\к\Obfusk8.exe"
    ```
    Скрипт изменяет бинарный файл на месте. Резервная копия не создаётся.

### Демонстрация
   [[Obfusk8: библиотека обфускации на C++17 - Графовое представление в IDA Pro] ~Видео демонстрация](https://youtu.be/B9g4KSg3tHQ)

### Вклад и обратная связьЭтот проект, Obfusk8, является продолжающимся исследованием продвинутых методов обфускации на C++. Текущая версия закладывает прочную основу с множеством переплетённых стратегий.

*   **Ваша обратная связь бесценна**: Как разработчик Obfusk8, я очень заинтересован в вашем мнении, идеях и любых отзывах. Будь то предложения новых функций, улучшения существующих техник, сообщения об успешных (или неудачных) попытках реверс-инжиниринга кода, защищённого Obfusk8, или общие мысли об удобстве и эффективности библиотеки.
*   **Вклад**: все вклады приветствуются и высоко ценятся. Этот проект процветает благодаря участию сообщества и реальному тестированию, чтобы расширить свои границы и стать ещё более мощным инструментом для защиты кода. Пожалуйста, не стесняйтесь делиться своими мыслями, сообщать о проблемах или вносить вклад в его развитие!.
      *    **[Как внести вклад в Obfusk8?](https://opensource.guide/how-to-contribute/)**

### Особая благодарность
*   [sadMosquito](https://github.com/sadMosquito) — за сообщения об ошибках и тестирование проекта

**Отказ от ответственности**
Обфускация — это уровень защиты, а не панацея. Целеустремлённые атакующие, обладающие достаточными навыками и временем, часто могут подвергнуть обфусцированный код реверс-инжинирингу. Obfusk8 стремится значительно повысить планку для таких попыток. Используйте в сочетании с другими мерами безопасности.

**Свяжитесь со мной**
Если вы хотите поделиться отзывами, обсудить методы обфускации, сообщить о попытках реверс-инжиниринга или просто провести техническую дискуссию, не стесняйтесь обращаться напрямую. Я всегда открыт для конструктивных бесед и сотрудничества (я был бы рад сотрудничать в проектах, связанных с обфускацией, или в чём-либо ещё).

- x : https://x.com/x86byte  
- telegram: https://t.me/x86byte  
- discord: @x86byte
Скачать инструмент
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):
    • Принудительные исключения и SEH: Используется Structured Exception Handling (SEH) для создания путей, включающих принудительные исключения. Блоки __except могут изменять состояние программы, что затрудняет её отслеживание, если отладчик пропускает исключения.
    • Проверки отладчика (концептуально): Макрос Runtime содержит условия, которые при выполнении (из-за определённых состояний ВМ или временных задержек) могут вызвать __debugbreak() или выбросить исключения, предназначенные для нарушения сеансов отладки.
  • _main