Enigma protector что это
Enigma Protector – это мощная система, разработанная для
комплексной защиты исполняемых файлов.
Особенности Enigma Protector
Защита файлов
Набор функций и технологий, которые позволяют защитить исполняемые файлы от взлома, исследования, модификации и дизассемблирования. Использование виртуальной машины позволяет запускать часть кода приложения и защиты на собственном виртуальном процессоре, несанкционированный доступ к которому является очень сложной задачей.
Система лицензирования
Система лицензирования позволяет быстро наладить процесс проверки регистрационных ключей, привязки лицензии к определенному компьютеру и ограничить срок действия лицензии. Широкие возможности системы лицензирования позволяют создавать собственные генераторы ключей, а также использовать встроенные или легко настраиваемые CGI-генераторы ключей.
Virtual Box
Virtual Box – уникальная технология, позволяющая объединить файлы, используемые вашей программой, в один модуль. Эта функция поддерживает всевозможные виды файлов: dll, ocx, mp3, avi и др. Virtual Box обеспечит защиту ваших файлов, не допустит их копирования, а также использования в третьих продуктах.
The Enigma Protector x64
Enigma Protector позволяет также защищать и 64-битные исполняемые файлы. Системы защиты x86 и x64 совместимы, как и регистрационные ключи, созданные в этих программах. Enigma Protector x64, однако, является отдельным приложением, которое можно скачать в разделе загрузок.
Enigma Virtual Box
Enigma Virtual Box – система виртуализации приложений для Windows, которая позволяет корректно объединить все файлы приложения в один исполняемый файл без извлечения виртуальных файлов на диск. Это бесплатное приложение, поддерживающее как x86 (32-битные), так и x64 (64-битные) исполняемые файлы.
The Enigma Protector
Профессиональная система лицензирования и защиты
исполняемых файлов. Это необходимый инструмент
для каждого разработчика платного и условно-бесплатного
программного обеспечения для Windows.
Кроме ограничения (привязки) лицензии к определенному компьютеру, вы можете ограничить использование лицензии определенной датой, по количеству запусков зарегистрированной программы или количеству дней работы. Также вы можете ограничить общее время работы лицензии на определенном компьютере до нескольких часов или минут с момента запуска защищенного файла. Имеется возможность ограничить использование лицензии по географическому признаку (например, для определенной страны).
Вы можете проверять регистрационные ключи в своем приложении посредством специальных функций Enigma API, которые могут быть использованы практически в любом языке программирования (C++, Delphi, Visual Basic и др.). Даже если у вас нет возможности вносить изменения в исходный код программы, вы можете использовать стандартный регистрационный диалог Enigma Protector. Регистрационный диалог имеет удобный редактор, который позволяет изменить любые настройки основного приложения и стили диалога, чтобы придать ему уникальный дизайн или сделать его аналогичным дизайну вашего приложения.
Технология виртуальной машины не только защищает исполняемый код и код защиты, но и усложняет (делает практически невозможным) процесс его изучения и анализа. Суть технологии виртуальной машины состоит в том, что исполняемый код переводится в собственный язык PCODE, понятный только Enigma Protector, и впоследствии он выполняется на внутреннем эмуляторе центрального процессора. Виртуальная машина использует различные схемы при создании каждой защиты, и разобранный алгоритм для одной виртуальной машины является совершенно бесполезным для другой.
Для сброса испытательного периода пользователь должен будет зарегистрировать программу, т.е. получить от вас регистрационный ключ.
Если ваше приложение предназначено для работы только на определенных версиях Windows, просто укажите в Enigma Protector те версии Windows, на которых защищенное приложение не должно запускаться.
Часто взломщики используют системы виртуализации программ (такие, как VMWare, VirtualPC, VirtualBox, Sandboxie), чтобы продлить испытательный период или подменить данные об оборудовании компьютера. Чтобы предотвратить использование защищенного файла в таких системах, Enigma Protector имеет функцию проверки наличия виртуальных машин.
Уникальный набор функций для определения и мониторинга процессов позволит настроить систему защиты на определение нежелательных и вредоносных процессов на компьютере пользователя. Функция проверки запущенных процессов позволяет определить, какие программы запущены на компьютере, есть ли среди них скрытые процессы и т.п.
Если у вас есть собственные разработки для защиты программы, вы можете использовать их вместе с Enigma Protector с помощью системы плагинов. Суть системы заключается в том, что динамическая библиотека с вашей реализацией функций защиты будет встроена в защищенное приложение, и определенные функции будут вызваны при запуске защищенного файла.
В Enigma Protector реализованы функции сжатия и шифрования кода и данных приложения. Сжатие файла позволяет уменьшить его размер в несколько раз, а функции шифрования защищают код программы от дизассемблирования, анализа и модификации.
Copyright © 2004-2023, The Enigma Protector Developers Team. All rights reserved.
Программная реализация шифровальной машины «Энигма» на языке Си
В своё время для преподавания, в промежутке между двумя предметами ОАиП (Основы алгоритмизации и программирования) и КСЗИ (Криптографические средства защиты информации), я реализовывал шифровальную машину «Энигма», чтобы показать как можно применять: 1) программирование для изучения криптографии; 2) криптографию для изучения программирования. В определённой мере, реализация классических шифров очень хорошо может прокачивать не только понимание внутреннего механизма работы того или другого алгоритм шифрования, но также и навыки самого программирования, потому как реализация любого шифра — это в первую очередь алгоритмическая задача.
В данной работе не будет исторического введения в понимание того, что представляет собой шифровальная машина «Энигма» в довоенное и в военное время, как она модифицировалась, а также как она взламывалась. На всё это существует большое количество написанных работ как на хабре, так и в книгах. Для людей, кому интересно всё вышеописанное я оставлю список литературы, с которым вы можете ознакомиться.
Механизмы шифрования
Шифровальная машина «Энигма» внешне выглядит как печатающая машинка, за исключением того факта, что шифруемые символы не печатаются автоматически на определённый лист бумаги, а указываются на панели посредством загорания лампочки.

Шифровальная машина «Энигма» обладает тремя основными механизмами.
Роторы. Сердце всех шифровальных машин того времени. Со стороны классической криптографии они реализуют полиалфавитный алгоритм шифрования, а их определённо выстроенная позиция представляет собой один из основных ключей шифрования. Каждый ротор не эквивалентен другому ротору, потому как обладает своей специфичной настройкой. Военным на выбор давалось пять роторов, три из которых они вставляли в «Энигму». Выбор позиций, для вставки роторов, также играл свою роль, потому как образовывал свойство некоммутативности. Иными словами если существует настройка трёх роторов равная (A, B, C), то её замена на настройку (B, A, C) будет приводить к иному результату шифрования. Это говорит о том, что существовало (5!) / (2!) = 60 комбинаций выбора и подстановки. Далее, каждый ротор обладал 26-тью гранями, где каждая грань представляла собой нумерацию английского алфавита. Выбор одной определённой грани из 26-ти также представляло собой инициализацию ключа шифрования. Т.к. в сумме у нас находится три ротора, то всевозможных вариаций ключа будет существовать 26³ = 17 576. Итого, если учитывать все факторы выбора, подстановки и установки, то количество всевозможных ключей только на основе роторов будет равно ((5!) / (2!)) * (26³) = 60 * 17 576 = 1 054 560. Чисто технически, для того времени это количество комбинаций уже можно было эффективно взламывать, нанимая большое количество людей из третьего мира, выплачивая им копейки.

Рефлектор (отражатель). Статичный механизм, позволяющий шифровальным машинам типа «Энигма» не вводить помимо операции шифрования дополнительную операцию расшифрования. Связано это с тем, что в терминологии классической криптографии рефлектор представляет собой просто частный случай моноалфавитного шифра — парный шифр, особенностью которого является инволютивность шифрования, где функция шифрования E становится равной функции расшифрования D, иными словами E = D. Это приводит к следующим выводам: если существует сообщение M, то справедливы становятся следующие утверждения D(E(M)) = E(E(M)) = M, E(E(E(M))) = E(M) = D(M). Парный шифр крайне примитивен в своей реализации, так допустим у нас существует в алфавите всего 4 символа . Т.к. парный шифр — это разновидность моноалфавитного, то существует всегда и постоянно связь 1к1 для открытого и закрытого символов. Далее, если выбираем связь A=>B, то это говорит о том, что символ A должен зашифровываться символом B. Чтобы у нас появилась инволютивная связь, нам необходимо выбрать теперь символ B и привязать его к A, иными словами создать связь B=>A при шифровании. Вследствие этого применяем свойство транзитивности и получаем: если A=>B и B=>A, то A=B. Также делаем и с оставшимися символами C=D. Теперь дважды шифруя символ A, мы будем неявно применять композицию функций D*E, вследствие чего будем вновь получать символ A.

Коммутаторы. Своеобразный «множитель» возможных вариаций ключей шифрования. Представляет собой также как и рефлектор парный шифр, но в отличие от последнего является динамическим механизмом, то-есть редактируемым и сменяемым. Коммутаторы, можно их рассматривать как некие кабеля, вставляются в коммутационную панель, на которой изображены символы английского алфавита. Один коммутатор имеет два конца, каждый из которых вставляется в два отверстия коммутационной панели. Связь коммутатора с двумя отверствиями, над которыми изображены символы алфавита и представляет собой связь парного шифра между выбранными двумя символами. Так например, если коммутатор был вставлен в два отверстия (Q, D), то это говорит о том, что Q и D стали парными символами при шифровании. На одну шифровальную машину давалось десять коммутаторов, существовало 26 возможных отверстий в коммутационной панели (количество символов алфавита), один коммутатор одновременно связывал два символа такой панели, то-есть все коммутаторы затрагивают в общей сложности 20 отверстий. Всё это приводит к следующему количеству возможных расстановок коммутаторов на коммутационной панели (26!) / (6! * 10! * 2 10 ) = 150 738 274 937 250 [(постепенный_выбор_всех_букв_алфавита) / (оставшиеся_шесть_неиспользуемых_символов * двадцать_коммутаторов_как_десять_пар * все_десять_пар_коммутативны)].

Итого, учитывая все вышеописанные механизмы, а точнее роторы и коммутаторы, можно вычислить количество всех возможных ключей, которое будет равно [((5!) / (2!)) * (26³)] * [(26!) / (6! * 10! * 2 10 )] = 60 * 17 576 * 150 738 274 937 250 = 158 962 555 217 826 360 000. В суммарной сложности, если не учитывать уязвимость «Энигмы» на невозможность шифрования одного и того же символа самим собой, то вышеуказанное количество ключей будет сопоставимо количеству в битовом представлении
= 2 67 , что грубо (прям очень грубо) говоря больше, чем количество ключей в шифре DES = 2 56 .
Интересной особенностью здесь скорее является даже не количество всех возможных ключей, что для того и сегодняшнего времени всё равно является крайне большим числом (хоть уже и не надёжным со стороны современной криптографии), а комбинация нескольких подстановочных шифров классической криптографии, успешно сочитающихся между собой. Так например, в «Энигме» существуют роторы, представляющие собой полиалфавитный шифр, который при достаточно длинном ключе и его случайности становится сложновзламываемым. Но роторы сами по себе предлагают очень малое количество всех возможных комбинаций, хоть и являются самыми сложными механизмами в «Энигме». На помощь приходят коммутаторы, которые сами по себе не являются надёжными, потому как представляют собой частный случай более общего моноалфавитного шифра — шифра простой подстановки. Шифр простой подстановки хоть и обладает крайне большим количеством ключей 26! = 403 291 461 126 605 635 584 000 000, тем не менее, очень подвержен атакам частотного криптоанализа и атакам по маске. Но так или иначе, «Энигма» показала, что если объединить два этих шифра воедино, то может получиться достаточно хороший синтез, при котором наследуется сложность полиалфавитного шифра и количество ключей моноалфавитного.
Принцип работы
Для упрощения понимания работы шифровальной машины «Энигма» предположим, что у нас существует алфавит всего из восьми символов = <A, B, C, D, E, F, G, H>. Из этого следует, что сами роторы, рефлектор и соответственно коммутаторы ограничены этим же размером. Первое, что нам необходимо сделать — это спроектировать рефлектор и роторы под 8-ми символьный алфавит, как самую базовую основу шифровальной машины «Энигма».
Предположим, что рефлектор имеет следующие связи символов между собой: A=C, B=E, D=H, F=G. Если бы количество символов алфавита было бы нечётным, то шифровальную машину «Энигма» нельзя было бы спроектировать таким образом, каким её проектировали изначально авторы, потому как возникала бы возможность шифрования одного и того же символа самим собой за счёт оставшейся связи рефлектора X=X. Визуально, рефлектор можно изобразить в виде следующей схемы.

Работа рефлектора крайне проста. Если на вход поступает символ A, то рефлектор возвратит нам символ C, если поступает символ H, то рефлектор вернёт символ D и т.д.
Далее, нам необходимо точно таким же образом составить роторы. В отличие от рефлектора, где значения всегда статичны, в роторах значения постоянно меняются. Можно сказать, что каждый ротор представляет собой два диска, где один находится всегда в статичном положении, а другой вращается либо при нажатии символов, либо при совершении полного круга одного из роторов. Для начала создадим один ротор и проведём его к рефлектору. Результат будет выглядить следующим образом.

Левая часть ротора для нас будет являться статичной, в то время как правая часть динамична (P.S. наверное лучше было сделать правую часть всё же статичной, а левую динамичной для простоты понимания ввода символов в ротор, тем не менее, механику и получаемый результат такая инверсия никак не изменяет). Ротор — это полиалфавитный шифр, который меняет свой ключ шифрования после каждого введённого символа. Так например, в нашем случае, если мы будем шифровать комбинацию символов AAA, то мы будем получать на выходе ротора результат равный GHA (БЕЗ УЧЁТА РЕФЛЕКТОРА), с условием того, что динамическая часть ротора будет вращаться всегда вниз после нажатого символа.
Теперь, если мы также попытаемся зашифровать комбинацию символов AAA, но пропустим её не только через один ротор, но и последовательно через рефлектор, то получим уже следующий результат: CBE. Суть алгоритма можно представить на примере шифрования первого символа A. Выходом ротора для A будет символ G, символ G попадает на рефлектор и отражается в символ F (потому как таковой является парным), после уже рефлектор подаёт на вход ротору (но в обратном направлении) символ F, который на выходе ротора преобразуется в символ C. Таким образом, символ A шифруется символом C.
На этом же примере мы можем легко проверить, что символ A никогда не зашифруется самим собой, потому как у рефлектора не существует парного символа к самому себе. Для того, чтобы это проверить, достаточно зашифровать 8 раз символ A. На выходе мы будем получать следующий результат: CBEHGBDF (тут главное не ошибиться в количестве сдвигов ротора). Далее, если мы продолжим шифровать символ A, то придём к цикличности шифруемой последовательности, потому как у одного ротора существует только 8 возможных позиций.
Теперь же давайте добавим ещё два ротора с другими вариациями, поставим их последовательно, и проведём их композицию также к рефлектору.

Теперь, предположим, что я начинаю шифровать какой-либо символ, тогда по механике «Энигмы» сдвинется только самый ближний ротор к входу, то-есть правый. Как только он совершит свой полный цикл вращения, то на одну позицию повернётся следующий за ним ротор, то-есть средний. Как только средний ротор совершит свой полный цикл, то на одну позицию повернётся следующий за ним ротор, то-есть левый. Такое действие можно продолжать ещё очень долго, но исходя из истории, остановимся только на трёх роторах.
На вышеописанном примере процесс шифрования лучше уже показывать визуально, т.к. система связей значительно усложняется. Так например, если я буду шифровать три раза символ A, то он станет равен сначала символу C, потом символу G, а потом символу E. Это можно показать на следующих схемах.



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

Примерно таким образом у нас и работает шифровальная машина «Энигма.
Программная реализация
Как мы увидели, основной сложностью реализации для нас будет являться связь нескольких роторов между собой таким образом, чтобы допускался не только поток шифрования в одну сторону к рефлектору, но и от него обратно к начальному ротору. Коммутационная панель будет являться для нас излишним, добавочным механизмом, а потому таковой вы можете попробывать реализовать сами, дополнив код.
Первым делом создаём структуру «Энигмы», которая будет содержать рефлектор (отражатель), роторы, количество используемых роторов, их размер, а также количество произведённых вращений первого ротора.
Далее объявляем конструктор и деструктор объектов типа enigma_t , а также функции установки рефлектора и роторов.
Теперь приступим к кульминационному моменту, а именно шифрованию. Мы знаем, что особенностью «Энигмы» является не только её «машинная среда», но также и инволютивность шифрования/расшифрования. Иными словами, в «Энигме» не существует переключателей между шифрованием и расшифрованием, потому как шифрование = расшифрование. Единственным разделяющим моментом здесь служат позиции роторов и их настройка.
Чтобы шифровать не закодированные символы, а конкретно символы, мы можем написать функции кодирования/декодирования поступаемых символов или кодов непосредственно.
Далее, всё что нам остаётся сделать — это создать конкретные роторы и рефлектор, привязать их к объекту «Энигмы», создать объект кодировщика, а также для полноты реализовать ввод текста.
Установка роторов и рефлектора в «Энигму»
Запускаем приложение и проверяем его работу на примере шифрования.
Теперь попытаемся расшифровать полученный результат. Для этого останавливаем работу приложения и вновь его запускаем, чтобы состояние машины «Энигма» выставилась на начальные позиции.
Можем теперь зашифровать и что-то более нормальное.
Заключение
В ходе проделанной работы мы рассмотрели не только то, как шифровальная машина «Энигма» работает изнутри, но и также смогли реализовать её на языке программирования Си. В коде мы только не затронули использование коммутаторов, но это крайне легко сделать, дополнив код функциями шифрования до вызова функции enigma_encrypt и соответственно после (либо, что более правильно, прописать это внутри самой функции enigma_encrypt ).
H Обзор систем защиты ПО для Windows от нелегального использования в черновиках Recovery Mode
В сети с завидной регулярностью (особенно на ресурсах, где обитают разработчики ПО) появляются вопросы типа: «допиливаю свою первую шароварку/программу, задумался над тем, какой протектор выбрать. Что посоветуете?». Как правило, ответы на такие вопросы содержат лишь названия нескольких протекторов (очень часто даже без ссылок на официальные сайты) и минимум информации о самих протекторах — «пользуюсь XXX, все устраивает» или «пересел с XXX на YYY, доволен, как слон». Некоторое время назад я сам был в такой же ситуации, и сделал свой выбор, не обладая всей полнотой информации — хотелось поскорее уже прикрутить защиту и выпустить продукт, и это желание не располагало к глубоким и вдумчивым исследованиям. Я сделал свой выбор, и в основном не жалею, хотя, после исследования, проведенного для данной статьи, я бы наверно размышлял несколько дольше.
В процессе прикручивания протектора к своим программам у меня родился отдельный новый продукт, и я собираюсь написать о нем в хабе «Я пиарюсь». К сожалению, моей слегка подпорченой кармы не хватает на написание статей в этот хаб, и я решил начать с нейтральной статьи о системах программной защиты ПО от копирования.
Данная статья начинает небольшую серию статей, посвященную популяризации нашего продукта, но в данной статье он не будет упоминаться. В этой статье будут приведены лишь (по возможности) объективные сведения о возможностях, преимуществах и недостатках различных систем защиты ПО от нелегального использования.
Данная статья затрагивает только программные системы защиты (протекторы), защита ПО от копирования при помощи каких-либо физических носителей ключевой информации не рассматривается.
В данной статье рассматриваются системы защиты ПО, работающего под управлением ОС Windows различных версий, поддержка других операционных систем отмечается как опциональная возможность.
Краткое описание характеристик протекторов
Перед тем, как начать сравнение систем защиты, я хочу кратко описать параметры, по которым будет производится сравнение.
мутация кода — это один из самых простых способов защиты, заключающийся в замене ассемблерных инструкий на их полные аналоги. Мутация кода не ухудшает (практически) быстродействие защищаемого кода, и предназначена для усложнения поиска типичных сигнатур кода, которые содержатся в используемых библиотеках и которые типичны для конкретных компиляторов. Также мутация предполагает переупорядочивание инструкций без изменения их результирующего действия. Мутацию кода также иногда обозначают термином metamorf.
виртуализация кода — данный способ защиты основан на замене машинного кода на байт-код виртуальной машины, которая встраивается в исполняемый файл или динамическую библиотеку. Этот метод защиты обычно представляет серьезную проблему для взломщиков. Протекторы, использующие виртуализацию, обычно генерируют новую систему байт-кодов виртуальной машины каждый раз при обработке защищаемого приложения, что делает краки и генераторы ключей для старых версий ПО несовместимыми с каждой новой версией.
обнаружение отладчика — данная функция позволяет запрещать выполнение защищаемого приложения под отладчиком.
обнаружение VM — данная функция позволяет запрещать выполнение защищаемого приложения в операционной системе, которая установлена на виртуальной машине, такой, например, как VMWare или VirtualPC.
защита памяти — данная функция позволяет защищаеть приложение от атаки путем снятия дампа памяти работающего приложения.
проверка целостности — данная функция позволяет обнаруживать попытки модификации кода и данных приложения во время выполнения.
защита импорта — данная функция позволяет прятать информацию об используемых в программе API.
защита ресурсов — данная функция предотвращает извлечение и модификацию ресурсов приложения (в системах Win32/Win64)
dll boxing — данная функция позволяет включать в защищаемое приложение библиотеки DLL, требуемые для его работы, при этом DLL входят в состав исполняемого файла и при выполнении приложения загружаются из памяти без промежуточной записи на диск.
размер защищенных файлов — часто обработка исполняемых файлов сильно увеличивает размер защищаемого файла. В настоящее время объемы исполняемых файлов и дистрибутивов обычно не являются проблемой, но могут быть случаи, когда размер защищенного файла является важным критерием. Данная характеристика может изменятся раз от раза при обработке приложения, но средняя величина обычно остается неизменной.
упаковка защищаемых файлов — при защите приложений протектор может также производить упаковку защищаемого файла для уменьшения его размера. Эта возможность может быть важна, если использование протектора приводит к значительному увеличению размера защищаемого файла.
поддержка x64 — 64 разряда давно вошли в нашу жизнь, и многие разработчики выпускают 64-разрядные версии ПО. К сожалению, не все производители протекторов радуют возможностью защищать такие приложения; у некоторых протекторов такая возможность предоставляется за отдельную плату.
поддержка .NET, Linux, Mac — дополнительные возможности по защите приложений .NET, а также приложений под операционные системы Linux и Mac
консольные утилиты — наличие у протектора консольных утилит (Win32), которые позволяют автоматизировать процесс защиты приложения.
короткие серийные номера — поддержка протектором коротких серийных номеров (вида XXXX-XXXX-XXXX-XXXX) вместо длинных (размером в килобайт, два, или более) ключевых файлов. Иногда короткие серийные номера называют кодами активации, чтобы отличать их от длинных ключей.
деактивация ключей — функция деактивации позволяет пользователю перенести программу на другой компьютер и активировать ее заново.
блокировка ключей — данная функция позволяет блокировать «утекшие» ключи. Особенно это полезно, если не используется привязка к обордованию. Обычно заблокированные ключи (вернее, обычно используются их хэши) защиваются в защищаемое приложение при его обработке протектором.
данные о покупателе — хранение данных покупателя — имя и email в ключе.
дополнительные данные — возможность добавления каких-либо данных в ключе для дальнейшего использования в защищаемом приложнии.
поддержка различных режимов активации — данная функция удобна для организации различных режимов работы защищаемого приложения — к примеру, одно и то же приложение может быть активировано в режиме «Trial», в обычном режиме («Std»), и в режиме «Pro».
поддержка HWID — часто требуется привязать программу к определенному компьютеру, чтобы ограничить ее нелегальное распространение. В то же время идентификатор оборудования не должен зависеть от установленной системы или ее версии, а также от аппаратных компонентов, которые наиболее подвержены возможности их замены. Данная характеристика будет указывать наличие возможности привязки к оборудованию, а также (если есть данные) о том, на основе чего вычисляется HWID. По возможности будут указываться наиболее полные сведения об уровне поддержки HWID.
наличие сервера активации — сервер активации обычно предполагает, что для приложения требуется активация. Данная опция помогает ограничивать нелегальное распространение ПО. В случае, если ключевой файл активации формируется единожды для заданного имени пользователя и/или его email’а существует возможность утечки данного ключевого файла в широкий доступ. Необходимость активировать приложение через сервер активации каждый раз при его установке снижает опасность нелегального распространения ПО совместно со скомпрометированными ключевыми файлами.
генератор ключей — дает возможность генерировать ключи для активации приложения в автоматическом режиме. Обычно это требуется для генерации ключей/серийников/кодов активации при продаже ПО через регистраторов. При этом генератор ключей располагается на вашем сайте и вызывается регистратором при осуществлении продажи ПО. Генератор ключей может быть приложением Win32, Linux программой, или может быть реализован на языках типа PHP. Последний вариант наиболее предпочтителен, так как не накладывает никаких ограничений на тип хостинга, на котором он будет располагаться.
поддержка регистраторами — многие регистраторы предоставляют интегрированные в свою систему генераторы ключей. Данная возможность может пригодится, если по каки-либо причинам нет возможности или желания устанавливать генератор ключей на свой сервер.
ложные срабатывания (false positivies) — эта характеристика протектора говорит о том, как часто защищенные протектором приложения могут быть определены антивирусным ПО как зловредные. Большинство разработчиков систем защиты взаимодействуют с производителями антивирусов, и стараются уменьшить количество ложных срабатываний при использовании протектора, но протекторы, разработка/поддержка которых приостановлена или заброшена, могут давать много ложных срабатываний, что, несомненно, добавляет головной боли пользователю такого протектора.
капризность — изначально данная характеристика называлась «стабильность», но противоположная характеристика — «капризность» более точно отражает смысл данного параметра. Капризность протектора определяет, насколько часто он дает сбои — как часто защищаемые им приложения становятся неработоспособны, насколько долго нужно колдовать над ключами и опциями защиты, чтобы получить защищенное работоспособное приложение. Нулевая капризность означает гарантированный работоспособный результат в при любых сочетаниях опций защиты.
простота интеграции — данная характеристика отражает простоту встраивания защиты и системы активации в ваше приложение. Поддержка системы активации включает в себя API для отображения диалогов активации/деактивации, API для сохранения ключевой информации в системе пользователя, и, по возможности, различные функции управления различными аспектами подсистемы безопасности Windows.
поддержка инсталяторов — данная характеристика отражает простоту встраивания системы активации приложения в инсталятор продукта. В некоторых случаях бывает удобно для конечных пользователей встраивать активацию приложения в инсталятор продукта, особенно если лицензии на использование приложения продаются пачками на 10-50-100-1000000 допустимых активаций. В подобных случаях особенно необходима бывает возможность silent-установки и silent-активации по заданным в командной строке параметрам.
Сравнение стоимости и актуальности версий
Характеристик, по которым хочется произвести сравнение, набралось довольно много, поэтому сравнение будет производить в несколько этапов.
Для начала узнаем стоимость каждого из продуктов, актуальную на текущий момент версию (если она указана), и дату последнего обновления, чтобы оценить «живость» протектора.
Почти все протекторы предлагаются в различных конфигурациях, поэтому по возможности будут приведены все варианты, а в таблицах сравнения будет помечаться, что какая-либо функция доступна только в определенной конфигурации/редакции.
Также, цена будет указываться не для отдельно покупаемого продукта и/или компонента, а с учетом скидки, которые некоторые производители дают при покупке нескольких компонентов одновременно (если такая возможность существует и я смог ее найти).
Различные цены для индивидуального разработчика и для компаний будут обозначены буквами P и C соответственно, если нет единой цены.
Цены для Lite редакций и подобных облегченных версий я не стал приводить, так как в большинстве своем они мало на что пригодны и обычно требуют слишком большого объема работ по допиливанию до приемлемого состояния.
ExeCryptor выбыл из сравнения, так как обнаруженная на сайте дата обновления демки — 2006 год — показала, что этот протектор может представлять интерес только для историков IT.
PELock тоже было решено не рассматривать дальше, так как последнее обновление было два года назад; поддержка x64 похоже отсутствует, в списке поддерживаемых систем нет Windows 7/8/8.1.
IntelliProtector и LimeLM выбыли из сравнения, так как они представляют собой не продукты, которые можно купить один раз и пользоваться до пенсии (если, конечно, не интересны обновленные версии), а сервисы по активации приложений с помесячной оплатой и ограничениями по количеству продуктов и числу активаци, в зависимости от выбранного тарифного плана.
Было решено исключить из рассмотрения Safengine — протектор производится китайцами, и помимо раздражающих всплывающих окошек на сайте на китайском языке, я предположил потенциальные проблемы с поиском информации по нему. В итоге я все же хотел дать китайцам шанс, тем более, что кроме собственно протектора, производитель предлагает и решение для управления лицензиями, но справка на китайском языке в скачанной демке не оставила мне выбора.
По протектору SoftwarePassport я не смог найти цен и ссылок на покупку; в сети нашел информацию, что продажи приостановлены с середины лета 2013 года. Возможно, что SoftwarePassport предоставляется бесплатно при использовании регистраторов, принадлежащих Digital River: RegNow, ShareIt, RegSoft, eSellerate, SWREG, MyCommerse. Но данное предположение не основано на каких-либо известных фактах, поэтому SoftwarePassport также исключается из обзора (в данный момент я ожидаю коментариев от представителя Digital River, и, возможно, по данному протектору вскоре появятся дополнения).
- не удалось найти информацию по ценам;
- для получения триала нужно заполнить форму и ждать, пока его вышлют (или вышлют ссылку на скачивание);
- не удалось найти информацию о дате выпуска последней версии;
- был неудачный опыт использования продукта, защищеного StarForce’ом — попросили установить игру, при установке выяснилось, что она защищена StarForce’ом и устанавливает драйвер, который работает в XP и не работает в Windows 7. Возможно, сейчас ситуация стала лучше, но вообще в интернете нашлось много жалоб на данный протектор.
Также в обзор я вообще не включил Dyamar protector — похоже, он давно умер, и на сайте нет уже никаких упоминаний о нем; и XHEO/DeployLX — данный протектор защищает только .Net приложения.
Результаты первичного обследования
По результатам предварительного анализа можно сказать, что в общем и целом цены на протекторы держатся примерно на одном уровне. Если есть желание сэкономить и не требуется поддержка x64, то некоторые производители предоставляют такую возможность.
Также актуальность версий у протекторов, которые прошли во второй тур, примерно на уровне. Исключение составляет, пожалуй, лишь VMProtect. По слухам, его автор вовсю пилит версию 3 с новыми фичами; и хотя версия протектора сравнительно давно не обновлялась, автор им занимается, отвечает на запросы довольно оперативно. Если судить по датам выпуска предыдущих версий, этой весной стоит ждать очередного обновления.
Поддержка методов и технологий защиты
Детальное сравнение протекторов начнем со сравнения их основных характеристик — поддерживаемых технологий защиты кода и методов противостояния взломщикам.
Символом ‘-‘ я буду отмечать, что технология не поддерживается, сиволом ‘+’ — что технология поддерживается в базовой комплектации, и символом ‘$’ будет отмечаться то, что технология поддерживается в какой-либо расширенной редакции, доступной за дополнительную плату.
Символом ‘?’ я буду отмечать, что не нашел сведений о поддержке данной технологии (но не факт, что она отсутствует).
В колонке «Защита импорта» в скобочках проставляется защита entry point.
В колонке «Защита импорта» в скобочках проставляется защита entry point и/или дополнительное сокрытие используемых функций API.
Таблица 2. Поддержка методов и технологий защиты
| Протектор | Мутация кода | Виртуализация | Антиотладка | Обнаружение VM | Защита памяти | Проверка целостности | Защита импорта | Защита ресурсов | Dll boxing |
|---|---|---|---|---|---|---|---|---|---|
| ASProtect | — | — | + | — | + | + | + (+) | + | ? |
| DotFix NiceProtect | + | + | + | ? | ? | ? | ? | ? | ? |
| Enigma Protector | ? | + | + | + | ? | + | + (+) | + | + |
| Obsidium | — | + | + | + | + | + | + | ? | ? |
| Oreans Themida / WinLicense | + | + | + | + | + | + | — (+) | + | + |
| PC GUARD | ? | ? | + | + | + | + | + | + | — |
| Setisoft Private exe Protector | — | — | + | — | + | — | — | Опция «краденые ресурсы»? | — |
| SoftwareKey Protection PLUS | + | + | + | +, включая гипервизоры Hyper-V и подобные | + | + | — | + | — |
| VMProtect | + | + | + | + | + | + | + (+) | + (выборочно) | $ (Ultimate) |
Символом ‘*’ в следующей таблице я буду отмечать, что размер приложения увеличивается после обработки протектором, но более точных сведений об этом нет. Цифра будет обозначать примерное увеличение размера исполняемого файла.
Таблица 3. Размер, упаковка, поддержка различных систем
| Протектор | Размер | Упаковка | Шифрование | Поддержка x64 | Поддержка .NET, Linux, Mac |
Консольные утилиты |
|---|---|---|---|---|---|---|
| ASProtect | * | + | + | $ | — | + |
| DotFix NiceProtect | * | + | + | ? | ? | + |
| Enigma Protector | * | + | + | $ | .NET | + |
| Obsidium | * | + | + | $ | .NET | + |
| Oreans Themida / WinLicense | * | + | ? | $ | .NET | SDK |
| PC GUARD | * | ? | + | $ | $ (PC GUARD FOR .NET) | — |
| Setisoft Private exe Protector | * (опции «оставить размер» и «увеличить размер»?) |
см. «Размер» | + (как заявлено) | + | — | — |
| SoftwareKey Protection PLUS | незначителльное увеличение | + | + | — | — | + |
| VMProtect | 2 | + | + | + | ? | $ (Ultimate) |
Таблица 4. Поддержка активации и лицензирования
| Протектор | Короткие серийные номера | Деактивация ключей | Блокировка ключей | Данные о покупателе | Дополнительные данные | Поддержка различных режимов активации | Поддержка HWID |
|---|---|---|---|---|---|---|---|
| ASProtect | + | ? | + | ? | ? | до 15 | гибко настраивается |
| DotFix NiceProtect | — | — | — | — | — | — | — |
| Enigma Protector | — | ? | + | + | — | + | гибко настраивается |
| Obsidium | + | ? | ? | ? | ? | + | гибко настраивается |
| Oreans Themida / WinLicense | ? | ? | Есть, также бан по HWID | + | + | + | Есть |
| PC GUARD | + (нет длинных) | — | + | — | + (16 feature-флагов) | Демо режим с настраиваемыми ограничениями | Machine locking |
| Setisoft Private exe Protector | ? | ? | + | ? | — | Триал режим с настраиваемыми ограничениями | + |
| SoftwareKey Protection PLUS | + | — | ? | ? | ? | Trial, rental | + |
| VMProtect | + (коды активации) | + | + | + | до 255 байт | Mod’ы и пользовательские данные | Есть |
Таблица 5. Поддержка активации и лицензирования — Продолжение — Серверная часть
| Протектор | Сервер активации | Генератор ключей | Поддержка регистраторами |
|---|---|---|---|
| ASProtect | — | Win32/Linux | — |
| DotFix NiceProtect | — | — | — |
| Enigma Protector | Offline, Online ? | Win32/Linux | — |
| Obsidium | Нет, есть SDK Win/Linux | Нет, есть SDK Win/Linux | — |
| Oreans Themida / WinLicense | Offline: WinLicense ($); online: Win32 SDK | Win32 SDK | — |
| PC GUARD | Web ASP.NET | Web ASP.NET | — |
| Setisoft Private exe Protector | Не понятно | Не понятно | — |
| SoftwareKey Protection PLUS | $ (SOLO server) | + | — |
| VMProtect | $ (PHP WebLM) | Offline; $ (WebLM) | payProGlobal |
Таблица 6. Субъективные критерии
| Протектор | Ложные срабатывания | Капризность | Простота интеграции | Поддержка инсталляторов |
|---|---|---|---|---|
| ASProtect | ? | ? | ± ? | — |
| DotFix NiceProtect | ? | ? | ? | — |
| Enigma Protector | ? | ? | Есть встроенная поддержка активации, диалоги, напоминания | — |
| Obsidium | нет | 0 | Есть встроенная поддержка активации, диалоги, напоминания | — |
| Oreans Themida / WinLicense | ? | ? | Есть встроенная поддержка активации, диалоги, напоминания | — |
| PC GUARD | ? | ? | Есть встроенная поддержка активации, диалоги, напоминания | — |
| Setisoft Private exe Protector | ? | ? | Есть некоторая встроенная поддержка активации, диалог | |
| SoftwareKey Protection PLUS | нет | 0 | ± | — |
| VMProtect | нет; активно взаимодействуют с антивирусными компаниями | 0 | Сложно; полная поддержка доступна при использовании стороннего ПО для версии Ultimate | Сложно; полная поддержка интеграции с InnoSetup доступна при использовании стороннего ПО для версии Ultimate |
Небольшой субъективный обзор
Отмазка aka disclaimer
Информация, представленная в таблицах сравнения выше, не всегда была получена в процессе глубокого исследования или использования рассматриваемых протекторов, большую часть ее я получил, изучая сведения, опубликованные на сайте производителя протектора; также некоторое впечатление и часть иноформации я получил, запуская демки протекторов, если их можно было скачать. Так что все представленные сведения я рекомендую рассматривать с некоторой долей скепсиса.
Также я не могу вам обещать, что заявленая поддержка той или иной функции защиты (или сопутствующей функции) отвечает всем предъявляемым к ней требованиям. Тем более я не буду ничего говорить о качестве реализации той или иной функции, а также пытаться сравнивать их реальные технические характеристики и делать выводы о качестве их реализации.
ASProtect
Отечественная разработка.
Достоинства: эмуляция системных функций, защита импорта, защита точки входа.
Также вроде есть встроенная система активации, но поверхностный осмотр мало что подсказал, обнаружилась только опция подключения кастомного UI.
Популярен среди наших соотечественников, так как раньше распространялся среди русскоязычных шароварщиков со значительной скидкой.
В данное время принадлежит Star Force, и, похоже, находится в фазе стагнации, вроде жив, но апдейтится только по особым случаям вроде выхода новой версии Windows. Саппорт также не слишком отзывчивый. Ходят слухи, что к нему существуют универсальные кейгены.
DotFix NiceProtect
Малоизвестный в ру-нете протектор с небольшим количеством функций, тем не менее предлагающий опции мутации кода и виртуализации.
Недостатки: из UI есть только два диалога (сообщения) — стартап сообщение о демо-версии и сообщение об обнаруженом отладчике; не обнаружено никаких признаков серийных ключей и подсистемы лицензирования.
В дистрибутиве обнаружен текст лицензии на русском языке, что намекает на потенциально возможную русскоязычную поддержку.
Похоже что это просто обычный пакер с защитой от отладки. Неясно, как организовывать продажу ПО при использовании данного протектора.
Enigma Protector
Достоинства: поверхностный обзор показал очень богатый набор функций, пожалуй, наиболее богатый среди всех исследованных протекторов; есть защита импорта, эмуляция и перенаправление (redirect, опция предназначена, видимо, для более полного сокрытия используемых функций) функций WinAPI; богатейший набор различных проверок (Check-up).
Явных недостатков поверхностное исследование не выявило, что делает этот протектор, в купе с приемлемой ценой на раздельные x86/x64 версии, одним из главных претендентов на победу.
Obsidium
Достоинства – возможность автоматизации защиты и интеграция со средствами разработки (post-build step); защита .NET приложений; невысокая цена. Также удобно, что в протектор встроена система активации и управление хранением ключевой информации на компьютере пользователя; гибкость конфигурации — можно сэкономить, купив только x86 версию.
Недостатки: небольшое количество функций защиты.
UPD1: В коментариях ниже подсказали, что виртуализация кода есть, и управляется маркерами, которые нужно вручную расставлять в коде.
Автора можно найти в LinkedIn, он отвечает на вопросы там в течении нескольких дней, предлагая перенести общение в почту.
Oreans Themida/WinLicense
Неплохой протектор с набором опций немного выше среднего, за дополнительные деньги доступен сервер лицензирования (WinLicense), что упрощает продажу ПО, защищенного данным протектором.
К недостаткам можно отнести высокую цену (к тому же в евро), если покупать полный комплект предлагаемого ПО. Также функция Dll boxing’а предлагается, насколько я понял, в виде отдельного пакета/приложения, что еще больше увеличивает цену.
Из достоинств можно отметить, что Dll boxing можно применять не только собственно для dll/ocx и других исполняемых файлов, но и файлам контента, например видео.
PC GUARD
Малоизвестный протектор, но обладает довольно богатым набором опций.
Предлагает несколько вариантов связки защиты/лицензирования (как я понял, в связке с предлагаемыми отдельно серверами активации).
Недостаток — довольно большая цена, если приобретать полный комплект ПО.
Setisoft Private exe Protector
Обладает спартанским набором функций, что делает его очень похожим на «DotFix NiceProtect»; тем не менее обладает некоторым зачатками системы лицензирования
Цена на протектор довольно гуманна, есть возможность прикупить и исходные тексты протектора (но уже по не совсем гуманной цене).
При запуске зачем-то запрашивает повышение привилегий, но возможно, программы, им защищенные, не обладают этим недостатком.
SoftwareKey Protection PLUS
Отзыв от пользователя SK Protection PLUS
Не особо известный в ру-нете, но довольно хороший протектор. Малое количество взломов ПО, которое его использует. Очень хорошая система онлайн-активации SOLO Server позволяет полностью автоматизировать процесс, включая возможность использования получения ключей активации для компьютеров не находящихся в сети и удаленного включения/отключения лицензий.
Основными достоинствами является очень хорошая защита от взломов протектора, большое количество возможностей самого протектора. Так же не маловажным может оказаться поддержка Active-X компонентов и возможность создания сетевых лицензий с собственным сервером активации.
Недостатки – мало известен в русскоязычном коммунити, нет поддержки на русском языке. Высокая цена.
Примечание: скриншотов для SoftwareKey Protection PLUS нет, так как без запроса демку скачать не удалось.
VMProtect
Отечественный протектор, автор которого регулярно появляется на RSDN.RU в разделе «Shareware» и оперативно отвечает на вопросы как там, так и в личной пересписке.
Протектор обладает джентельменским набором опций, при покупке версии Ultimate появляется возможность приобрести сервер управления лицензиями с генератором ключей WebLM с 50% скидкой (за $49.9).
Достоинства: сервер лицензирования WebLM написан на PHP, очень просто устанавливается при помощи мастера и скорее всего, вызовет минимальное количество проблем при установке. Для нормальной работы сервера WebLM нужна библиотека PHP для работы с большими числами, которой у меня на хостинге не было, но хостер без вопросов добавил ее поддержку на следующий день после запроса. Также, насколько я знаю, генератор ключей вскоре должен быть переписан с использованием функций OpenSSL, так что проблемы с хостингом сервера лицензирования стремятся к 0.
Сервер активаций WebLM настраивается на использование различных регистриторов, есть возможность ограничивать доступ к генератору ключей по спискам IP-адресовю
Ознакомиться с возможностями WebLM можно на сайте производителя протектора (логин/пароль: admin/admin).
Есть возможность создавать различные версии лицензии (называются модами), также есть удобная возможность к каждому варианту лицензии добавлять пользовательские данные размером до 255 байт.
Автор активно взаимодействует с производителями антивирусов — в процессе поиска информации по протектору он был неоднократно замечен на форумах поддержки различных антивирусов.
Из недостатков можно отметить отсутствие функций для упрощения встраивания лицензирования в приложения, но данная проблема решается сторонним ПО, которое попутно решает и некоторые другие вопросы, а также поддерживает встраивание активации в инсталяторы InnoSetup и поддерживает silent установки.
Пожалуй, все
Целью данного обзора было помочь вам выбрать два-три протектора для дальнейшего детального исследования при выборе способа защиты для своего приложения, и, надеюсь, данная статья поможет сделать этот выбор и сэкономит вам некоторое время.