
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 внедряются многочисленные вводящие в заблуждение шаблоны переходов и запутанные условные конструкции. Они используют операторы в сочетании с непрозрачными предикатами (условия, которые всегда истинны или ложны, но вычислительно дороги или трудно определяемы статически). Это создаёт лабиринт ложных путей для дизассемблеров и декомпиляторов.
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) мутируется во время выполнения в прологе и эпилоге , что ещё больше скрывает поведение ВМ.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.OBF_METHOD)Obfusk8 теперь предоставляет гранулярный контроль над безопасностью вашего двоичного файла с помощью обфускации на основе методов. Вместо обфускации всего проекта (что может повлиять на производительность) вы можете выборочно защищать конкретные, важные функции или методы классов.
OBF_METHOD: ```cpp
OBF_METHOD(ret_type, func_name, params, method_body)
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"); }
// 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; })
*Вы можете просмотреть полный пример здесь: [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**:

* **некоторые фрагменты из IDA Pro**:



* **результаты сигнатур из Detect It Easy**:

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

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

* **секции**:

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

### Анализ движка и профиль обнаружения
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`:

* `/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`:

* **CMAKE && Microsoft Visual Studio**:
* после открытия `microsoft visual studio`, нажмите `Ctrl + B` для компиляции проекта:

* **Соображения по размеру бинарного файла и будущие улучшения**:
* **Влияние на размер**: Имейте в виду, что интенсивное использование заголовочной обфускации, особенно методов, таких как вставка мусорного кода, 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
gotoOBF_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() или выбросить исключения, предназначенные для нарушения сеансов отладки._main