Об этом проекте
obfus.h — это библиотека, состоящая только из макросов, для обфускации C-приложений во время компиляции, разработанная специально для Tiny C Compiler (tcc) на Windows x86 и x64. Она распространяется в виде одного заголовочного файла, который вы включаете в исходный код; обфускация применяется автоматически во время компиляции. Автор отмечает, что она поддерживает почти все версии tcc, рекомендует tcc 0.9.27 и заявляет, что Visual C, GCC и Clang не поддерживаются.
Задокументированные возможности:
- Обфускация вызовов функций, делающая вызовы менее читаемыми.
- Механизмы антиотладки, предназначенные для затруднения анализа во время выполнения; защита срабатывает при вызовах многих базовых функций MSVCRT, а конструкцию ANTI_DEBUG; можно размещать в критических точках.
- Мутация кода потока управления, которая перестраивает условия и циклы; опция CFLOW_V2 предоставляет более сильный (и более медленный) вариант.
- Сокрытие строк через HIDE_STRING(str), который собирает строки в стеке с помощью инструкций mov во время выполнения, а не объявляет их статически. В README предупреждается, что некоторые декомпиляторы всё ещё могут их раскрыть из-за статических оптимизаций.
- Приёмы против декомпиляции, предназначенные для визуального нарушения вывода декомпилятора.
- Поддельные сигнатуры различных упаковщиков и протекторов для запутывания реверс-инженеров.
- Математическая виртуальная машина (включается с помощью VIRT), предоставляющая VM_ADD, VM_SUB, VM_MUL, VM_DIV, VM_MOD, макросы сравнения, такие как VM_EQU/VM_NEQ/VM_LSS/VM_GTR/VM_LEQ/VM_GEQ, варианты для double и логические конструкции VM_IF/VM_ELSE_IF/VM_ELSE. В README предупреждается, что виртуализация может повлиять на оптимизацию и её следует использовать только там, где это необходимо, а также что некоторые операции сравнения double не поддерживаются.
Настройка выполняется через define-директивы, такие как VIRT, CFLOW_V2, ANTIDEBUG_V2, FAKE_SIGNS, и отключающие флаги NO_OBF, NO_CFLOW, NO_ANTIDEBUG, либо через аргументы компилятора (например, tcc app.c -w -D NO_CFLOW -D ANTIDEBUG_V2 -D FAKE_SIGNS -D VIRT). В README рекомендуется компилировать с -w, чтобы подавить множество предупреждений, возникающих во время обфускации.
Использование сводится к одной строке #include "obfus.h". Пакетный скрипт Windows (include-updater/obfh-update.cmd) может получать последнюю версию заголовочного файла из репозитория без git, что полезно для автоматических обновлений безопасности перед сборками. В README приведены ссылки на анализы безопасности сообщества, включая анализ механизмов защиты методом чёрного ящика (найденные проблемы, по словам автора, были исправлены), отчёт о CTF с использованием более раннего поколения и ObfusHunter — утилиту для сканирования файлов, защищённых obfus.h. Автор утверждает, что логика защищённой программы почти не поддаётся восстановлению, но подчёркивает, что одна лишь обфускация не гарантирует полной защиты и что внутренние системы безопасности всё равно следует разрабатывать и поддерживать.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.