Асимметричная криптография при лицензировании подписочного ПО на практическом примере

    Речь пойдет о том, как устроена защита десктопных программ, а также о типичной системе лицензирования и активации ключей. Активация применяется практически в любом коммерческом ПО, и то, на каких принципах она строится, довольно интересно, поэтому я решил написать эту статью.

    В статье читайте:
    • Про «лицензию», «активацию», «хэш-функции», «цифровую подпись», «асимметричную криптографию» и (вкратце) про RSA и DSA, без формул и математики.
    • Чем механизм подписки (subscription) отличается от традиционного лицензирования.
    • Применение описанных принципов на примере EXE-протектора VMProtect.
    Статья сугубо практическая, т.к. эти же самые идеи мы применяем в нашем стартапе — платформе RentSoft (мы рассказывали о нем в предыдущей статье). Фактически, я описываю, что находится у нас «под капотом», а также сообщаю о тех «граблях», на которые мы в свое время наступили. Ближе к концу статьи будет практическая демонстрация — иллюстрация механизма взаимодействия нашей платформы с протектором EXE-файлов VMProtect, нашим партнером.

    Итак, приступим.

    Как подписочная программа работает с сервером лицензий


    Т.к. мы продвигаем идею ежемесячных микросписаний за использование коммерческого ПО (вместо традиционной продажи дорогих «разовых» ключей), для нас представляет интерес то, как программа должна взаимодействовать с сервером лицензий на периодической основе, чтобы ее нельзя было «обмануть».
    Подписка — это возможность работы программы за ежемесячную абонентскую плату. Когда оплата не поступает, программа блокируется — и наоборот, если деньги пришли, она продолжает работать.
    Естественно, продукт должен как-то определять, может ли он запускаться в каждый конкретный момент времени или нет (заблокировалась ли подписка из-за недостатка средств на счете). Для этого он использует доступ в интернет и регулярные (например, раз в 5 дней) обращения к специальному серверу лицензий.

    Существует один ненадежный способ определения, разрешено ли программе работать. Она может спросить сервер лицензий: «Вот ключ, который ввел в меня пользователь. Я могу с ним сейчас работать?». Сервер лицензий ответит — «Да, можешь» или «Нет, подписка блокирована». Конечно, этот способ плох тем, что позволяет злоумышленнику легко подделать ответ сервера, к тому же программе потребуется доступ в интернет при каждом своем запуске (ведь она не может легко сохранить статус «могу работать» без того, чтобы это место было обнаружено злоумышленником).

    Чтобы обеспечить безопасность, применяют другую схему, когда сервер лицензий выдает не ответ «да/нет», а некоторый квант информации — как бы временное разрешение на работу в течение небольшого срока (те же самые 5 дней), и программа при принятии решения опирается уже на этот квант.

    Но чтобы понять всю схему, проведем небольшой экскурс в традиционные способы работы с «бессрочными» ключами и механизмы асимметричной криптографии.

    Что такое активация ключа?


    Традиционно при электронной покупке той или иной программы пользователю высылают сгенерированный специально для него ключ (или лицензию, или серийный номер — кто как называет). Пользователь затем вводит этот ключ в запущенный продукт и, в конечном итоге, активирует его (заставляет работать).

    Как программа, приняв ключ, определяет, что он достоверен? Для этого существует два основных способа:
    1. Можно проверить, что ключ был сгенерирован по специальному алгоритму, известному программе, и, если это не так, блокировать работу. Так поступали в старину, когда еще не было всеобщей интернетизации. Естественно, в данном случае ключ может быть украден и в дальнейшем использован на другом компьютере, так что данный способ ненадежен.
    2. Программа может попросить для активации «обратной связи» у своего разработчика: пользователь сообщит разработчику ключ и какую-то дополнительную информацию о себе, а разработчик на основе этих сведений поймет, разрешить ли программе работать (активировать ее или нет).
    Ясно, что второй способ лучше защищен от кражи ключа: ведь разработчик может контролировать количество активаций. Наличие «обратной связи» в этом случае обязательно: пользователь должен как-то сообщить разработчику свой ключ и другую информацию о себе, а разработчик — передать разрешение активации. Раньше, когда интернет еще не был столь распространен, все делалось по телефону: пользователь звонил в службу поддержки, диктовал свой ключ и, например, идентификатор оборудования своего компьютера. Взамен ему сообщали код активации — некоторую последовательность символов, которая, будучи введена в программу вместе с ключом, активирует ее.

    Обратите внимание, что в данном примере в качестве «дополнительной информации о себе» использовался идентификатор оборудования — хэш-код, более-менее уникально идентифицирующий машину пользователя. У того, кто ключ украдет, этот хэш-код будет уже другим, так что, позвонив в службу поддержки, он ничего не добьется — там поймут, что производится попытка повторной активации.

    Активация через интернет


    С приходом интернета в каждый дом необходимость в телефонных звонках отпала: теперь программа сама «звонит» на так называемый сервер лицензий разработчика, «диктует» ему ключ и код оборудования, а взамен ей «сообщают» код активации, которым сама себя и активирует. По этой схеме сейчас работает подавляющее большинство программ, и она довольно надежна.

    В общем, у нас образовались следующие сущности:
    1. Ключ: то, что выдается пользователю при покупке.
    2. Идентификатор оборудования: некоторое число, с той или иной степенью уникальности характеризующая компьютер пользователя (на разных компьютерах оно будет разным).
    3. Код активации: закодированное «разрешение» программе запуститься, если пользователь имеет «на руках» определенный ключ и определенный идентификатор оборудования.
    4. Сервер лицензий: некоторый сервер в интернете, подконтрольный разработчику и умеющий по паре «ключ» + «идентификатор оборудования» возвращать пользователю код активации.
    Очень важно понимать, чем Ключ отличается от Кода активации. Они связаны между собой через Идентификатор оборудования, что обеспечивает гарантию невозможности использования одного и того же Ключа одновременно на разных машинах.

    Открытый и закрытый ключ: асимметричная цифровая подпись


    Казалось бы, можно вычислять значение activationCode = md5(key + hardwareID): в этом случае и сервер лицензии сможет его сгенерировать, и программа у клиента — проверить правильность.

    Однако здесь кроется серьезная опасность: раз сервер лицензий может вычислить это значение, то и злоумышленник — тоже. А значит, злоумышленник может сделать свой собственный сервер лицензий, «подставить» его вместо исходного и… получить неограниченный контроль над программой. Что же делать?

    Говорят, что у каждой сложной задачи есть одно простое, логичное, легкое для понимания… неправильное решение. В данном случае таким неправильным решением была бы формула

    activationCode = md5(key + hardwareID + salt)

    где salt — некоторая «секретная» строка, известная только серверу лицензий разработчика.
    Вообще, значение S = md5(X + salt) называют «цифровой подписью данных X с солью salt». Проверить цифровую подпись S означает снова вычислить md5(X + salt), уже на другой стороне, и сравнить результат с S: если совпало, то подпись верна, если нет — то имеет место подделка.
    К сожалению, такой трюк с «солью» не пройдет, потому что программа у клиента тоже должна иметь возможность вычислить значение md5(key + hardwareID + salt), а значит, salt должен быть «вшит» в нее изначально. Конечно же, злоумышленник сможет дизассемблировать продукт и найти в нем salt, после чего организовать поддельный сервер лицензий. Мы вернулись к тому же, с чего начинали.

    Но решение есть, и называется оно DSA. Оказывается, существует такой алгоритм, который, грубо говоря, позволяет получать хэш-код activationCode при помощи одного значения salt0, а проверять «правильность» этого хэш-кода — уже с совершенно другим значением salt1. Значение salt0 нужно держать в секрете — оно хранится только на сервере лицензий, в то время как salt1 никакой ценности для злоумышленника не представляет — зная его, он все равно не сможет получить salt0 и вычислить правильные коды активации.

    Таким образом, сервер лицензий вычисляет цифровую подпись activationCode = DSA(X, salt0) и передает значение программе клиента, а программа — проверяет ее правильность при помощи алгоритма DSA_check(activationCode, X, salt1). В этом случае salt0 называют «закрытым ключом» (private key), а salt1 — «публичным ключом» (public key). «Публичным» ключ называется потому, что его можно хоть в газете напечатать — это не нанесет вред безопасности.
    Подробности про алгоритм цифровой подписи DSA и основанный на том же принципе алгоритм шифрования данных RSA можно почитать в Википедии на русском языке. Вкратце — принцип работы RSA основан на так называемой «проблеме факторизации» — сложности разложения больших чисел на множители. Действительно, имея два каких-нибудь 2000-значных простых числа X и Y, можно за микросекунду вычислить их 4000-значное произведение S = X * Y. Однако, имея это произведение S и не зная X или Y изначально, за время существования Вселенной невозможно восстановить исходные X и Y, из которых оно составлено. На качественном уровне можно считать, что для составления цифровой подписи DSA используются числа X и Y (закрытый ключ), а для проверки — общеизвестный S.

    Вернемся снова к подписке


    В самом начале мы говорили, что подписка — это просто более частое обращение к серверу лицензий, который возвращает все новые и новые коды активации, в то время как старые коды активации — устаревают. Для такого устаревания алгоритм создания кода активации должен быть более сложным: в коде как минимум «зашивают» даты начала и окончания срока его действия (начала — чтобы пользователь не переводил часы слишком уж назад).

    Работа «подписочной» программы с сервером лицензий выглядит следующим образом:
    1. Регулярно и в фоновом режиме программа делает попытку обращения к серверу лицензий, чтобы получить от него свежий код активации. На сервер передается ключ и идентификатор оборудования, упрощенно —
      GET /license_server?key=abcdef&hwid=1234
    2. Если попытка была неудачной, то ничего не происходит — никаких сообщений не выдается.
    3. В случае же удачи свежий код активации, выданный сервером, записывается в какое-нибудь постоянное хранилище (например, в Реестр) — все равно он не представляет интереса для злоумышленника, т.к. он не сможет его использовать у себя (код активации зависит от идентификатора оборудования, который будет у злоумышленника другим).
    4. Независимо от этого программа берет текущий код активации из постоянного хранилища и проверяет его цифровую подпись, используя ключ, идентификатор оборудования и открытый параметр salt1. Если код активации верен, то программа продолжает работать (возможно, попутно извлекая из кода какие-то необходимые данные — например, параметры шифрования кода виртуальной машины, как это делается в VMProtect).
    Теперь, даже если интернет недоступен в течение нескольких дней, программа все равно будет работать — она извлечет текущий код активации из постоянного хранилища. И только если доступа в интернет нет длительное время, она заблокируется.

    Т.е. при работе по подписке код активации запрашивается регулярно, а в случае работы «традиционной» схемы с активацией ключа — единоразово. В этом заключается техническое различие. Конечно, сервер лицензий должен работать надежно и выдерживать высокие нагрузки, поэтому у нас их две штуки в балансировке, написаны они на Java Netty — фреймворке для создания асинхронных веб-серверов, том самом, на который недавно перевел свой поиск Twitter. Но это уже тема для отдельной статьи.

    Пример создания подписочной версии вашей программы


    Выше была теория о том, как может работать сервер лицензий, обслуживающий запросы на проверку статуса подписок. Теперь немного коснемся практики и посмотрим, как разработчики VMProtect Software реализовали эту теорию при создании подписочной версии протектора VMProtect для нашей платформы RentSoft.

    Создание приложения HelloWorld и его MAP-файла


    Для начала создадим программу типа «Hello, world!», которую и будем защищать VMProtect-ом. Будем использовать MS Visual Studio 2010: создадим в ней новый проект типа «Win32 Application» и назовем его HelloWorld. Главный файл будет выглядеть примерно вот так:
    #include "stdafx.h"

    ATOM MyRegisterClass(HINSTANCE hInstance)
    { ... }

    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    { ... }
    ...
    Сразу переключим режим построения проекта на Release в Диспетчере конфигураций. После этого включим генерацию MAP-файла: он будет содержать адреса всех функций внутри EXE-файла, чтобы их смог потом найти VMProtect. Это делается в свойствах проекта, в русской версии путь такой: кликнуть правой кнопкой по имени проекта в Обозревателе решений, дальше выбрать Свойства конфигурации — Компоновщик — Отладка — Создавать файл сопоставления.

    Теперь нажмем F5 и убедимся, что проект откомпилировался и запустился. Мы получили в директории Release 2 файла: HelloWorld.exe и HelloWorld.map, с которыми и будем работать.



    Мастер регистрации продукта на сервере лицензий RentSoft


    Подписочная версия программы работает в тесной связи с сервером лицензий, который, собственно, и занимается проверкой статуса ключа и определением, может программа работать или нет. Сервер лицензий должен иметь информацию о продукте: например, закрытый ключ RSA-шифрования и другие параметры лицензирования, так что продукт нужно на нем зарегистрировать.

    Это довольно просто: по адресу http://rentsoft.ru/soft/add/ выбираем вариант «VMProtect RentSoft Edition (бесплатно для клиентов RentSoft)», вводим свой e-mail (подтверждать его, кстати, не потребуется) и попадаем в Мастер регистрации продукта. В нем мы вводим следующие данные:
    • Название продукта, краткое и подробное описание (можно использовать HTML).
    • Изображение коробки с продуктом (или его логотип).
    • Выбираем желаемую стоимость подписки в месяц — например, 79 рублей.
    После сохранения этой информации откроются следующие пункты мастера.



    Файл лицензии необходим для привязки защищаемой программы к продукту, который мы только что зарегистрировали на сервере лицензий. Сохраните его в директорию с исходным кодом проекта — в нашем случае рядом с HelloWorld.cpp.

    Запуск VMProtect для создания подписочной версии


    Далее запустите VMProtect RentSoft Edition (ссылка на его скачивание его инсталлятора приведена на следующем шаге мастера). Это протектор EXE-файлов, созданный нашими партнерами — компанией VMProtect Software. Откройте через Файл — Открыть EXE-файл проекта Release/HelloWorld.exe и установите параметры, как на скриншоте (главное — укажите путь к файлу лицензии проекта):



    Теперь перейдите на вкладку Процедуры для защиты и выберите на ней те процедуры и функции, которые хотите защитить VMProtect-ом (код этих процедур будет переведен в код виртуальной машины VMProtect и привязан к продукту, зарегистрированному ранее на сервере лицензий).


    В нашем случае мы указали 2 функции: MyRegisterClass и WndProc — именно их теперь хакер не сможет «взломать». Обратите внимание: нужно выбрать Тип компиляции «Ультра» (самый надежный), а также поставить флажок «Привязать к серийному номеру» в «Да». Старайтесь защищать те функции программы, которые некритичны к производительности, потому что виртуальная машина работает, естественно, медленнее, чем «родной» процессор. (Не забудьте после всех манипуляций сохранить файл проекта VMProtect: в нем содержатся все опции, которые вы выбрали, чтобы при следующей защите не нужно было их выбирать заново: Файл — Сохранить проект как...)
    Что будет, если злоумышленник все же сможет расшифровать код виртуальной машины VMProtect для какой-то защищенной программы (что крайне сложно само по себе — вспомните, сколько попыток было расшифровать, например, Skype, который тоже использует технологию виртуализации кода)? Это не даст ему доступа к другим программам: ведь для работы виртуальной машины требуется информация, содержащаяся в коде активации, а она для каждой программы — разная. Так что, не имея кода активации, выданного сервером лицензий, заставить программу работать физически невозможно. Подделать сервер лицензий тоже не получится — помните про технологию открытых/закрытых ключей?
    Наконец, выберем Проект — Компиляция и подождем несколько секунд. В результате рядом с HelloWorld.exe появится файл HelloWorld.vmp.exe — его защищенная версия. Именно этот файл и является «подписочной» версией вашего продукта.

    Проверяем, что получилось


    Если теперь запустить HelloWorld.vmp.exe, мы увидим вот что:


    Т.е. программа при первом запуске просит пользователя ввести «код подписки», который он получил на одной из витрин RentSoft, когда подключил себе ваш продукт. Естественно, сервер лицензий RentSoft в курсе всех активных кодов подписки, что позволяет ему обрабатывать запросы от программы и проверять код, введенный пользователем.

    Теперь нужно ввести код подписки. Где его взять для проверки? Мы могли бы здесь отправить читателя на витрину продукта и сказать «подпишитесь на продукт — получите код подписки», но можно поступить проще. Мастер регистрации продукта RentSoft, в котором мы только что находились, позволяет создавать тестовые подписки на сервере лицензий. Т.е. все, что вам требуется, — это нажать кнопку Создать в форме:


    В итоге вы получите тестовый код подписки, который останется ввести в окно активации программы:



    После этого программа запустится и больше не будет ничего спрашивать у пользователя до тех пор, пока на его счете имеются деньги (т.е. пока подписка активна).

    Предположим, денег на счете для продления нет...


    Что произойдет, когда у пользователя кончатся деньги и подписка заблокируется? Не обязательно ждать месяц, чтобы это увидеть: можно воспользоваться все той же формой работы с тестовыми подписками, которая теперь примет вот такой вид:


    Заблокируйте тестовую подписку, после чего перезапустите программу дважды: во второй раз она заблокируется с выводом сообщения о недостатке средств на счете. (Почему дважды? Считайте, вам дается последний шанс воспользоваться продуктом перед тем, как он заблокируется.)

    Возможно, вы спросите, что будет, если подписку заблокировать, а интернет — отключить, и уже после этого запустить программу. Тогда программа, естественно, не узнает, что она не может функционировать, и будет работать… но только следующие 5 дней. Через 5 дней программа потребует обязательный доступ в интернет и откажется запускаться, если связи не будет: истечет так называемый «период толерантности». Так что пользователь все равно должен будет пополнить свой счет, рано или поздно.

    Что касается автоматической разблокировки при поступлении средств на счет, то вы можете проверить, как это работает, нажав кнопку «Включить» и перезапустив программу. Если связь с интернетом имеется, программа немедленно продолжит работу.

    В заключение — про наши каналы продаж


    Хорошая защита без высоких продаж имеет, разве что, академический интерес. Мы в RentSoft это понимаем, поэтому предоставляем разработчикам десктопного софта не только механизм подписочного лицензирования, но также и каналы продаж — витрины полусотни крупных интернет-провайдеров с общей абонентской базой более 4 млн человек. К слову, когда мы опубликовали предыдущую статью, их было на 2 меньше: за неделю добавился крупный московский провайдер NetByNet и питерский InterZet (ссылки ведут на наши витрины у них). В среднем у нас еженедельно прибывают по 2-3 провайдера, которые подключаются к нам полностью самостоятельно — мы уже не успеваем их модерировать.

    Главное преимущество продажи по схеме ежемесячной подписки через интернет-провайдеров в том, что абоненты и так уже ежемесячно приносят провайдеру 400-500 рублей оплаты за интернет. Мы умеем списывать оплату за ПО (которое в этом случае выглядит, как дополнительная услуга провайдера) прямо со счета абонента. Поэтому, когда пользователь подключает вашу программу на сайте провайдера или в его личном кабинете, он оплачивает ее в том же чеке, которым платит за интернет! Одним словом, это очень эффективный канал.

    Так что, если вы разрабатываете десктопный софт, но продаете его в основном на Запад, мы бесплатно предоставляем вам инструменты, чтобы попробовать продавать в России по схеме ежемесячной подписки. Мы, как любая платежная система, работаем за комиссию с совершенных пользователями транзакций, но, т.к. вы сами определяете ежемесячную цену на свой продукт, это не должно являться проблемой.

    Присоединяйтесь!
    Поделиться публикацией
    Комментарии 97
      +4
      При установке в виртуализированной среде можно получить одинаковые hardwareid для разных компьютеров?
        0
        Зависит, наверное, от виртуальной машины. Вы о какой говорите? VMWare, VirtualPC?
          0
          Ни о какой конкретной, вопрос на уровне теории. Привязка к оборудованию + виртуализация оборудования
          =?
          Если для разных ответы разные, то можно весь список?
            0
            Ну смотрите, вот ниже в комментариях дали параметры того, что входит в Hardware ID. Если в какой-то виртуальной машине все параметры останутся неизменными при переносе на другое железо, то и Hardware ID останется неизменным. Виртуальная машина тут ничем не отличается от физической.
        0
        не очень сложно
          0
          Можно, для этого достаточно слегка подпатчить само приложение. Вообще принципиально нового в подходе ничего не заметил. Распаковка vmp ведёт к падению всей защиты.
            +1
            Совершенно верно, 100%-надежного в мире ничего не существует (в том числе защиты). Есть только техники, которые чрезвычайно затрудняют взлом (настолько, что Skype в полной мере до сих пор не взломан), две из таких техник — виртуализация и асимметричная криптография. Но не очень понятно, как подмена CPUID связана со степенью защиты.
              0
              Зачем же Вы так сразу, что Skype не взломан, тут правильнее говорить, что у Вас нет информации об этом. Никто и не говорит только о подмене CPUID информации. Вообще, один из стандартных методов обхода привязки к железу — подмена информации о железе или уже готового HWID, от которого зависит ключ активации, после чего известную пару HWID\SN вшивают в саму защите. Вашу статью я прочитал по диагонали, никаких новых методик защиты не встретил. Встаёт вопрос — к чему всё это?
                0
                SN у вас протухнет через пару дней, а подделка HWID вам вообще ничего не даст. Встает вопрос — к чему вы это написали?
                  0
                  Выше речь шла о использовании одной пары HWID\SN на разных системах, я привёл достаточно очевидный вариант этого. Этот вариант действует и на других системах защиты. Встаёт вопрос, а что же нового несёт эта защита? В сравнении с WinLicense, Armadillo, etc?
                    0
                    С точки зрения крякера:
                    Во-первых: cервер подписки выдает вам ограниченный по времени серийник, который протухнет через пару дней.
                    Во-вторых: HWID это вы не сможете подменить «стандартными» средствами по причине того, что не все компоненты HWID получаются через API.
                    В-третьих: открытый ключ не патчится также просто как в других защитах.

                    С точки зрения вендора:
                    Система позволяет буквально в 2 клика начать продавать свою программу с помощью описанного в статье сервиса.

                    Какие вам еще нужны аргументы?
                      0
                      Я вот не пойму, вы привели 3 аргументы с точки зрения исследователя, и все 3 — пускание пыли в глаза. Давайте по этим трём пунктам сравним с WL.
                      Первое — не совсем понял чем отличается от обычной онлайн активации, с виду это она же, названная словами «серийник», «протухнет».
                      Второе — и чем получение не через winapi затрудняет подмену? Ну и в сравнении c WL, там получение HWID идёт с помощью драйвера, что на порядок безопаснее, чем в ring-3.
                      Третье — и в чём проблема патча ключа со снятым vmp (а я так понимаю реклама тут не vmp, а некой новой системы защиты от RentSoft).

                      С точки зрения вендора да, тут предоставляется некий онлайн сервис от авторов. Я так понимаю это единственное существенно отличие этой системы от иных с точки зрения менеджера лицензий?
                        0
                        Если вы будете читать статьи и коменты к ним по диагонали, то на вас придется убить очень много времени чтобы по несколько раз повторять одно и тоже.
                        Первое — не совсем понял чем отличается от обычной онлайн активации, с виду это она же, названная словами «серийник», «протухнет».

                        Сервер активации выдает ВРЕМЕННЫЙ серийник (с ограничением времени жизни).
                        Второе — и чем получение не через winapi затрудняет подмену?

                        Тем что CPUID этом машинная инструкция и вы устанете искать её в

                        завиртуализированном коде.

                          –1
                          Вы опять пытаетесь обмануть слабопоготволенный люд умными словами. Выполнение CPUID перехватывается ещё проще, чем вызов winapi. Приведу пруф: deroko.phearless.org/cpuid_break.rar.
                          И снова Вы говорите о временных серийниках. Поддержка временных серийников есть почти во всех менеджерах лицензий. Я не пойму, Вы вообще способны признать, что сделали по некоторым пунктам велосипед? С пеной у рта пытаетесь пропихнуть некоторые фишки, которые успели мхом обрасти за свои. Чего ради? Хотите дезориентировать честный народ с хабра и нажиться на нём?
                            +1
                            Если у вас так все просто и замечательно, то почему мы до сих пор не видим от вас реальных примеров замены открытого ключа/подмены HWID в программах под VMProtect? Может быть уже пора перейти от теории к практике, темболее судя по вашим словам это вообще не проблема?
                              0
                              А почему Вы их должны увидеть? Как в мире реинженеринга проверяется стойкость защиты? Выкладывается защищенный софт и назначается гонорар за его взлом. Собственно это — единственный показатель хорошей защиты. На Вашем сайте такого предложения не нашёл.
                                0
                                Будем считать спор завершённым. Если что — объявляйте на сайте открытый конкурс по Вашей защите (RentSoft). Выводы таковы: не ломаемых защит нет, действительно новое в этой защите — авторский сервер лицензий.
                                  0
                                  Первая часть вывода, очевидно, верная: неломаемых в теории защит и правда не бывает (но бывают неломаемые на практике).

                                  А вторая честь — не совсем: новое в RentSoft вовсе не схема защиты, новое — это сама схема продаж, схема ежемесячной абонентской платы. (На самом деле, она тоже сама по себе не новая, но то, как мы для этого массово используем счета личных кабинетов интернет-провайдеров и насколько ко всему этому легко подключиться — новое.)
                                    0
                                    Достойный ответ. Это я и хотел услышать с самого начала беседы. Кстати, и на практике неломаемых защит нет, как показывает история. Сначала не ломаемой считали SF, при этом её ломали, пусть и не на паблике, потом xtreamprotector, его тоже раскурочили и и т.д.
                                    Иван, а почему Вы решили сотрудничать именно с drVano?
                          0
                          Ну и в сравнении c WL, там получение HWID идёт с помощью драйвера, что на порядок безопаснее, чем в ring-3.

                          Защита из ring-3 не должна ползать в ring0 — это скорее огромный минус WL чем плюс.
                          Третье — и в чём проблема патча ключа со снятым vmp (а я так понимаю реклама тут не vmp, а некой новой системы защиты от RentSoft).

                          У вас уже есть успешный опыт по патчу открытого ключа в программах с лицензированием VMProptect? Если да, то ссылки в студию.

                          С точки зрения вендора да, тут предоставляется некий онлайн сервис от авторов. Я так понимаю это единственное существенно отличие этой системы от иных с точки зрения менеджера лицензий?

                          Вот если бы вы не читали статью по диагонали, то увидели бы что RentSoft предоставляет еще и канал продаж среди своих партнеров + биллинг микроплатежей+удобное администрирование всего этого дела. Вендору одиночке (да и не только одинночке) наработать это все самостоятельно просто не реально.
                            0
                            >Защита из ring-3 не должна ползать в ring0
                            Вы ничего не путаете? Ваша голословность и попытки меня оскорбить (ниже) поражают. Пожалуйста, подтверждайте свои слова хоть чем-нибудь, кроме «чесслово» и ссылками на свой сомнительный авторитет.

                            >У вас уже есть успешный опыт по патчу открытого ключа в программах с лицензированием VMProptect? Если да, то ссылки в студию.
                            Есть широчайший опыт по патчу софта, накрытого vmp и его распаковки. Кучу таких примеров Вы можете найти опять же на форуме exelab (там же Вы найдёте людей, которые за деньги Вам декомипилируют вм). Вы хотите ссылок на релизы софта, накрытого vmp? Такое ощущение, что Вы сами не в курсе про это.
                            Вот пруфлинк на обсуждение одного из публичных инструментов для декомпиляции exelab.ru/f/index.php?action=vthread&forum=13&topic=15906&page=0

                            >канал продаж среди своих партнеров + биллинг микроплатежей+удобное администрирование всего этого дела
                            Да, это я заметил, собственно только это новшество я и заметил среди всего вышесказанного.
                              0
                              Вы ничего не путаете?

                              Основная ваша проблема состоит в том, что вы не оцениваете защиту с точки зрения конечного пользоватлея. Если на вашу программу будет постоянно орать UAC или антивируc при любой попытке пролезть в ring0, то вашу программу снесут в этот же день.
                              Есть широчайший опыт по патчу софта, накрытого vmp и его распаковки. Кучу таких примеров Вы можете найти опять же на форуме exelab (там же Вы найдёте людей, которые за деньги Вам декомипилируют вм).

                              У вас очень оригинальный стиль ведения диалога. Сначала вы говорите, что подменить открытый ключ не проблема, а теперь начинаете переводить стрелки на ваш любимый форум. В приличном обществе такие аргументы не канают.

                                0
                                Иван Юрьевич, ну чего Вы сразу так. Неужели антивирусы кричат на фимку, когда она грузит драйвер? Я пользовался софтом под wl и фимой, проблем не испытывал, а вот уровень защиты при наличии драйвера, как правило выше.
                                Да, я говорил, что подменить ключ не проблема. Если это проблема, то в чём она? В снятии вмп? Для Вас не секрет, что вмп декомпилируют, ссылка на инструмент есть выше, там же есть обсуждения. Если Вы считаете, что проблема в том, чтобы запатчить защиту без вмп — Вы так же крупно заблуждаетесь.
                                Вы всегда любили поспорить на тему полный ли шлак вмп, много истерик было по этому поводу. А вашу вм сначала декомпилили в привате, сейчас уже на паблике. Заканчивайте детский сад, Вань.
                                  0
                                  Ради интереса пошерстил сейчас запросы на взлом на вашем любимом форуме — насчитал как минимум 3 программы под VMProtect. По ним до сих пор нет никакой движухи. Какая-то у вас тут очередная нестыковочка.
                                    0
                                    Вы пытаетесь этим сказать, что вмпрот не декомпилируют или что? Я выше привёл ссылку на топик, да Вы её и сами наизусть знаете. Какое утверждение Вы сейчас отстаиваете?
                                      0
                                      Я вам уже давно предлагаю перейти от теории (есть декомпилятор и он какбе работает) к практике (берем этот декомпилятор, снимаем всю защиту и патчим открытый ключ), но судя по количеству невылеченных прог под вмпротом у вас и ваших сотрудников по цеху дальше теории дело так и не пошло.
                                        0
                                        Берите публичные версии пары защит — vmp и RentSoft, пакуйте ими калькулятор и назначайте гонорар в 5k$, коли Вы так уверены в себе и своей защите.
                                          0
                                          Я согласен — готовьте свои 5к, чтобы у нас был взаимный интерес.
                                            0
                                            Вы хотите поспорить лично со мной? Я и сам скажу, что защитой этой не занимаюсь. А вот публичный конкурс — вполне хорошее предложение, многие разработчики так делают. Думаю, vamit'у будет хороший толчок для дальнейшего развития декомпилятора)
                                              0
                                              Я смотрю что даже за деньги у вас дальше бла-бла-бла дело не идет :)) Слив защитан.
                                                0
                                                Постойте, о каком сливе Вы говорите? Я не вижу, чтобы Вы вложили у себя на сайте упакованное приложение и озвученный гонорар. Получается, что Вы испугались и начали идти в обратку? Или уверенность в защите сразу пропала?
                0
                VMProtect это вам не UPX и простой распаковкой он не снимается :))
                  0
                  AsProtect — не UPX и простой распаковкой не снимается, но это вовсе не означает, что он не снимается вообще, то же самое можно сказать и про vmp, к слову, его декомпиляция уже автоматизирована.
                  Странно, как Вы начали защищать vmp, Ваш ник на exelab не dermatolog?
                    0
                    Вы для начала определитесь снимается хоть что-то сложнее UPX-а распаковкой или нет :))
                      0
                      Сходу назову ExeCryptor, распаковывается он просто, а вот расчистка кода там на порядок сложнее, чем в vmp.
                      Вы не ответили на вопрос по поводу вашего ника, Вы и есть автор vmp?)
                        0
                        Да я имею непосредственное отношение к VMProtect Software. А вы, насколько я понял, очередной школьник с exelab?
                          0
                          Сразу обзываться… Вмпрот всегда славился хамами и кидалами (и это не моё мнение, меня эта контора слабо интересует, интересующимся предлагаю почитать forum.exelab.ru). А вообще неплохо ознакомиться с профайлом, прежде, чем писать такое;)
                            0
                            Ну судя по вашему уровню знаний вы совсем недавно занялись реверсингом, поэтому я не вижу ничего оскорбительного в том, что вещи были названы своими именами.
                            По поводу оскорблений в наш адрес — мы собственно и не ждем ничего другого со стороны реверсеров :))
                              0
                              Как Вы можете судить о моём уровне знаний, когда вы — один из разработчиков вмп (ребят, над вами смеются и на клабе, и на руборде). Не позорились бы и признали, что сделали велик, но катафот поставили не на колесо, а на руль. Собственно вся вышеописанная система полностью опирается на vmp, а сложность вмп можно оценить по отзывам на форумах соответствующей тематики. drVano, давайте закончим спор, или перейдём с тыканья пальцами и выплёскиванием своих умозаключений на обоснованную чем-то беседу (Ваш опыт за обоснование я принять не могу).
                                0
                                Я с удовольствием закончу этот бесполезный спор после того как вы докажете свое утверждение на деле:
                                Третье — и в чём проблема патча ключа со снятым vmp (а я так понимаю реклама тут не vmp, а некой новой системы защиты от RentSoft).

                                Если нет проблемы с подменой открытого ключа, то будьте добры примеры РЕАЛЬНЫХ взломов с подменой ключа, в противном случае все ваши посты не больше чем очередное bla-bla-bla.
                                  0
                                  Давайте софт накрытый только RentSoft и выставляйте гонорар за его взлом, да такой, чтобы смотреть было не лень, тогда разговор будет идти несколько иной. Или Вы хотите, чтобы я потратил своё время на то, чтобы доказать Вам, что Ваша защита не такая великая, как Вы её позиционируете?
                                0
                                И зря не ждёте, читали nfo к сегодняшнему релизу ida pro 6.1? Ваш протектор там упомянут, релизёры встали на защиту Вас от eset.
                0
                А можно узнать ваш механизм получения HardwareID?
                Насколько я знаю, вопрос достаточно нетривиальный.
                  –1
                  CPUID+MAC+HDD+Host
                  +1
                  Хотелось бы иметь свой сервер лицензий, т.е. иметь независимость от RentSoft.
                    +1
                    Это не проблема, на rentsoft.ru/soft/add/?from=habr6 аж 2 способа работы через ваш собственный сервер лицензий. Можно через них подключиться.
                      0
                      А почему бы не воспользоваться собственным CA, с указанием RevocationPath, подробнее тут…
                      www.eclectica.ca/howto/ssl-cert-howto.php
                        0
                        Уточните мысль, пожалуйста. При чем тут CA?
                          0
                          Ну как причем, если стоит задача сделать ту функциональность которую предлагает ваш стартап, то на маке/айфоне я написал за 57 строчек на ObjC кода + keyServices. Путем проверки аутентичности SSL сертификата (+expiration time + revocation events).
                          А про бэкненд я уже привел линк выше. Извините, я честно не догоняю кому может понадобится такие услуги.
                            +1
                            «Такие» — это какие? Мне кажется, мы о разных вещах говорим, наша платформа совсем про другое. Мы предоставляем для вендоров десктопного софта под Win32:
                            а) систему подписочного лицензирования (что включает: сервер лицензий, механизмы защиты от взлома, прием и агрегацию платежей через разные способы, документооборот)
                            б) новые каналы продаж на новом незанятом рынке (60 интернет-провайдеров с 4 млн абоненов, софт вендора в этом случае с точки зрения покупателя выглядит, как допуслуга провайдера, поэтому конверсия зашкаливает; об этом в конце статьи подробно).

                            При чем тут iPhone и сертификаты?
                      0
                      А как-же варианты с вечным триалом? т.е откатывать время перед стартом программы.
                        +3
                        В протекторах есть защита от этого (не 100% надежная, но близко к тому). Также начнутся проблемы с сервером лицензий — в какой-то момент он откажется выдавать новый код активации. Ну и плюс откатить назад слишком далеко не получится — код активации ограничен по времени как сверху, так и снизу. Так что, я думаю, пользователю быстро надоест — по крайней мере, он решит, что его время и усилия дороже, чем ежемесячный микроплатеж.

                        Мы вообще-то не хотим пользователей насильно ограничивать, у нас другая идея — сделать так, чтобы коммерческий софт не бил по карману людям, чтобы им было удобнее и комфортнее его подключать за абонентскую плату, чем выискивать в интернете и нарушать при этом закон.
                        0
                        > Вкратце — принцип работы DSA и RSA основан на так называемой «проблеме факторизации»
                        Только RSA. DSA — задача дискретного логарифмирования.
                          0
                          Да, хотя они и «родственники». Не сводятся ли задача факторизации и задача дискретного логарифмирования к чему-то одному? Мне навскидку не удалось про это найти.
                            +1
                            Как-то слабо искали: portal.acm.org/citation.cfm?id=894497 Да, в некотором смысле они связаны, но на практике алгоритмы решения разные.
                              0
                              Искал и правда «навскидку». :-) Спасибо. Оттуда: «To summarize: solving the discrete logarithm problem for a composite modulus is exactly as hard as factoring and solving it modulo primes.»
                          0
                          А чем, например, ваша система лицензирования лучше аналогов (типа Sentinel HASP?

                          И есть ли у вас Managed сборки(чтоб использовать в .net)? (потому что у HASP, например, нету, и это создает огромные трудности при подключении к .Net проектам--ведь надо подключать нативные сборки).
                            +2
                            Лучше или нет — это решать разработчикам. Могу сказать, чем наша система отличается:

                            1. У нас целая платформа, а не только система лицензирования, т.е. еще и новый канал продаж (интернет-провайдеры, у которых абоненты подключают имеющееся на платформе ПО из своего личного кабинета и оплачивают их в том же чеке, в котором платят ежемесячно за интернет). Т.е. добавив продукт, вы сразу попадаете и в наши каналы продаж, и в автоматизированный документооборот.
                            2. Мы работаем только со схемой подписки и сейчас — только в России (потому что верим, что в России только схема подписки и может тягаться с пиратством: пиратствуют люди от безысходности, а мы даем решение, которое не бьет по карману).
                            3. VMProtect (протектор, который является одним из способов подключения к платформе) бесплатен для создания «подписочных» версий продуктов. Мы работает лишь за комиссию с платежей конечных пользователей, т.е. по схеме разделения доходов от продаж.

                            Для .NET пока, к сожалению, защиты нет. Есть подозрение, что удовлетворительно надежной защиты для .NET-приложения и не сделать. Впрочем, к платформе можно подключиться, и написав свой собственный сервер лицензий и свою собственную защиту — это очень просто, см. rentsoft.ru/soft/add/?from=habr6
                              0
                              Спасибо!
                            0
                            Насколько сложно подменить открытый ключ в программе?
                              0
                              Поддерживаю вопрос. Это довольно распространенный способ взлома асимметричных схем.
                                0
                                RSA работает с открытым ключем через криптоконтейнер + все критичные функции системы лицензирования завиртуализированы.
                                  0
                                  RSA работает с открытым ключем через криптоконтейнер + все критичные функции системы лицензирования завиртуализированы. насколько сложно это взломать — решайте сами :)
                                    0
                                    В чем именно заключаются средства защиты «криптоконтейнером» ключа от подмены?
                                    Вы используете сертификаты?
                                    Ваш сертификат заверен каким-либо УЦ, включенным в доверенные УЦ операционной системы?
                                      0
                                      Криптоконтейнеры не имеют отношения к сертификатам. Это просто внутренний класс, через который RSA работает с открытым ключем (сам ключ лежит в памяти в зашифрованном виде и расшифровывается частями при операциях с большими числами).
                                        0
                                        Чем он зашифрован?
                                          0
                                          А какая разница?
                                            0
                                            Неважно. Тут главное вовремя остановиться и не стать параноиком. Я однажды делал простым XOR'ом, а расшифровку виртуализировал темидой.
                                  0
                                  ситуация с Java, аналогично как и .Net — скорее всего не будет?
                                  (ответ в комментарии выше я прочитал :)

                                  Писать свой сервер лицензий и защиту не хочется совсем.
                                    0
                                    А протекторы для Java вообще существуют? Если существуют, напишите сюда их, пожалуйста — подключим. (То же самое, кстати, и с .NET.)
                                      0
                                      У нас есть протектор для питона, поэтому я не исключаю, что существуют для Java ;)

                                      Надеялся, что если у вас всё серьезно поставлено на поток, то вы знаете больше.
                                        0
                                        У нас отношение к протекторам для Java и .NET немного скептическое, чем-то похожее на отношение к «протектору для BAT-файлов». Надеюсь, что мы ошибаюсь — нельзя знать всего и сразу. На поток мы подключение вендоров как раз ставим (интернет-провайдеров — давно поставили), сейчас вендоры и партнеры вот такие: rentsoft.ru/partners/?from=habr6. Подключаем новые протекторы и приглашаем новых вендоров/шароварщиков к сотрудничеству.
                                        0
                                          0
                                          Спасибо, интересное сравнение. Судя по этому сравнению, .NET Reactor — лучший? Это действительно так, или же это их обзор просто? :-)
                                            0
                                            я кинул то, с чем работал:) попутно там в сравнении есть функциональность защищаторов для .net
                                      –2
                                      Я правильно понял из скриншота, что у Вас используется DSA, и при этом длина ключа 64 бита?
                                        +1
                                        Из какого скриншота? В VMProtect используется RSA 2048 бита.

                                        DSA в статье описывается в статье один из асимметричных методов генерации цифровой подписи, но в VMProtect вместо нее RSA-шифрование.
                                          0
                                          Вы озаглавили статью «Асимметричная криптография ...», но описали собственно характеристики системы и криптопротокол настолько скомканно, что из прочтения неясно практически ничего.

                                          Скриншот — вот этот — что означают цифры после дефиса?:
                                          image
                                            0
                                            Это просто код, который пользователь получает и вводит в программу после того, как оформил подписку. :-) Отношения к криптографии он не имеет, это, считайте, личный логин+пароль клиента на витрине, где он купил продукт.
                                        +2
                                        Посмотрел на вашем сайте — среди прочего вы предлагаете купить по схеме с подпиской различные антивирусы. Т.е. теперь вирусописателям достаточно будет выяснить от чего срабатывает ваша защита от, к примеру, user-mode-отладчика, после чего при заражении заставлять защиту сработать — и ваш протектор сделает за них всю работу по нейтрализации антивируса. Или всё не так?
                                          +1
                                          Это не связанные вещи. Антивирусы — это просто одни из существующих вендоров, которые уже добавились на нашу платформу и продаются по подписке. Кроме антивирусов на ней есть и другой софт, тот же ABBYY, например, или Keepsoft.
                                            0
                                            В том-то и дело, что антивирус — немного необычное ПО, требующее особенного подхода. Как минимум потому, что в случае с 1С или игрушкой вектор атаки на ваш протектор только один — заставить защищенный продукт работать бесплатно, то в случае с security-софтом добавляется еще один не менее важный вектор атаки — заставить ваш протектор _помешать_ работе оплаченного и законно используемого софта.
                                              0
                                              Маленькое уточнение: протектор не наш, это разработка VMProtect Software, которой уже несколько лет, и которой пользуется множество народу (в основном шароварщики) для продажи на Запад. Вот сайт разработчика: vmpsoft.com/, а вот — неплохая статья с обзором протекторов: beachatm.blogspot.com/2010/10/blog-post_26.html
                                                0
                                                А на вопрос сможете ответить? Действительно интересно, если некий вредоносный софт полезет в протектор и он отключит антивирус… Как быть в этой ситуации?
                                                  0
                                                  Что значит «полезет в протектор» и как он «отключит антивирус»?

                                                  Еще раз: антивирусы не связаны с протекторами. Вместо антивирусов мог бы быть любой другой софт, просто так получилось, что антивирусы — лидеры продаж, поэтому они наиболее активны и давно добавлены на нашу платформу, одни из первых. Но это обычные вендоры, такие же, как мы.
                                                    0
                                                    Я подразумеваю ситуацию, когда будет предпринята попытка вмешательства в защиту (в ваш протектор), и в целях предотвращения несанкционированного доступа к защищаемому приложению (читайте, антивирусу) протектор выключит приложение. Разве такое невозможно?
                                                      0
                                                      Это вопрос к разработчикам антивирусов. Наверное, они учитывают эту ситуацию. Вообще, у большинства антивирусов своя собственная защита от взлома, никак не связанная с VMProtect-ом (хотя бы потому, что они появились раньше).
                                                        0
                                                        Мы с Вами, похоже, подразумеваем немного разные вещи :)
                                                        Вы говорите о том, что антивирус должен сам заботиться о собственной безопасности в этом случае. А я говорю о том, что в ваш протектор встроена система отключения приложения при отсутствии подписки или несанкционированного получения доступа к функциям приложения, верно? Так вот, что мешает вирусу или любому другому злонаправленному приложению сделать нечто, что заставит ваш протектор отключить приложение?
                                                          0
                                                          Я, если честно, понял о чем говорит Иван только почитав на их сайте по ссылке о вариантах подключения к их платформе — rentsoft.ru/soft/add/

                                                          Использование предлагаемого ими протектора — только один из вариантов. Можно использовать свой, или вообще не использовать никакого. Вероятнее всего антивирусные вендоры используют вариант «Ваш собственный сервер лицензий», описанный по той ссылке. В этом случае, вероятно, антивирусное ПО периодически обращается к «своему» серверу, который, в свою очередь, обращается к серверу rentsoft за информацией о статусе подписки.

                                                          Иван, я всё правильно понял?
                                                            0
                                                            Зачем вирусу в этом случае что-то знать о протекторе? Почему, например, просто не забить файл приложения нулями? Оно ведь в этом случае точно так же не будет работать, какая разница…
                                                              0
                                                              А как же система самозащиты антивируса, которая не даст внешнему приложению что-то сделать с его файлами?
                                            0
                                            А если немного дизассемблировать и инвертировать результат работы функции проверки подлинности?
                                              +1
                                              Как же вы ее инвертируете, если там RSA (асимметричная криптография). Т.е. keygen написать не выйдет. Насчет дизассемблирования — вы получите не код программы, а некие инструкции с использованием виртуальной машины, система команд которой, во-первых, неизвестна, а во-вторых, еще и разная в разных продуктах и зависит от кода кода активации, выданного сервером лицензии. В общем, легко взломать точно не получится, VMProtect давно существует на рынке.
                                                0
                                                насколько я помню, про Armadillo несколько лет назад тоже так говорили… а потом придумали метод подмены HWIDа, потом и кейгены появились… так что это всё вопрос времени, и только)
                                              0
                                              Возможно я чего-то не понимаю, поправьте, если ошибаюсь, но, как я понял, схема такая: есть ключ, с помощью него дешифрует система команд виртуальной машины, затем машина запускается и выполняет нужные инструкции, который производят полезное действие(«например печатают Hello World»). Вопрос — что мешает нам поставить отладчик уровня ядра(привет DDK) и получить дамп всех инструкций 86-го процессора, которые сделала виртуальная машина? Допустим среди них есть какие проверки(взятие системного времени, для проверки, что мы еще можем работать или проверка CPUID). Такую команду вполне реально обнаружить, и заменить на нопы, после чего сделать из полученного дампа запускаемый exe, лишенный всякой защиты. Пример со скайп не корректен, т.к. можно привести аргумент «неуловимого Джо» — зачем кому-то взламывать бесплатную программу для ip-телефонии? Разве что для попытки узнать протокол и получить возможность прослушивать разговоры(сомнительно, что осуществимо в принципе), но в таком случае на месте этого взломщика я бы хранил полное молчание.

                                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                              Самое читаемое