Эффективное решение, предназначенное для обфускации (преобразования) исходных текстов программ, написанных на языках C и C++ (поддерживает стандарты C++98, С++ 03, С++ 11, С++ 14, С++ 17), с целью их защиты от реверс-инжиниринга. В результате обфускации код программы получает надежную защиту от анализа, выполняемого как человеком, так и машиной.
StarForce C++ Obfuscator рекомендуется для защиты программного обеспечения (ПО), к которому предъявляются повышенные требования по взломостойкости, например, защита ключей DRM, защита игр от внедрения постороннего кода (читов и ботов) и защита исходников при передаче/продаже.
Программа удаляет комментарии, незначащие пробелы и переименовывают макросы/переменные/функции в нечто вида OO000O, при этом, не меняя логику программы. То есть бинарные коды обфусцированного и необфусцированного текста будут выглядеть одинаково. Обычно применяется, когда по условию лицензионного соглашения необходимо предоставить исходный код.
В этом случае добавляются лишние ветвления, циклы, вызовы функций и т.д. Бинарные коды обфусцированного и необфусцированного текста будут сильно отличаться. При этом каждый раз создается новая версия. Например, для того, чтобы перестали работать существующие читы и боты в игре достаточно заново обфусцировать исходный код, не меняя ничего внутри. Этот вариант обеспечивает самый высокий уровень защиты от анализа и модификации.
StarForce C++ Obfuscator относится ко второму типу. Он меняет логику программы, используя разные алгоритмы. В настоящий момент этот продукт является одним из лучших на рынке, благодаря использованию большого выбора методов защиты и многолетней работе без компрометации.
Другим преимуществом StarForce C++ Obfuscator является его универсальность: данный продукт может применяться для защиты программ, создаваемых для любых операционных систем и процессоров, в том числе для защиты программно-аппаратных прошивок (firmware).
Пример использования StarForce C++ Obfuscator
Исходный код
После обфускации
#include <stdio.h>// Euclidian algorithm for calculating greatest common divisor (before obfuscation)int gcd(int n, int m ){if( n <1|| m <1)return-1;while( n != m ){if( n > m ) n -= m;else m -= n;}return n;}// Tests in triplets { n, m, expected_gcd( n, m ) }int tests[][3]={{1, 2, 1},
{3, 3, 3},
{42, 56, 14},
{249084, 261183, 111},
};// Perform testsint main(int, char*[]){printf("Performing tests of gcd function:\n");bool passed =true;for(int i =0; i <sizeof( tests )/sizeof( tests[0]); i++){int n = tests[ i ][0];int m = tests[ i ][1];int expected_gcd = tests[ i ][2];int calculated_gcd = gcd( n, m );printf(" %d. gcd( %d, %d ) = %d, ", i +1, n, m, calculated_gcd );if( calculated_gcd == expected_gcd ){printf("OK.\n");}else{printf("error.\n");
passed =false;}}printf("Tests %s.\n", passed ?"passed":"failed");return passed ?0:1;}
Будущее обфускации готовит хакерам совсем не радужные перспективы. … В практическом плане это означает полный мрак стандартным методам анализа кода. Если теоретически возможно (но практически очень и очень сложно) вычистить мусор и удалить избыточность, внесенную «запутывателями», то «распутать» байт-код Сетей Петри уже невозможно. Этот процесс однонаправленный, и развернуть его на 180 градусов практически невозможно.
Крис Касперски
В результате защиты обфусцированным получается как исходный текст, так и бинарный код, что значительно увеличивает уровень взломостойкости.
Обфускатор поддерживает более 30 методов обфускации, которые можно независимо включать, выключать и настраивать с помощью конфигурационного файла. Среди наиболее эффективных методов можно назвать:
преобразование кода С++ в код виртуальной машины;
шифрование строк и массивов;
преобразование кода в цифровой автомат;
введение ложных связей;
объединение участков кода.
Поддержка любых операционных систем: Windows, macOS, Linux, iOS, Android.
Отдельное приложение, которое устанавливается на стороне заказчика.
Различные модели лицензирования (с ограничением и без ограничения по времени использования).
Возможность устанавливать разные настройки для разных участков кода.
Запуск из командной строки.
Защита кода от анализа и модификации в играх
Описание ситуации
Основная монетизация игр free-to-play осуществляется за счет продажи платных контента/ресурсов/артефактов. Игроки используют различные мошеннические инструменты (читы и боты), чтобы получить желаемое бесплатно. Чтобы встроить чит, нужно проанализировать код игры и понять, как он работает. При успешной интеграции мошеннического инструмента в игру, издатель теряет свой доход и, как результат, заинтересованность в развитии проекта.
Решение
Продукт StarForce C++ Obfuscator защищает код от анализа и модификации. При этом разработчик сам определяет уровень защиты для разных участков кода, чтобы не снижать производительность игры. В результате обфускации каждый раз получается новая версия бинарного кода, что делает невозможным использование старых читов.
Защита исходного кода при передаче программы третьим лицам
Описание ситуации
Может возникнуть ситуация, когда нужно защитить код от анализа и модификации. Причины могут быть различны – защита уникальных алгоритмов, сокрытие части кода, блокировка возможности вносить изменения и т.д.
Решение
Использование StarForce C++ Obfuscator защищает от обратного инжиниринга и позволяет сохранить тайны вашей программы в секрете.
Защита от потери ключей при использовании стандартных DRM
Описание ситуации
Стандартные DRM, такие как AACS или HDCP используются для ограничения доступа к аудио-, видеопотокам. Их особенностью является наличие секретных ключей для каждой модели пользовательских устройств (телевизоров, плееров, приставок). Утечка ключа устройства приводит к пиратскому распространению контента и в результате отзыву скомпрометированного ключа. После этого устройство перестает работать, а для получения нового ключа производителю приходится заплатить крупную сумму представителю DRM. В некоторых случаях за утечку ключа устройства может быть предусмотрен штраф или приостановка лицензии.
Решение
StarForce C++ Obfuscator позволяет защитить программное обеспечение, предназначенное для передачи, приёма или воспроизведения цифрового аудио или видеопотока, защищённого с использованием стандартных систем DRM. В результате обфускации код, отвечающий за работу с ключами, надежно защищен от анализа и модификации.
Защита клиентской части системы стандартной DRM
Описание ситуации
Клиентская часть любой стандартной DRM-системы, например, OMA DRM, подвержена атакам, сводящимся к анализу, модификации и отключению защиты. В зависимости от DRM, эта атака может привести к компрометации либо одного защищённого объекта, либо всех защищённых объектов одного пользователя, либо всех защищённых объектов системы.
Решение
StarForce C++ Obfuscator позволяет снизить риск взлома DRM благодаря существенному увеличению сложности анализа. Детали использования обфускатора (т. е. что и как нужно обфусцировать) сильно зависят от системы. Для оптимального решения проблемы рекомендуется консультация технических специалистов StarForce.
Защита собственной DRM от анализа
Описание ситуации
Разработка собственной DRM – затратная задача. Если разработчик идёт на это, ему в любом случае необходимо решить задачу защиты от анализа кода DRM, работающего на стороне конечного пользователя. При этом разработчик получает 2 проблемы:
Существенные трудозатраты на создание эффективной защиты от анализа.
Риск получения недостаточной эффективности защиты от анализа.
Решение
StarForce C++ Obfuscator позволяет сэкономить время на разработку системы защиты DRM от анализа. При его использовании также обеспечивается высокий и известный заранее уровень эффективности. Оценка уровня эффективности производится разработчиком при принятии решения о приобретении обфускатора на основе анализа результатов обфускации.
StarForce C++ Obfuscator представляет собой stand-alone приложение, защищённое от копирования с помощью продукта StarForce ProActive for Business. На вход обфускатор принимает незащищённые CPP-файлы, в которых с помощью специальных атрибутов помечены функции, требующие защиту от анализа. На выход обфускатор также выдаёт CPP-файлы, но в них соответствующие функции уже обфусцированы.
Использование продукта состоит из следующих шагов:
1
Установить StarForce C++ Obfuscator на компьютере разработчика.
2
Активировать продукт. Для этого необходимо запустить исполняемый файл omniform.exe и в появившемся окне ввести серийный номер.
3
Произвести тестовую обфускацию. Для этого нужно:
А
Создать файл test_input.cpp со следующим содержимым:
__attribute__((obfuscate(0))) int f1( int a, int b )
{
if( a > b ) return a;
else return b;
}
B
Запустить обфускатор командой obfrun.exe test_input.cpp test_output.cpp.
C
Убедиться, что файл test_output.cpp содержит обфусцированный код.
4
Подготовить исходные файлы к обфускации, расставив перед нужными функциями атрибут obfuscate.
5
Настроить обфускатор на работу с нужным компилятором, отредактировав конфигурационные файлы. Подробности описаны в руководстве пользователя.
7
Произвести обфускацию с помощью команды obfrun.exe.
8
Скомпилировать обфусцированные файлы.
9
Провести тестирование скомпилированного приложения и убедиться в том, что оно функционально эквивалентно приложению, скомпилированному из необфусцированных файлов.
Для более удобного использования обфускатора используйте возможность интеграции его в процесс сборки приложения.
Обфускатор может работать на следующих операционных системах
Windows 7 32/64-bit.
Windows Vista 32/64-bit.
Windows 8 32/64-bit.
Windows 10 32/64-bit.
Windows Server 32/64-bit.
Linux (опция).
macOS (Wine).
Обфускатор требует для работы
350 Mb дискового пространства для установки.
4 Гб RAM.
Обфускатор имеет следующие параметры совместимости с С++
Поддерживаемые компиляторы
MSVC6.0, MSVC7.0, MSVC7.1+.
GCC 3.
GCC 4.
Поддерживаемые стандарты C++ ISO/IEC
C++98.
C++03.
C++11.
C++14.
C++17.
Поддерживаемые целевые платформы для C++
Windows.
Linux.
Android.
macOS.
iOS.
Не поддерживается обфускация следующих языковых конструкций