Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Как организовать активацию программы...


Автор: navodri 15.6.2010, 12:32
Собственно сабж.

 smile 

Автор: kami 17.6.2010, 12:53
Смотря что подразумевается под активацией.
Как это должно выглядеть?

Автор: navodri 17.6.2010, 16:27
Да в том то и дело, что толком сам не знаю. 
Хотелось бы услышать ваши предложения и увидеть возможные варианты кода?

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

Какие будут соображения?

Автор: Keeper89 17.6.2010, 16:42
Я бы советовал пока использовать сторонние решения, типа http://www.softactivation.com/asp/about.asp

Автор: Akella 21.6.2010, 13:18
Можно с помощью ASProtect. Но я не знаю как. При установке или при запуске сам ASProtect так можно активировать (через интернет).

А вообще есть спец. раздел:
http://forum.vingrad.ru/forum/tech-piracy-protect-software.html

Автор: navodri 21.6.2010, 16:41
Это всё понятно. Сторонние средства - штука не плохая... 

Но меня интересует собственная защита, с активацией на своем сайте. Выслушаю способы решения?

Автор: Akella 25.6.2010, 10:49
у тебя и сайт на дельфи?

Добавлено через 1 минуту и 32 секунды
Написать нужно кроссплатформенную библиотеку, которая будет вызываться по ссылке веб сервером.
В дельфи есть такие приложения, но я не уверен, что под линуксом они прокатят. Мало того, если тебе нужно на стандартном хостинге, то ты не сможешь использовать такую Dll

Автор: navodri 26.6.2010, 14:24
Цитата

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

Это уже интересно. А что будет делать сама библиотека?

---------------------

Более всего меня заинтересовала активация через инетрнет, организованная, например, ABBYY FineReader'идером. Вот такое бы организовать! То что и это ломается - понятное дело. Но всё же труднее.

Автор: casinosoftguru 1.7.2010, 11:59
вариант навскидку.
при установке каждой копии программы генерируешь уникальный код для конкретного компьютера, который может генерироваться по простому алгоритму со смещением, но с учетом скажем имени компьютера, названию видеокарты и иной информации которую сможешь получить как отпечаток операционной системы..

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

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

вот как то так..

Автор: Antony41 1.7.2010, 16:46
Как на счёт того что бы продавать коды активации на определенный срок или пожизненный?
Есть у тебя отдельная программа кряк так сказать в котором ты указываешь срок в днях например создать ключ на 30 дней, код ты можешь придумать сам, например ты ввёл код XXXX-FFFF-DDDD-SSSS, этот код шифруется твоим методом шифрования, и обрезается до определенного кол-ва символов и получается имя файла например E225E14E222E33E555E44E55E66E45.key и E225E14E222E33E555E44E55E66E45.inf 

в файле key содержится информация типа:
Activate=0
Period=30
в файле inf просто содержится информация и код доступа:
пароль: XXXX-FFFF-DDDD-SSSS

файл key закачиваешь на сервер ftp и к нему существует адрес через http например http://mysite/specfolder/keys/E225E14E222E33E555E44E55E66E45.key
теперь самое главное в файле E225E14E222E33E555E44E55E66E45.key всё зашифровано и ключ для расшифровки XXXX-FFFF-DDDD-SSSS, по которому так же программа будет получать адрес к имени файла.

Пользователь запускает программу и программа не находит доп. информационный файл (см. ниже) в своей папке, следовательно регистрация слетела или программа не была зарегистрирована, показываем сообщение и два варианта:
1 регистрация программы
2 восстановление регистрации по коду активации

пользователь знает что он впервые включил её, значит выбирает регистрация программы, далее ему предлагается купить ваши коды, на мес на 2 мес, и тд. он покупает у вас этот код XXXX-FFFF-DDDD-SSSS и вводит в поле ввода кода,
программа шифрует код по вашей формуле и знает имя файла E225E14E222E33E555E44E55E66E45.key (соответственно, если код не правильный, то программа не найдёт файл, следовательно код не верный, она сама не знает какой код нужно ввести для получения доступа smile ), далее делается get запрос и если файл на сервере найден, то начинаем его читать предварительно расшифровав его,

Первый параметр
Activate=0 //соответственно если 1, то уже активирован и параметры ниже будут другими
Period=30

Параметры правильные, и мы создаём новый файл со след. параметрами

Activate=1 //1 - значит уже зарегистрирован
RegPeriod=10.05.2010 //сюда пишется дата регистрации
ExpPeriod=9.06.2010 //сюда пишется заканчивающийся срок активации
//ниже можно ввести доп. информацию о пользователе его номер тел. емайл сайт icq и тд.

этот файл с таким же именем E225E14E222E33E555E44E55E66E45.key закачиватся на сервер, подменяя старый. И в папке с программой создаётся файл ProgramNameRegFile.key, в котором содержится код активации
Code=XXXX-FFFF-DDDD-SSSS
Всё!

Далее
Пользователь запускает программу, программа проверяет есть ли регистрационный файл на компьютере ProgramNameRegFile.key, в котором содержится наш код доступа XXXX-FFFF-DDDD-SSSS,
если файл есть, то программа считывает его и по вашей формуле шифрует код, получая при этом имя к файлу ключей http://mysite/specfolder/keys/E225E14E222E33E555E44E55E66E45.key, делает get запрос к этому файлу и получает данные, если в данных указано activate=1, тогда мы знаем что программа зарегистрирована, остаётся проверить не истёк ли срок активации, (тут есть небольшая загвоздка с проверкой времени время не должно браться с компьютера, нужно использовать сторонний сервис, например получать время при регистрации и при каждом запуске нужно с серверов синхронизации времени.), делаем синхронизацию и узнаём настоящее время, проверяем второй параметр если реальное время <= ExpPeriod (время когда регистрация закончится), тогда разрешаем доступ, иначе говорим что срок истёк и показываем шаг третий продление регистрации)))) если ты конечно не собираешься использовать ключи с определенном сроком действия, то у тебя всё намного проще... 
Забыл еще добавить, при восстановлении пароля по коду активации возникла проблема восстановления ключа активации множествам пользователей, что позволит сидеть неограниченному числу пользователей на одном ключе, так вот для этого при сборе информации я добавил машинный код, это ID материнской платы, так же этот код проверяется при каждом обращении к файлу ключей, и если этот код не тот что был указан в файле при регистрации, тогда пользователь пытается восстановить ключевой файл с чужого компьютера. 

В этой программе я использовал именно такой способ http://flysoftware.ucoz.ru/ASK.rar

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

Автор: navodri 1.7.2010, 19:11
2 Antony41, casinosoftguru

Сенкс! Очень дельные рекомендации. 

Особенно интерсна тема от Antony41. Воспользуюсь обязательно! Возможно, это то, что я и хотел реализовать. Всем спасибо!



Автор: Akella 2.7.2010, 16:44
Цитата(navodri @  26.6.2010,  14:24 Найти цитируемый пост)
Это уже интересно. А что будет делать сама библиотека?

А библиотека будет генерировать активационные данные, например имя и ключ.

Автор: ZaDoXliK 14.7.2010, 06:47
В программе:
Код

Function check: boolean;
Begin
 HTTP := TIDHTTP.Create(application);
 HTTP.Port := 80;
 k.Text := HTTP.post('Http://твой сайт/auth.php', st);
 http.Free;
 If Pos('Register', K.Text) = 0 Then
  Begin
   Result := False;
   k.Free;
  End
 Else
  Begin
   Result := True;
   k.Free;
  End;
End;


На сайте:
Код

<?
IF (file_exists($_POST[KEY]))
{
echo 'Register';
$f=fopen($_POST[KEY],'a+');
fwrite($f,$_SERVER[REMOTE_ADDR].'=');
fwrite($f,$_POST[PCNAME].'=');
fwrite($f,$_POST[TIME].'
');
fclose($f);}
?>


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

Код бородатый, делалось это давно, всего уже не помню.

Поразмышляй...

Автор: casinosoftguru 15.7.2010, 16:38
ZaDoXliK, 
ага
вставляешь в hosts 
http://твойсайт 127.0.0.1
ставишь денвер
сниффишь данные что передаются от реального сервака к софту, пишешь скрипт
запускаешь
автор досвидания)

Автор: ZaDoXliK 21.7.2010, 10:52
Цитата(casinosoftguru @ 15.7.2010,  14:38)
ZaDoXliK, 
ага
вставляешь в hosts 
http://твойсайт 127.0.0.1
ставишь денвер
сниффишь данные что передаются от реального сервака к софту, пишешь скрипт
запускаешь
автор досвидания)

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

Автор: sbfactory 24.7.2010, 04:01
Antony41 тему говорит. Но данные об активации лучше записывать в реестр, чтобы юзеры не активировали каждый раз при обновлении программы.

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

Автор: BeeMaster 27.1.2012, 05:58
При разработке одного проекта передо мной столяла та-же задача. Решил следующим образом

При первом запуске программа создаёт файл в котором содержится набор хешей системных параметров (версия биос, ос, видяхи, количество памяти, процессор, имя пользователя и прочие данные). Далее не основе этого файла генерируется 32-х битный ключ по особому алгоритму (например просто хеширование этого файла с добавлением какого-то символа).
Для того чтобы активировать программу пользователь должен на сайте в личном кабинете ввести этот самый код. Сайт на его основе создавал 32-х битный пароль. Который пользователь вводит, тем самым активирую программу. 
Активация нужна только при первом запуске.
ДЛя пользователя:
Запускает программу, видит код. Вводит его на сайте, получает пароль. 

Результат: защита от копирования, контроль использования.

При желании можно при каждом запуске отправлять отчётик на сервер, чтобы знать кто и когда использует программу. Но конкретно в моём случае этого не требовалось.

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

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)