З.Ы. Программа написана на Лазаре под Виндовс, использоваться будет предположительно только в Украине в лечебно-профилактических заведениях (формирование тарификационных списков медецинских работников + некоторые дополнительные возможности).
Как написать регистрацию программы?
Модератор: Модераторы
-
ViruZ
- постоялец
- Сообщения: 175
- Зарегистрирован: 30.05.2005 17:41:12
- Откуда: Украина
- Контактная информация:
Как написать регистрацию программы?
Есть программа в стадии беты, проходит тестирование на реальных данных. Планирую распространять, за деньги
естессно, возникла необходимость написать регистрацию и ограничить демо-версию, например, 30 запусками. Как лучше всего это осуществить?
З.Ы. Программа написана на Лазаре под Виндовс, использоваться будет предположительно только в Украине в лечебно-профилактических заведениях (формирование тарификационных списков медецинских работников + некоторые дополнительные возможности).
З.Ы. Программа написана на Лазаре под Виндовс, использоваться будет предположительно только в Украине в лечебно-профилактических заведениях (формирование тарификационных списков медецинских работников + некоторые дополнительные возможности).
Последний раз редактировалось ViruZ 27.08.2007 11:39:13, всего редактировалось 1 раз.
- Сергей Смирнов
- энтузиаст
- Сообщения: 595
- Зарегистрирован: 28.04.2005 13:23:25
- Откуда: Москва
- Контактная информация:
Можно ещё ограничивать не количество запусков (т.к. счётчик надо где-то хранить), а количество записей в какой-нибудь подходящей таблице.
Далее надо сгенерить серийный номер и какой-нибудь хэш из него по более-менее хитрому алгоритму. Далее клиенту высылаешь эту пару и заставляешь ввести. Хранишь и то и другое потом на диске (хэш надо зашифровать используя в качестве ключа, например, номер HDD). При старте проги снова получаешь тем же самым алгоритмом хэш из серийника и сравниваешь с расшифрованным с диска. Если совпадут - прога зарегистрированная, проверку на окончание периода не делать.
В серийный номер можно даже зашить какую-нибудь полезную инфу (тип версии, дату продажи и т.п.).
Способ этот довольно примитивный и, наверное, легко ломаемый, но всё-же простому юзеру крякнуть его врядли под силу.
Далее надо сгенерить серийный номер и какой-нибудь хэш из него по более-менее хитрому алгоритму. Далее клиенту высылаешь эту пару и заставляешь ввести. Хранишь и то и другое потом на диске (хэш надо зашифровать используя в качестве ключа, например, номер HDD). При старте проги снова получаешь тем же самым алгоритмом хэш из серийника и сравниваешь с расшифрованным с диска. Если совпадут - прога зарегистрированная, проверку на окончание периода не делать.
В серийный номер можно даже зашить какую-нибудь полезную инфу (тип версии, дату продажи и т.п.).
Способ этот довольно примитивный и, наверное, легко ломаемый, но всё-же простому юзеру крякнуть его врядли под силу.
-
ViruZ
- постоялец
- Сообщения: 175
- Зарегистрирован: 30.05.2005 17:41:12
- Откуда: Украина
- Контактная информация:
Большое спасибо! Именно таким образом и сделаю. А ломать навряд ли кто-то будет, т.к. программа узко специализированная, а цена будеть даже очень гуманной, во всяком случае, государственные заведения здравоохранения спокойно себе смогут позволить купить эту порграмму.
Но возникает встречный вопрос: каким образом программно можна получить номер HDD?
Но возникает встречный вопрос: каким образом программно можна получить номер HDD?
- Attid
- долгожитель
- Сообщения: 2589
- Зарегистрирован: 27.10.2006 17:29:15
- Откуда: 44°32′23.63″N 41°2′25.2″E
- Контактная информация:
поломать можно все . дальше от стоимости и типа распростронения.
лучше всего железная защита типа хасп или подобное. но про 30 запусков тут надо забыть.
дешево и сердито если используешь БД то там отмечайся и отсчитывай 30 запусков, можно и в реестр но отлавить можно и то и то.
вместо 30 запусков лучше сделать 30 дней и пока прога не зарегина проверяешь все даты проходящие через прогу. если клиент записывался\платил и .т.д. больше 30 дней назад выходишь из проги с предупреждением. самый безпрогрышный способ =)
а регистрцию читай в нете это как таковое к лазарю не привязано.
берешь имя машыны\серийный номер винта\и т.д. шифруешь понравившемся тебе алгоритмом с добавлением своего мастер слова ну и ключ готов.
лучше всего железная защита типа хасп или подобное. но про 30 запусков тут надо забыть.
дешево и сердито если используешь БД то там отмечайся и отсчитывай 30 запусков, можно и в реестр но отлавить можно и то и то.
вместо 30 запусков лучше сделать 30 дней и пока прога не зарегина проверяешь все даты проходящие через прогу. если клиент записывался\платил и .т.д. больше 30 дней назад выходишь из проги с предупреждением. самый безпрогрышный способ =)
а регистрцию читай в нете это как таковое к лазарю не привязано.
берешь имя машыны\серийный номер винта\и т.д. шифруешь понравившемся тебе алгоритмом с добавлением своего мастер слова ну и ключ готов.
- Сергей Смирнов
- энтузиаст
- Сообщения: 595
- Зарегистрирован: 28.04.2005 13:23:25
- Откуда: Москва
- Контактная информация:
Функция возвращает номер HDD с указанной буквой. Ясен пень, что работать будет только в винде. Наверное, есть и кроссплатформенные решения. Если кто найдёт/сделает, плиз, не держите в себе
Код: Выделить всё
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Windows;
function GetHSN(const DriveLetter: Char): DWord;
implementation
function GetHSN(const DriveLetter: Char): DWord;
var
VolumeLabel, FileSystem: Array[0..$FF] of Char;
SerialNumber, DW, SysFlags: DWord;
D: Char;
strDrive: string;
begin
GetHSN := 0;
D := UpCase(DriveLetter);
if (D >= 'A') and (D <= 'Z') then
begin
strDrive := (D + ':\');
GetVolumeInformation(@strDrive[1], VolumeLabel, SizeOf(VolumeLabel),
@SerialNumber, DW, SysFlags, FileSystem,
SizeOf(FileSystem));
GetHSN := SerialNumber;
end
end;
лучше всего железная защита типа хасп или подобное. но про 30 запусков тут надо забыть.
аппаратный счетчик у нормальных ключей работает нормально
вопрос как это будет реализовано в самой программе
ведь часто ломают не ключик, а сам софт... даже крутую защиту можно прикрутить настолько коряво, что взломает и младенец
-
ViruZ
- постоялец
- Сообщения: 175
- Зарегистрирован: 30.05.2005 17:41:12
- Откуда: Украина
- Контактная информация:
Сергей Смирнов писал(а):Функция возвращает номер HDD с указанной буквой. Ясен пень, что работать будет только в винде. Наверное, есть и кроссплатформенные решения. Если кто найдёт/сделает, плиз, не держите в себе
Кое-что нашел для линукса, но написано на с
Может, кто может попробовать переписать под FPC и протестировать?
Код: Выделить всё
#include <linux/hdreg.h>
...
int fd;
struct hd_driveid id;
...
fd = open ("/dev/hda", O_RDONLY);
ioctl (fd, HDIO_GET_IDENTITY, &id);
close (fd);
printf ("%s\n", id.serial_no);
