Лицензионный ключ программы или игры. Лицензионный ключ программы или игры Как подобрать цифровой код к программе

Disclaimer: всё ниженаписанное написано исключительно с просветительскими и исследовательскими целями, а также понимания механизмов защиты от взлома. Автор ни в коем случае не рекомендует использовать данную информацию для взлома программ.

В данной статье я хочу рассказать про три с половиной основных способа взлома программ на.NET, цель, которую я преследую - помочь разработчикам лучше понять механизмы защиты своих программ, т.е. выяснить наиболее очевидные угрозы и предпринять соответствующие меры (или не принимать).

Я не буду углубляться в детали и использовать сложные инструменты для взлома. Всё будет расписано «для чайников», т.е. все инструменты будут простыми, легкодоступными и бесплатными. А основным будет Reflector , декомпилятор программ под.NET

В качестве подопытного кролика я выбрал Expresso - анализатор регулярных выражений. Данная программа бесплатная, в лицензии вроде бы ничего не указано про взлом, но при этом без регистрации она будет работать всего 60 дней. Другими словами, вред от взлома данной программы минимальный, к тому же внутреннее её устройство очень уж хорошо подходит для тренировки. Буду надеяться, что автор данной программы не обидится на меня.


Для начала краткий ликбез по структуре.NET программы, для тех кто не знаком с разработкой под данный Framework: весь код, написанный на любом.NET языке (C#, Visual Basic, F#, Delphi.NET) компилируется в особый Intermediate Language, называемый обычно IL или MSIL . Это что-то типа ассемблера, только весьма умного и обладающего весьма мощными инструкциями. И это, в принципе, такой же равноправный язык как и C#, только синтаксис похуже (а возможности больше). Кроме того, в программе на.NET активно используются метаданные, т.е. вся информация о классах, метода, пропертях, атрибутах и всём остальном сохранена в исполняемом файле.
Т.е. на самом деле, декомпиляция программы не очень верное понятие в данном случае. Она и так вся в открытом виде лежит, а инструменты в виде Reflector"а занимаются тем, что приводят конструкции MSIL к соответствующим конструкциям C# или другого языка, повышая читабельность кода.

Перейдём, собственно, к взлому.

0. Обнуление триала

Собственно, это даже не взлом, а полулегальный способ продлить срок использования неактивированной программы. Заключается он в том, что находится место, где хранится дата первого запуска и меняется/уничтожается. После этого всё можно пользоваться программой до следующего срока.

Посмотрим на нашего подопытного рефлектором:
Немного погуляв по коду, находим интересную строчку в конструкторе MainForm


Открываем редактор реестра, идём в HKEY_CURRENT_USER\Software\Ultrapico\Expresso и видим следующие ключи:


Удаляем их и получаем ещё 60 дней работы.

Данный вариант, конечно, прост и очевиден, но если он даже был бы сложнее - потребовалось бы чуть больше времени провести в рефлекторе, чтобы выяснить все места, куда пишется информация и зачистить их.

Совет разработчикам, которые будут пытаться записать данные в потаённое место: пишите аккуратнее, а то всё может обернуться проблемами обычным пользователям, у которых почему-то не окажется данного места, или не хватит на него прав.

1. Написание keygen"а

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

Открываем рефлектор и ищем код на предмет классов содержащих License или Registration, видим:

При вводе имени и кода по имени вычисляется некий хеш, который и сравнивается с кодом.


Данный хеш использует DES и всякие префиксы


Байты конвертятся в строку с помощью данного метода.

Теперь всё выяснилось, открываем IDE и копируем все необходимые куски кода (или сами реализовываем). Осталось только выяснить, какие значения у Prefix, Suffix и параметры реализации MyDES. Я их приводить не буду, это уже технические детали.

В результате генерируем ключ на любое имя и видим:


Бинго!

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

2. Использование враппера

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


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

Воспользуемся этим:
Сделаем новый проект, добавим Reference на Expresso.exe и запустим его через себя:


Смотрим, что получилось:


Ну кто бы сомневался.

В данном случае всё оказалось просто, но если бы автор программы заменил публичные свойства на приватные, то всего-лишь пришлось бы использовать Reflection для доступа и всё бы свелось к исходной задаче.

Думаю понятно, как можно пробовать защититься от этого - проверять лицензию периодически, смотреть окружение из которого запущена программа, сделать невозможным установку нужной переменной.

Но все эти защиты приведут к тому, что злоумышленник будет использовать

3. Физический взлом программы

Тут уже всё серьёзно. Программа целиком декомилируется в MSIL а из него уже собирается обратно (помните, я писал, что MSIL это такой же язык как и C#?). Для декомпиляции нам понадобится утилита из SDK под названием ildasm , а для компиляции компилятор из.NET Framework ilasm .

Запускаем ildasm, открываем Expresso.exe и сохраняем дамп в.il файл. Находим уже рассмотренный метод IsRegistered и добавляем немножко своего кода (без меток):

Потом берём ilasm и собираем всё назад (не забыв подключить ресурсы).

Что делает данный код: устанавливает нужное имя для регистрации (не обязательно), и возвращает статус, что всё хорошо.
Чтобы было понятнее, так это выглядит в рефлекторе, в C#

Т.е. вполне очевидно, что теперь всё будет хорошо:

Немного про код в MSIL: это стековая машина, у которой нет регистров, все операции имеют вид: засунуть в стек нужное количество параметров, выполнить функцию, которая заберёт нужное количество параметров и положит результат. Ну и обратно: установить значение переменной тем, что лежит в стеке. Чтобы лучше понять работу всего этого рекомендую простой приём: пишите маленькую программу на привычном языке, компилируете, смотрите что получилось в MSILe и разбираетесь в конструкциях языка.
При этом некоторые вещи в MSIL можно сделать очень красиво, например поменять две переменные местами - 4 симпатичных строчки (на C# меньше, но некрасиво).

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

Защиты от всего этого безобразия собственно немного: проводить обфускацию или выносить часть логики/проверки защиты в нативный код.

Заключение

Думаю я рассказал, как просто всё можно разломать на.NET, если создатель не приложил усилий для защиты своей программы. А вы уж решайте, стоит ли делать защиту и тратить на это время и ресурсы. А может просто сделать web-систему, или же бесплатную ограниченную версию. Решать разработчикам.

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

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

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

Выбор

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

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

Они отличаются по настройкам и списку возможностей.

Правильно выбранный генератор способен значительно упростить процесс работы по организации акций и спецпредложений, а также розыгрышей.

Основные характеристики

Все популярные (и не очень) генераторы отличаются друг от друга по целому ряду параметров.

Среди них такие показатели как число знаков в коде, наличие префикса и постфикса (что упрощает классификацию и деление кодов на группы), используемые в и т. д.

Кроме того, разные сервисы предлагают разное количество кодов для одновременной (нажатием одной кнопки) генерации.

Основные технические характеристики рассмотренных ниже сервисов приведены в таблице.

Таблица 1. Сравнительные характеристики различных сервисов по генерации промокодов
Название Лицензия Префикс, постфикс Выбор используемых символов Выбор числа символов Быстрая генерация нескольких кодов
GetEasyCode.ru Условно бесплатная, платная расширенная Да Да Да Да
Randomize Бесплатная Нет Да Да Да
TakeTheCode Бесплатная Только префикс Да Да Да
Academy Бесплатная Нет Нет Нет Нет
Генератор ukrbio.com Бесплатная Нет Ограниченный Да Да
Studio F1 Бесплатная Нет Ограниченный Да Да
Inglobal Бесплатная Только префикс Ограниченный Да Да

Основываясь на этих характеристиках проще сделать правильный выбор.

GetEasyCode.ru

Это постой и быстро загружающийся одностраничный сайт с генератором, который работает быстро и стабильно.

Бывает доступен почти всегда.

Основная отличительная черта сервиса – максимальная функциональность и высокая скорость работы.

Меню простое и интуитивно понятное, дизайн приятный и не отвлекает от рабы.

  • Позволяет создать префикс и постфикс;
  • Можно генерировать сразу несколько кодов (от 1 до 100 штук);
  • Пользователь сам может выбрать, какие символы использовать в коде.
  • Неудобное переключение количества кодов;
  • Платное предоставление от 100 до 999 кодов – стоимость 299 рублей (на момент написания статьи);
  • Платное предоставление от 1000 кодов – стоимость 999 рублей (также на момент написания статьи);
  • Необходимо постоянно нажимать на кнопку «Я не робот».

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

Randomize

Этот сайт предназначен для генерации случайным образом различный паролей, промокодов, чисел и т. д.

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

Этот генератор позиционируется как премиум-сервис для интернет-магазинов.

Это не самый простой в использовании, но действительно многофункциональный и бесплатный сервис.

Основная особенность сервиса в наличии, так называемого «индивидуального» режима построения кода.

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

  • Возможность прописать префикс;
  • Возможность прописать вручную используемые символы;
  • Наличие «индивидуального» режима настроек генерирования;
  • Можно сгенерировать до 10 миллионов кодов и скачать их в том или ином формате;
  • Указание вероятности подбора для кодов разного типа.
  • Отсутствие возможности прописать постфикс;
  • Ограниченное небольшое число символов (от 4 до 16);
  • Генерируется не менее 1000 кодов.

Пользователи отзываются о сервисе таким образом: «Удобно, что можно сгенерировать сразу очень много кодов», №не слишком удобное меню».

Academy

Этот генератор доступен для использования по ссылке https://academy.ru/personal/promo-gen/ .

Это многофункциональный сайт, среди множества его функций есть, в том числе, и генератор промокодов.

Достаточно сложный дизайн и множество страниц ведет к тому, что сервис достаточно долго грузится.

Важно понимать, что данный сайт – не специализированный генератор. Он может помочь для одноразовой генерации.

Но в массовых масштабах использовать его невозможно.

  • Быстрая генерация без лишних настроек;
  • Удобное копирование кода нажатием одной кнопки;
  • Готовая база неиспользованных промокодов.
  • Очень малое количество функций – нельзя выбрать количество или число одновременно генерируемых кодов и т. п.;
  • Нельзя прописать префикс или постфикс, дизайн кода также выбирается системой по умолчанию;
  • Достаточно много различных ссылок и дизайнерских усложнений на странице, что делает работу не слишком простой.

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

Генератор ukrbio.com

Это одностраничный генератор с простым меню и интуитивно понятным интерфейсом.

Имеет простой и приятный дизайн, благодаря которому страница быстро загружается.

Сервис работает стабильно и предоставляет достаточный набор функций.

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

Также можно настроить регистр букв и вывести все коды в том или ином формате.

  • Простое меню и минималистичный дизайн страницы сайта;
  • Бесплатное создание очень большого количества кодов (от 1 до 9999 штук);
  • Достаточно широкие возможности в настройке формата и внешнего вида будущих кодов.
  • <Рис. 8 Studio F1>

    Этот многофункциональный сервис по генерации доступен по ссылке https://studiof1.ru/blog/developing/passgen/ .

    Cайт является многофункциональным ресурсом с сервисами для раскрутки сайтов и т. п.

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

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

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

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

Представим себе ситуацию, когда Вам пришлось «снести винду» (удалить операционную систему windows) и установить новую. Если с этим Вы справитесь, то может возникнуть такая проблема, как установка уже привычных для Вас программ и игр. Хорошо если они находятся в свободном доступе и бесплатные, но что делать когда Вы заплатили за программу (или игру), а при переустановке она от Вас требует лицензионный ключ (и это вполне нормальное явление)? Хорошо если Вы его где-то сохранили и записали, а что делать если потеряли или не оставили ключ? В таком случае есть два варианта решения.

1) Написать в поддержку этой программы и объяснить ситуацию. Если разработчики нормальные и Вы им докажете что действительно купили их продукт, то они Вам помогут.
2) Воспользоваться одной бесплатной программой, про которую будет текст ниже.

Итак, программа называется Belarc Advisor - Free Personal PC Audit

Процесс установки обычный.
Вначале соглашаемся с информационным сообщением о том, что есть у них версия и для Android

Затем соглашаемся с лицензионным соглашением


Далее жмём кнопку Install (программа не спрашивает куда установиться) и соглашаемся с анализом системы на поиск ключей:


Ждем завершения


И в конечном итоге откроется окно (такой вид отчёта) с разнообразной информацией (операционная система, все комплектующие, пользователи, сети и т.д.). Здесь ищем внизу пункт Software Licenses и видим всё, что нашла программа:

У меня не так много, т.к. пользуюсь в основном бесплатными решениями, но смысл понятен.

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