Как защитить программу от копирования и привязать ее к компьютеру

Обновлено: 06.07.2024


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

Научный руководитель – Р.Т. ФАЙЗУЛЛИН, д.т.н.

Омский государственный университет

ЗАЩИТА КОМПАКТ-ДИСКА МЕТОДОМ ИСКАЖЕНИЯ ТАБЛИЦЫ СОДЕРЖАНИЯ

Защита программного продукта от несанкционированного копирования - актуальная задача в связи с сохранением коммерческих и авторских прав фирм и разработчиков.

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

Основой любой защиты можно считать ее способность к идентификации носителя, с которым она попала к пользователю. Уровень защиты на данном этапе должен быть таким, чтобы условная метка или характеристика, которая была присуща данному носителю, не воспроизводилась любыми средствами битового копирования (CloneCD, Alcohol 120% и другие), так как с них обычно и начинается взлом.

Для использования этого метода пишущий привод должен поддерживать режим RAW DAO (Disc At Once), а читающий привод должен уметь распознавать искаженный TOC, переходя в этом случае на использование "резервного" средства адресации – Q-канала подкода.

Записываем на CD-R или CD-RW диск две сессии в штатном режиме. Запускаем Clone CD и создаем образ оригинального диска. На жестком диске должны образоваться три записываемых файла (с расширениями CCD, IMG и SUB). CCD - файл управления CloneCD, содержащий информацию о логической структуре CD, IMG - образ, данные главного канала всех треков CD, SUB - данные подканала всех треков CDSub.

Теперь откроем файл с расширением CCD в любом текстовом редакторе. Каждый элемент ТОС начинается со строки [Entry X] (X – номер элемента) и имеет 14 полей: Session, Point, ADR, Control, TrackNo, AMin, ASec, AFrame, ALBA, Zero, PMin, PSec, PFrame (смысл и значения данных полей могут варьироваться в зависимости от номера элемента).

В третьем элементе содержится информация об абсолютном адресе начала первого трека первой сессии. Мы намерены изменить TOC, увеличив стартовый адрес этого трека, чтобы он вышел за пределы начальной сессии. Изменим значения параметров Pmin, PSec, PFrame (физический адрес сектора, выраженный в минутах, секундах и долях секунд) и PLBA (логический адрес сектора), так чтобы их значения превышали значения соотв. параметров второго элемента. PLBA адрес вычисляется по формуле: PLBA=(((PMin*60)+PSec)*75+PFrame)–150. Сохраним изменения и запишем искаженный образ на CD-R/CD-RW диск.

Попробуем скопировать этот диск при помощи трех самых распространенных копировщиков – Clone CD, Alcohol 120% и BlindWriter.

По статистике Clone CD диск содержит всего одну сессию с общей протяженностью в 6,9 мегабайт, но зато размер единственного трека последней составляет 3,99 терабайт. И после записи созданного образа первый трек читается без каких-либо ошибок, но второй исчезает.

Теперь попробуем скопировать при помощи Alcohol 120%, который видит обе сессии, но сохраняет в образ лишь вторую из них (Clone CD сохранял первую). На этот раз после записи присутствуют оба трека, но второй читается без проблем, а первый не читается вообще.

Записанный при использовании BlindWriter диск не определился ни в одном из приводов и стирание его оказалось невозможным во всех программах, в том числе и тех, что игнорируют некорректную ТОС.


По статистике, приведенной в исследовании 2018 BSA Global Software Survey:

  • Нелицензированное (пиратское) ПО составляет 37% от всего объема программного обеспечения, установленного на персональных ПК по всему миру.
  • Стоимость контрафактного ПО оценивается в $46 млрд.
  • Malware, которыми заражены многие пиратские программы, загружаемые из сторонних источников, обходятся бизнесу в $359 млрд в год.
  • Потери от взлома лицензионного ПО составляют порядка $600 млрд ежегодно.

Skillbox рекомендует: двухлетний практический курс «Я — веб-разработчик PRO».

Напоминаем: для всех читателей «Хабра» — скидка 10 000 рублей при записи на любой курс Skillbox по промокоду «Хабр».

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

Что касается доходов, то по данным BSA бизнес, который решит серьезно отнестись к защите своих программных продуктов, может рассчитывать на повышение прибыли примерно на 11% (впрочем, важно понимать, что это среднее значение).

Но что можно сделать для защиты своего ПО?

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

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

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

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

Ключевые элементы защиты

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

  • Одноразовый платеж. За ваше ПО платят раз, после чего могут пользоваться неограниченное время.
  • Функциональные ограничения. Дополнительные возможности пользователь может открыть за дополнительную плату.
  • Временная лицензия. Вы «сдаете приложение в аренду», то есть речь идет о подписке.
  • Многоуровневая. Представляет собой комбинацию названных методов. Пользователь получает Silver-, Gold- или Platinum-версию ПО при соответствующей оплате.

Еще раз подчеркнем важность выбора адекватной защиты. Если вы собираетесь защитить свой велосипед методом, который применяется в Форт-Ноксе, это вряд ли можно назвать разумным. Есть и обратная зависимость: если хотите защитить Форт-Нокс, не используйте для этого велосипедный замок, это бесполезно, взлом гарантирован. В целом, стратегия лицензирования должна соответствовать цене самого продукта.

Виды защит

Как и говорилось выше, есть различные опции для защиты ПО от взлома и копирования. Эти опции могут отличаться по стоимости, уровню защиты и специализации.

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

Офлайн-программная защита

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

Онлайн-программная защита

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

При желании можно добавить опции проверки ПО: как используется, есть лицензия или нет. Если требуется постоянное подключение к сети, то продукт, скорее всего, будет работать не всегда и не везде.

Степень серьезности такой защиты — между средним и высоким уровнем.

Аппаратная защита

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

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

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

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

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

как сделать так что прога была защишена от копирования с диска и с компа. И как сделать так чтоб прога требовала код активации!

Защита ПЗ от копирования
Как создать привязку к свободному месту диска?

Защита от копирования
Собственно вот, что нужно: 1 шаг:запускается окно в нём имеются 2 текстовых поля, в первом.

Защита файлов от копирования
Подскажите, А такую схему можно реализовать для любых типов файлов. и как клиент даст ID? Это.

Защита от несанкционированого копирования через сервер активации
Подскажите алгоритм работы для клиент-сервера для защиты от НСК. Приблизительный алгоритм: 1.

как сделать так что прога была защишена от копирования с диска и с компа. скопировать всегда можно, вопрос как делать, чтоб она не работала на новом компе. Я привязывал к ID процессора (он вроде уникальный). Есть некий файлик (бинарник или dll), который ты даешь авторизованному пользователю взамен ID процессора, прога сверяет ID процессора с тем, что записано в этом файлике. Если несовпадает, вырубается. Можно проще: клиент дает ID, ты ему на основе ID даешь некий ключ сформированный кейгеном, этот ключ сохраняется в реестр или конфиг-файл, и прога при каждом запуске проверяет соответсвие ключ-ID. О втором методе по подробней пожалуйста! что почитать по каким словам погуглить!?

Решение

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

Решение

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

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

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

минусы данного решения - стоимость ключа

nio, kenny69, можете скинуть примеры защищенных программ (только exe), для исследования?:-[

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

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

Добавлено через 2 минуты

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

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

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

минусы данного решения - стоимость ключа

Ну USB ключи в моём конкретном случай это перебор!

А вот про "обертка для exe, чтобы предотвратить отладку. " поподробней если не затруднит

Добавлено через 51 секунду

nio, kenny69, можете скинуть примеры защищенных программ (только exe), для исследования?:-[

> Привязка к конкретному компьютеру делается инсталлятором при
> установке программы.

Или самой програмой при ее первом запуске.

> Дистрибутив хранишь у себя и никому не даешь.

Не обязательно. Можно, например, так (см. ниже).

2. Юзер звонит (пишет) тебе и сообщает эту строку.

3. Если юзер нелегальный - посылаешь его. Если легальный, то заносишь юзера в свою БД и запускаешь тобою же написанную генерилку. Вводишь в эту генерилку строку, которую сообщил тебе юзер и генерилка по какому-то алгоритму преобразует эту строку в строку ответа. Ее сообщаешь юзеру.

4. Юзер вводит полученный от тебя ответ в программу. Программа проверяет правильность ответа по тому же алгоритму, который использовала генерилка. Если ответ правильный - программа регистрирует сама себя на компе юзера (в реестре, в своем теле, в теле DLL, в файле - где угодно, это уже тоже отдельный вопрос) и далее работает по полному функционалу.

> Ты ему добросовестно сообщаешь новый пароль.
> Юзер щаслив.

Все можно. Есть функция GetVolumeInfo, так там и объем диска узнать можно и метку тома и номер тома.


> ExeCryptor - конечно мощная утилита, но до VMProtect - далековато

Не согласен :)
У обоих VM не разобрана, поэтому пока-что нельзя утверждать кто лучше :)
К тому-же у VMProtect отсутствует навесная часть защиты (не готов утверждать это про платный вариант утилиты) :) Так что по сравнению с бесплатным вариантом ExeCryptor безусловно выигрывает.

По поводу стриппера - да, что-то подобное есть, но упаси бог разбираться в том коде, который вышел из под стриппера :) Его плюсы, что он сворачивает антиотладку, но дальше тихий ужас. Впрочем, если занимаешься реверсингом, понимаешь сей момент :)

ЗЫ: посмотрим что за VbsEdit такой, заинтриговал :)

ВЫВОД:
Если цена ключа сгенеренного вариантами [4] и [5] в пределах до 50$ ИМХО не заморачиваемся и делаем софт ключ привязывающийся к железу.

Читайте также: