
Obfus.h -это библиотека только для макроса для сфузыча Comple-времени C, разработанных специально для крошечного C (TCC) . Он предназначен для платформ Windows X86 и X64 и поддерживает почти все версии компилятора. Очень надежная броня для ваших программ C!
Интеграция Obfus.h в ваш проект - это простой процесс. Просто включите следующую строку в свой код:
#include "obfus.h"Это автоматически запутает ваш код во время компиляции, обеспечивая защиту и конфиденциальность вашей интеллектуальной собственности.
Доступные параметры для настройки защиты:
// Advanced code protection (see the "Virtualization" part of the documentation!) #define VIRT 1 // Allows you to use the functions of a math VM // Additional options #define CFLOW_V2 1 // More powerful Control Flow obfuscation (slowly!) #define ANTIDEBUG_V2 1 // Use better dynamic anti-debugging protection #define FAKE_SIGNS 1 // Adds fake signatures of various protectors or packers // Disabling default features #define NO_CFLOW 1 // Don't use Control-Flow obfuscation #define NO_ANTIDEBUG 1 // Don't build in debugging protectionили используйте его с компилятором Args:
tcc "app.c" -w -D NO_CFLOW -D ANTIDEBUG_V2 -D FAKE_SIGNS -D VIRT
Предупреждение
При составлении приложения с запутыванием используйте аргумент -w для подавления предупреждений. В противном случае, консоль будет отображать многочисленные пугающие журналы, которые не влияют на конечный результат. Там нет необходимости быть встревоженными.
? Защита отладки запускается вызовы во многих основных функциях MSVCRT. В критических местах в коде вы можете использовать ANTI_DEBUG; конструкция. Например:
ANTI_DEBUG ;
if (! licenseExpired ()) {
// ...
} Это метод защиты, в которой определенные расчеты выполняются через встроенную виртуальную машину по команде. Очень сложный анализ математических операций! Он будет работать с включенной опцией VIRT (и только!). В противном случае все команды виртуальной машины будут заменены обычными математическими операторами.
Предупреждение
Виртуализация в критических местах может повлиять на оптимизацию. Используйте с осторожностью только в областях, где это действительно необходимо
| Функция | Тип | Доклада | Описание | Пример |
|---|---|---|---|---|
VM_ADD | длинный | + | Добавляет два числа | VM_ADD(5, 3) = 8 |
VM_SUB | длинный | - | Вычитает два числа | VM_SUB(5, 3) = 2 |
VM_MUL | длинный | * | Умножается два числа | VM_MUL(5, 3) = 15 |
VM_DIV | длинный | / | Делит два числа | VM_DIV(6, 3) = 2 |
VM_MOD | длинный | % | Вычисляет модуль двух чисел | VM_MOD(5, 3) = 2 |
VM_EQU | Буль | == | Проверяет, равны ли два числа | VM_EQU(5, 5) = true |
VM_NEQ | Буль | != | Проверяет, не равны ли два числа | VM_NEQ(5, 3) = true |
VM_LSS | Буль | < | Проверяет, является ли первое число меньше, чем второе число | VM_LSS(3, 5) = true |
VM_GTR | Буль | > | Проверяет, больше ли первого числа второе число | VM_GTR(5, 3) = true |
VM_LEQ | Буль | <= | Проверяет, является ли первое число меньше или равно второму номеру | VM_LEQ(3, 5) = true |
VM_GEQ | Буль | >= | Проверяет, больше ли первого числа или равно второму числу | VM_GEQ(5, 3) = true |
VM_ADD_DBL | длинный двойной | + | Добавляет два двойных номера | VM_ADD_DBL(5.5, 3.2) = ≈8.7 |
VM_SUB_DBL | длинный двойной | - | Вычитает два двойных числа | VM_SUB_DBL(5.5, 3.2) = ≈2.3 |
VM_MUL_DBL | длинный двойной | * | Умножается два двойных числа | VM_MUL_DBL(5.5, 3.2) = ≈17.6 |
VM_DIV_DBL | длинный двойной | / | Делит два двойных числа | VM_DIV_DBL(6.0, 3.0) = ≈2.0 |
VM_LSS_DBL | Буль | < | Проверяет, является ли первое двойное число меньше, чем второй двойной номер | VM_LSS_DBL(3.5, 5.2) = true |
VM_GTR_DBL | Буль | > | Проверяет, больше ли первого двойного номера больше второго двойного номера | VM_GTR_DBL(5.5, 3.2) = true |
Виртуальная машина не поддерживает некоторые основные операции
doubleсравнения.
Вы можете использовать логические операторы, которые используют вызовы виртуальных машин, чтобы еще больше усложнить понимание вашего кода.
| Оператор | Описание |
|---|---|
VM_IF | Используйте вместо if |
VM_ELSE_IF | Используйте вместо else if |
VM_ELSE | Использовать вместо else |
Простой пример использования виртуализации:
// ...
#define VIRT 1
// ...
// if ((2 + 2) == 4) { ... }
VM_IF ( VM_EQU ( VM_ADD ( 2 , 2 ), 4 )) {
printf ( "2 + 2 == 4!" );
}
// if (condition1) { ... }
// else if (condition2) { ... }
// else { ... }
VM_IF ( condition1 ) {
// if
} VM_ELSE_IF ( condition2 ) {
// else if
} VM_ELSE {
// else
}Вы можете найти примеры использования всех функций виртуальной машины в файловых тестах/virtualmachine.c
Если вам нужна расширенная защита от квалифицированных реверсий, используйте параметры CFLOW_V2 и ANTIDEBUG_V2 .
// Let's obfuscate your code!
#include <stdio.h>
#define VIRT 1 // [+] Use math virtual machine
#define CFLOW_V2 1 // [+] ControlFlow v2
#define FAKE_SIGNS 1 // [+] Fake signatures
#define ANTIDEBUG_V2 1 // [+] AntiDebug v2
#define NO_CFLOW 0 // [-] Disable ControlFlow
#define NO_ANTIDEBUG 0 // [-] Disable AntiDebug
#include "obfus.h"
void main () {
char * out = malloc ( 256 );
strcpy ( out , "Hello, world!n" );
if ( out ) {
printf ( out );
} else {
printf ( "Error!n" );
}
free ( out );
int result = VM_ADD ( 5 , 7 ); // 5 + 7
VM_IF ( VM_EQU ( result , 12 )) { // (5 + 7) == 12
printf ( "5 + 7 == 12" );
}
} Для использования рекомендуется последняя версия Tiny C ( 0.9.27 ). К сожалению, некоторые версии компилятора не поддерживают функциональность, необходимую для полного запутывания. Visual C , GCC и Clang не поддерживаются и вряд ли будут поддержаны.
Вы можете использовать специальный скрипт для Windows, чтобы получить последние версии obfus.h , загрузив пакет из официального репозитория. Это полезно, если вам нужно автоматизировать обновления безопасности без использования git .
Например, вы можете использовать его перед созданием своего проекта:
+ C:...> call obfh-update C:...> tcc app.c -wСкрипт будет обновлять содержимое файла obfus.h в текущем каталоге (в соответствии с указанной конфигурацией)
Код программы (и ее исходная исходная логика), защищенная с использованием Obfus.h , практически невозможно восстановить (deobfuscate) . Тем не менее, использование этого вмешательства не гарантирует полную защиту от всех типов угроз. Важно разрабатывать и поддерживать внутренние системы безопасности программ.
Как будет выглядеть схематический код после запутывания:
Реверсер увидит что -то подобное, если он попытается использовать декомпилятор:
Спасибо всем, кто помог в разработке этого проекта. Я ценю это! ❤
И спасибо тебе ? Для обращения внимания на этот проект!