Страница 1 из 1
Как написать регистрацию программы?

Добавлено:
22.08.2007 10:06:31
ViruZ
Есть программа в стадии беты, проходит тестирование на реальных данных. Планирую распространять, за деньги

естессно, возникла необходимость написать регистрацию и ограничить демо-версию, например, 30 запусками. Как лучше всего это осуществить?
З.Ы. Программа написана на Лазаре под Виндовс, использоваться будет предположительно только в Украине в лечебно-профилактических заведениях (формирование тарификационных списков медецинских работников + некоторые дополнительные возможности).

Добавлено:
22.08.2007 13:53:37
Сергей Смирнов
Можно ещё ограничивать не количество запусков (т.к. счётчик надо где-то хранить), а количество записей в какой-нибудь подходящей таблице.
Далее надо сгенерить серийный номер и какой-нибудь хэш из него по более-менее хитрому алгоритму. Далее клиенту высылаешь эту пару и заставляешь ввести. Хранишь и то и другое потом на диске (хэш надо зашифровать используя в качестве ключа, например, номер HDD). При старте проги снова получаешь тем же самым алгоритмом хэш из серийника и сравниваешь с расшифрованным с диска. Если совпадут - прога зарегистрированная, проверку на окончание периода не делать.
В серийный номер можно даже зашить какую-нибудь полезную инфу (тип версии, дату продажи и т.п.).
Способ этот довольно примитивный и, наверное, легко ломаемый, но всё-же простому юзеру крякнуть его врядли под силу.

Добавлено:
22.08.2007 14:00:19
ViruZ
Большое спасибо! Именно таким образом и сделаю. А ломать навряд ли кто-то будет, т.к. программа узко специализированная, а цена будеть даже очень гуманной, во всяком случае, государственные заведения здравоохранения спокойно себе смогут позволить купить эту порграмму.
Но возникает встречный вопрос: каким образом программно можна получить номер HDD?

Добавлено:
22.08.2007 14:30:11
Attid
поломать можно все . дальше от стоимости и типа распростронения.
лучше всего железная защита типа хасп или подобное. но про 30 запусков тут надо забыть.
дешево и сердито если используешь БД то там отмечайся и отсчитывай 30 запусков, можно и в реестр но отлавить можно и то и то.
вместо 30 запусков лучше сделать 30 дней и пока прога не зарегина проверяешь все даты проходящие через прогу. если клиент записывался\платил и .т.д. больше 30 дней назад выходишь из проги с предупреждением. самый безпрогрышный способ =)
а регистрцию читай в нете это как таковое к лазарю не привязано.
берешь имя машыны\серийный номер винта\и т.д. шифруешь понравившемся тебе алгоритмом с добавлением своего мастер слова ну и ключ готов.

Добавлено:
22.08.2007 15:01:24
ViruZ
Именно так и пробую сделать. Нашел на Дельфях функцию как узнать серийник винчестера, сейчас попробую кодировать.

Добавлено:
22.08.2007 15:13:36
Сергей Смирнов
Функция возвращает номер 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;

Добавлено:
22.08.2007 16:11:10
ev
лучше всего железная защита типа хасп или подобное. но про 30 запусков тут надо забыть.
аппаратный счетчик у нормальных ключей работает нормально
вопрос как это будет реализовано в самой программе
ведь часто ломают не ключик, а сам софт... даже крутую защиту можно прикрутить настолько коряво, что взломает и младенец

Добавлено:
22.08.2007 17:31:55
Attid
аппаратный счетчик у нормальных ключей работает нормально
не я просто про то что не получится распростронять прогу через инет да и давать всем ключик для пробы денег тоже не напасешься.

Добавлено:
22.08.2007 17:34:29
ev
норм ключик - примерно 15-20$

Добавлено:
27.08.2007 12:56:39
ViruZ
Сергей Смирнов писал(а):Функция возвращает номер HDD с указанной буквой. Ясен пень, что работать будет только в винде. Наверное, есть и кроссплатформенные решения. Если кто найдёт/сделает, плиз, не держите в себе

Как вариант - отпарсить вывод hdparm в Линуксе или

посмотреть его исходники

Добавлено:
06.09.2007 10:26:42
ViruZ
Сергей Смирнов писал(а):Функция возвращает номер 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);