System do sprawdzania licencji w aplikacjach stworzonych w Lazarus / Delphi czy ma sens? Kod źródłowy

0

Rok temu zrobiłem prosty skrypt który sprawdza licencję aplikacji dla swojej apki w Delphi 11.3
Komponenty wykorzystane
IdDecoderMIME1
IdEncoderMIME1
Dołączam kod źródłowy.
Czy coś w tym kodzie można ulepszyć żeby można było wykorzystać w aplikacjach komercyjnych, żeby było bardziej bezpieczne?

program-1.jpg
Więc jak działa kod
Jest procedura

procedure Zapis(const sKey: string; const sName: string; const sValue: string);

Globalne stałe

const
  SecretKey = 517;
  SuperProgram = '\Software\NazwaAplikacji';
  KeyValue = 'license';
implementation
uses
//Rejestr windows Registry
Registry;
{$R *.dfm}

Procedura odczytywania klucza z rejestra
function Odczyt(const sKey: string; const sName: string; var sValue: string): Boolean;

function TForm1.Odczyt(const sKey, sName: string; var sValue: string): Boolean;
var
  Reg: TRegistry;
begin
 Result := False;
  Reg := TRegistry.Create(KEY_READ);
  try
    Reg.RootKey := HKEY_CURRENT_USER;
    if Reg.OpenKey(sKey, False) and Reg.ValueExists(sName) then
    begin
      sValue := Reg.ReadString(sName);
      Result := True;
    end;
  finally
    Reg.Free;
  end;
end;

Procedura zapisywania do rejestru

procedure TForm1.Zapis(const sKey, sName, sValue: string);
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create(KEY_WRITE);
  try
    Reg.RootKey := HKEY_CURRENT_USER;
    if Reg.OpenKey(sKey, True) then
      Reg.WriteString(sName, sValue);
  finally
    Reg.Free;
  end;
end;

Przycisk szyfrowanie klucza i zapisywania do rejestru

procedure TForm1.Button5Click(Sender: TObject);
var
 v:string;
 cryptedData: string;
begin
  v := License.Text;
  //szyfruje
  cryptedData := IdEncoderMIME1.EncodeString(v);
  Zapis(SuperProgram, KeyValue, cryptedData);
  ShowMessage('Klucz zaszyfrowany i zapisany do rejestru ' + cryptedData+' Kliknij na '+ #13 + 'Przycisk Sprawdź');
end;

Przy starcie aplikacje zablokowane przyciski

procedure TForm1.FormCreate(Sender: TObject);
begin
  edt1.Enabled := False;
  button4.Enabled := False;
  button3.Enabled := False;
end;

Kod przycisku "Sprawdź"

procedure TForm1.aaaClick(Sender: TObject);
var
v:string;
sLicencja: string;
decryptedData: string;
begin
   sLicencja:= License.Text;
  if Odczyt(SuperProgram, KeyValue, v) then //licencja
  begin
    decryptedData := IdDecoderMIME1.DecodeString(v);//szyfruje
    //ShowMessage('Wynik z rejestru KeyLicenseValue ' + decryptedData);
    EdtWynik.Text := decryptedData;
    //sprawdzam czy dane zgadzają się
    if (decryptedData = sLicencja)  then
    begin
     edt1.Enabled := True;
     button4.Enabled := True;
     button3.Enabled := True;
     ShowMessage('Klucz jest poprawnie odszyfrowany' + #13 + 'Pola odblokowane!')
    end
    else
     ShowMessage('Błędna licencja ' + decryptedData);
  end;
end;
1

Jeżeli klient ma 10 komputerów, to powinien kupić jedną czy 10 licencji? Jeżeli 10 licencji, to proponuję odczytywać z systemu jakieś unikatowe parametry, np. MAC karty sieciowej (ten numer da się zmienić, ale to i tak jest jakieś utrudnienie), MD5 z listy sprzętu za wyjątkiem urządzeń peryferyjnych i wymiennych. Chodzi o to, że każdy komputer będzie mieć unikalny numer po przetworzeniu informacji o sprzęcie, Ty będziesz generować plik za pomocą tajnego algorytmu w oparciu o numer komputera, a potem program będzie wykonywać jakąś operację na podstawie numeru sprzętu i pliku od Ciebie i jeżeli te dwa numery pasują do siebie w jakiś sposób, to program jest aktywny.

Chodzi o to, żeby utrudnić użytkowanie na 10 komputerach naraz przy zakupie jednej licencji.

Spotkałem się z rozwiązaniem również takim, że aplikacja desktopowa wymaga zarejestrowania się w internecie na stronie producenta i owa apka łączy się z internetem za każdym razem, aby sprawdzić, czy użytkownik ma licencję i prawo użytkowania programu. W ten sposób jest jeszcze trudniej oszukać system i generować więcej instalacji niż jest zapłaconych.

1

Pytanie tylko, czy to oprogramowanie jest na tyle istotne, aby je chronić w ten sposób? 😉

Pamiętaj, że takie zabezpieczenia to miecz obosieczny — z jednej strony zwiększają bezpieczeństwo, z drugiej mogą i często irytują odbiorców końcowych. Zobacz jakie baty dostawali wydawcy gier za swoje DRM-y. Tak więc jeśli już zdecydujesz się na chronienie swoich kopii, to zwróć uwagę na to, aby uczciwy klient nie użerał się z zabezpieczeniami.

Najprostsze rozwiązanie to przy zakupie licencji dostarczyć klientowi klucz produktu. Przy instalacji sprawdza się klucz, a następnie robi fingerprint urządzenia, wysyła go na serwer i przypisuje do użytkownika. Podczas rozruchu sprawdza się klucz oraz robi się fingerprint (tak samo jak wcześniej), a następnie dane wysyła na serwer i waliduje. Jeśli dane są dobre to program się uruchamia, a jeśli nie to informacja o błędzie. Można w ten sposób nie tylko sprawdzać czy użytkownik ma legitną kopię, ale też ograniczać możliwość instalacji do konkretnej liczby urządzeń.

Są jednak przypadki brzegowe, które należy uwzględnić. Jeśli użytkownik odinstaluje oprogramowanie będąc offline, albo dysk mu padnie i kupi nowy, deinstalator albo nie będzie w stanie poinformować serwera, albo w ogóle nie zostanie uruchomiony. Użytkownik musi mieć możliwość usunięcia danych takiego urządzenia z serwera, aby mógł zainstalować nową kopię. Albo ISP ma awarię, komputer jest offline, a użytkownik potrzebuje skorzystać z programu — walidacja licencji jest w takim przypadku niemożliwa.

Takich przypadków jest wiele i trzeba to dobrze przemyśleć, tak aby użytkownik mógł wygodnie instalować i używać programu. Dlatego samodzielne implementowanie takiego systemu może być bardzo dużym wyzwaniem. Poczytaj co w trawie piszczy na ten temat.

0

W aplikacji swojej zrobiłem tak że, dodałem też plik zaszyfrowany z 18 tyś zaszyfrowanymi kluczami i gdy wprowadzałem klucz licencyjny program porównywał z odszyfrowywanymi kluczami z pliku i wyszukiwał, jeśli znalazł taki klucz to zapisywał do pliku license.lic i do rejestru, taka baza kluczy waży 247 kb

andrzejlisek napisał(a):

Jeżeli klient ma 10 komputerów, to powinien kupić jedną czy 10 licencji? Jeżeli 10 licencji, to proponuję odczytywać z systemu jakieś unikatowe parametry, np. MAC karty sieciowej (ten numer da się zmienić, ale to i tak jest jakieś utrudnienie), MD5 z listy sprzętu za wyjątkiem urządzeń peryferyjnych i wymiennych. Chodzi o to, że każdy komputer będzie mieć unikalny numer po przetworzeniu informacji o sprzęcie, Ty będziesz generować plik za pomocą tajnego algorytmu w oparciu o numer komputera, a potem program będzie wykonywać jakąś operację na podstawie numeru sprzętu i pliku od Ciebie i jeżeli te dwa numery pasują do siebie w jakiś sposób, to program jest aktywny.

Chodzi o to, żeby utrudnić użytkowanie na 10 komputerach naraz przy zakupie jednej licencji.

Spotkałem się z rozwiązaniem również takim, że aplikacja desktopowa wymaga zarejestrowania się w internecie na stronie producenta i owa apka łączy się z internetem za każdym razem, aby sprawdzić, czy użytkownik ma licencję i prawo użytkowania programu. W ten sposób jest jeszcze trudniej oszukać system i generować więcej instalacji niż jest zapłaconych.

Szyfrować za pomocą MD5?

3
Programista Art napisał(a):

W aplikacji swojej zrobiłem tak że, dodałem też plik zaszyfrowany z 18 tyś zaszyfrowanymi kluczami i gdy wprowadzałem klucz licencyjny program porównywał z odszyfrowywanymi kluczami z pliku i wyszukiwał, jeśli znalazł taki klucz to zapisywał do pliku license.lic i do rejestru, taka baza kluczy waży 247 kb

Wszystko fajnie, ale za pomocą RE można znaleźć i wyciąć wszystkie branche dotyczące walidacji, przygotować patch i nigdy więcej nie mieć problemu z uruchomieniem programu bez żadnego sprawdzania poprawności. Nawet jeśli się nakombinujesz, poukrywasz walidację licencji i zobfuskujesz kod, to zdeterminowany cracker te zabezpieczenia prędzej czy później pokona — to tylko kwestia czasu. Im ważniejsze oprogramowanie, tym większa szansa, że pojawi się w sieci crack/patch/keygen.

W dodatku lampka mi się zapala widząc, że dostarczyłeś klientowi plik z masą kluczy. Będą bardzo pomocne w procesie przygotowywania keygena. 😉

0

Jeszcze nie sprzedawałem tej aplikacji :) ale jest gotowa, zastanawiam się jak zrobić dobre zabezpieczenie, chyba lepsze byłoby na serwerze trzymać bazę z kluczami i sprawdzać.

2

Nawet nie wiem jak to skomentować, trochę jestem zdruzgotany. Baza kluczy nie powinna być dostępna dla nikogo prócz ciebie — klient kupuje licencję, to dostaje swój klucz i tyle. Walidację licencji wykonuj w trakcie instalacji, przesyłając odpowiednie dane na serwer i zwracając odpowiedź — dane poprawne lub nie, instalujemy lub nie.

Jeśli koniecznie musisz sprawdzać licencję każdorazowo podczas uruchamiania już zainstalowanej aplikacji, to wykonuj ten sam schemat — przesyłaj dane na serwer, waliduj i zwracaj odpowiedź, która albo pozwoli uruchomić program, albo nie.

Żadnych baz kluczy u klienta, bo to brzmi niedorzecznie.

0

Rozumiem, poszukam info jak zrobić tak żeby kluzy licencyjne można byłoby sprawdzać w bazie danych na serwerze.

4

Szyfrować za pomocą MD5?

Nie koniecznie szyfrować. Chodzi o to, żeby uzyskać jakiś ciąg bajtów o stałej długości na podstawie konfiguracji sprzętowej, który jest unikalny dla każdego komputera i trudny do podrobienia. To jest to samo, co furious programming nazwał "fingerprint urządzenia". Zastosowany do tego algorytm nie ma większego znaczenia, ale ważne jest, żeby na tym samym komputerze generował ten sam numer za każdym razem, ale mając kilka takich samych komputerów, na każdym komputerze był inny numer.

2
furious programming napisał(a):

Wszystko fajnie, ale za pomocą RE można znaleźć i wyciąć wszystkie branche dotyczące walidacji, przygotować patch i nigdy więcej nie mieć problemu z uruchomieniem programu bez żadnego sprawdzania poprawności. Nawet jeśli się nakombinujesz, poukrywasz walidację licencji i zobfuskujesz kod, to zdeterminowany cracker te zabezpieczenia prędzej czy później pokona — to tylko kwestia czasu. Im ważniejsze oprogramowanie, tym większa szansa, że pojawi się w sieci crack/patch/keygen.

Ale w czym Twoje rozwiązanie bazujące na Internecie jest w takim przypadku lepsze? Fragment kodu odpowiedzialny za sprawdzanie licencji poprzez połączenie z serwerem można wynopować równie łatwo.

furious programming napisał(a):

Najprostsze rozwiązanie to przy zakupie licencji dostarczyć klientowi klucz produktu. Przy instalacji sprawdza się klucz, a następnie robi fingerprint urządzenia, wysyła go na serwer i przypisuje do użytkownika. Podczas rozruchu sprawdza się klucz oraz robi się fingerprint (tak samo jak wcześniej), a następnie dane wysyła na serwer i waliduje. Jeśli dane są dobre to program się uruchamia, a jeśli nie to informacja o błędzie. Można w ten sposób nie tylko sprawdzać czy użytkownik ma legitną kopię, ale też ograniczać możliwość instalacji do konkretnej liczby urządzeń.

0
Manna5 napisał(a):

Ale w czym Twoje rozwiązanie bazujące na Internecie jest w takim przypadku lepsze?

Ale to nie mój pomysł, żeby walidować licencję online — takie są wymagania autora tego wątku.

Fragment kodu odpowiedzialny za sprawdzanie licencji poprzez połączenie z serwerem można wynopować równie łatwo.

Nie jest to na tyle łatwe, aby klient nie mający pojęcia o RE był w stanie taki patch przygotować. Poza tym im bardziej zobfuskuje się kod wynikowy, tym trudniej będzie znaleźć instrukcje przeprowadzające walidację licencji i je wykluczyć. Idealne zabezpieczenie nie istnieje. Nawet jeśli dostarczysz klientowi fizyczny klucz, który musi być wpięty do USB aby zainstalować/uruchomić program, to mając pliki samego programu zawsze można za pomocą RE tę walidację ”wynopować”.

Jedyne czego nie da się ominąć, to korzystanie z oprogramowania, które działa po stronie serwera i trzeba się zalogować, aby móc z niego korzystać. Klient nie ma dostępu do plików oprogramowania, więc niczego nie może zrobić.

0

Ogólnie planuje sprzedawać apkę i dopiero kto zakupił licencje otrzyma instalator z kluczem, wątpię że ta osoba będzie chciała komuś dawać instalator do crakowania jeśli zapłaciła na przykład 2500 zł, dlatego myślę że baza kluczy zaszyfrowana nie jest chyba zła o ile dobrym szyfrowaniem będzie zaszyfrowana, może AES, Twofish

2

Szyfrować za pomocą MD5?

MD5 jest funkcją wyliczającą skrót, podobnie jak algorytmy SHA-XXX
MD5 nic nie szyfruje.
Do szyfrowania najczęściej służą algorytmy AES albo RSA. AES z kluczem symetrycznym i RSA z dwoma kluczami, publicznym i prywatnym

0
Programista Art napisał(a):

[…] dlatego myślę że baza kluczy zaszyfrowana nie jest chyba zła o ile dobrym szyfrowaniem będzie zaszyfrowana, może AES, Twofish

Pytanie nie jest o to, jak sensownie zaszyfrować te klucze, a o to, po co w ogóle całą ich bazę przekazywać każdemu klientowi?

3

Odpowiem Ci tak ... czego byś nie zrobił, jak się nie zabezpieczył i tak jest szansa, że ktoś będzie od Ciebie sprytniejszy i obejdzie w taki czy inny sposób te Twoje zabezpieczenia. Swojego czasu kumpel naipsał bota do diablo, który obchodził zabezpieczenia game guard'a więc zwykły ziomeczek z polski zagrał na nosie blizzardowi także nie ma się co za bardzo nad tym rozwodzić bo zawsze znajdzie się ktoś kto pomyśli o czymś o czym ty zapomniałeś

2

Tzn najważniejsze pytanie to aplikacja offline czy online ?

Co do klucza licencyjnego nie wymyślaj od nowa. Zobacz jak to robią w jakis projektach os albo uzyj jakis gotowców jak np
https://www.treekslicensinglibrary.com/
https://www.crypkey.com/
https://keygen.sh/

Jeżeli twój użytkownik docelowy jest na windowsie uzyj po prostu windows store do zarządzania licencjami.

W przypadku online. Przenosisz część kluczowej logiki na serwer i to jest jedyna możliwość aby zabezpieczyć się przed wyżej wspomnianymi casami.

Dodatkowo możesz generować paczkę per client i jeżeli znajdziesz w sieci to uruchamiać prawnika :p.

0

Aplikacja na windows offline, co znaczy "generować paczkę per client"?

2

Tzn dodawać do paczki która wysyłasz do klienta wbudowany identyfikator i budujesz paczke per client przez to wiesz który build wysłałeś któremu klientowi. Ala taki znak "wodny". Przy czym to musi być nie rzucające się w oczy. Np dodawanie podczas buildu pola id gdzies w kodzie.
Ale jak robisz na windows to bym po prostu uzył windows stora do zarządzania licencjami. Odejdzie ci w ciul problemów jak płatności itd.

1

To nie musi być faktycznie jakiś unikalny identyfikator zaszyty gdzieś w pliku wykonywalnym czy innym. Wystarczy, że każdy klient otrzyma np. instalator, który będzie charakteryzował się unikalną sumą kontrolną. Jeśli taki plik wycieknie to od razu będzie wiadomo który z twoich klientów ”podzielił się” licencją ze światem. Różne podejścia są stosowane, ale każde z nich dotyczy po prostu identyfikacji tego, kto złamał warunki licencji.

Ale to też da się obejść, więc znów — to może być gra nie warta świeczki.

0

@furious programming Dlatego akcje z prawnikiem odpalasz raz ale na grubo :v. Ofc to nie jest tez tak prosto. Ale generalnie sporo firm tak zrobiło takich duzych :p. I znam SH które płaciło całkiem spore kary za uzycie OS bez licencji w tym przypadku to był itext.

2

Jednym z największych graczy, którzy bardzo dbają o to, aby ich software nie był piracony, jest Autodesk. Walczą z piratami od dekad, namierzają nieprawidłowe kopie i pozywają. To dotyczyło również firm, które miały zakupione licencje, ale korzystały z nich na większej liczbie stanowisk niż licencja przewidywała.

Tyle że Autodesk ma fundusze na specjalistów, na korzystanie z najlepszych rozwiązań dotyczących zabezpieczeń antypirackich i oczywiście na zespół prawników, gotowych do walki. Jak się ma rok w rok miliardowe przychody to i ma się spore możliwości. 😉

0
Programista Art napisał(a):

Ogólnie planuje sprzedawać apkę i dopiero kto zakupił licencje otrzyma instalator z kluczem, wątpię że ta osoba będzie chciała komuś dawać instalator do crakowania jeśli zapłaciła na przykład 2500 zł, dlatego myślę że baza kluczy zaszyfrowana nie jest chyba zła o ile dobrym szyfrowaniem będzie zaszyfrowana, może AES, Twofish

Czemu osoba, która kupiła program i klucz miałaby nie dawać go innym? Nawet jeśli nie za darmo, to mogłaby sprzedawać kopie po cenie niższej od ceny oryginału, albo po prostu zrzucić się na program w kilka osób i używać tej samej licencji.

Schadoow napisał(a):

Tzn dodawać do paczki która wysyłasz do klienta wbudowany identyfikator i budujesz paczke per client przez to wiesz który build wysłałeś któremu klientowi. Ala taki znak "wodny". Przy czym to musi być nie rzucające się w oczy. Np dodawanie podczas buildu pola id gdzies w kodzie.

Teoretycznie bardzo dobra metoda. Mając jeden egzemplarz właściwie nie da się w ogóle wykryć, że takie zabezpieczenie jest stosowane. Jeśli ta sama osoba zechce kupić drugi, to dasz mu z takim samym identyfikatorem. Cracker będzie więc zawsze potrzebował drugiej osoby do kupienia egzemplarza o innym identyfikatorze, żeby móc proóbować go jakoś znaleźć i zatrzeć bez uszkodzenia programu. O ile w ogóle się zorientuje, przed czym możesz się dodatkowo ustrzec zwodząc crackera na zły trop jakimś prostym systemem kluczy mającym wyglądać na główne i jedyne zabezpieczenie przed piractwem. A więc teoretycznie sposób bardzo dobry, ale trzeba popatrzeć na to jeszcze z innej strony. Od każdego klienta będziesz musiał dostać jego dane osobowe, upewnić się, że są prawdziwe, i przechowywać je zgodnie z RODO. Do tego co właściwie zrobisz, jeśli dowiesz się o tym, że któryś klient udostępnił swoją kopię? Będziesz miał czas i pieniądze (dla prawnika) na pozywanie każdego? W tym właśnie wszelkie zabezpieczenia prewencyjne są znacznie lepsze. No i dochodzi jeszcze to, że pirat nie musi od razu wrzucać kopii programu do Internetu - jeśli ktoś kupi np. właśnie jedną licencję na kilka osób to nie wykryjesz tego.

Schadoow napisał(a):

Jeżeli twój użytkownik docelowy jest na windowsie uzyj po prostu windows store do zarządzania licencjami.

Może byłoby to najwygodniejsze, ale może wystąpić wiele problemów.

  • Z góry uniemożliwi korzystanie z programu na wersjach Windows starszych niż 8.
  • Jeśli kiedyś zdecydujesz się wydać program na jakiś inny system, to będziesz musiał wymyślić inny system autoryzacji i zapewnić użytkownikom posiadającym licencję w postaci aplikacji wykupionej w sklepie również klucze do wersji na inne systemy. Tyczy się to oczywiście każdego rozwiązania dostarczanego przez określoną platformę.
  • Nie wiem jak to jest, ale Microsoft może pobierać jakąś prowizję od zakupu płatnych aplikacji w sklepie. A jeżeli aktualnie nie pobiera, to może zacząć. Albo zwyczajnie z jakiegoś powodu usunąć aplikację ze sklepu.
  • Być może będziesz chciał czasami przyznać komuś licencję w nietypowym trybie, np. w ramach jakiejś promocji, i z tym może być problem jeżeli w sklepie po prostu musisz zapłacić i tylko wtedy masz dostęp do programu.
Schadoow napisał(a):

W przypadku online. Przenosisz część kluczowej logiki na serwer i to jest jedyna możliwość aby zabezpieczyć się przed wyżej wspomnianymi casami.

Z tym trzeba ostrożnie, bo to jest jednak co innego niż połączenie z serwerem w celu samej autoryzacji. Przede wszystkim, na serwer będą przesyłane dane, które użytkownik przetwarza za pomoca programu, a mogą być one różnego rodzaju danymi wrażliwymi.

0
Programista Art napisał(a):

Czy coś w tym kodzie można ulepszyć żeby można było wykorzystać w aplikacjach komercyjnych, żeby było bardziej bezpieczne?

Nie słuchaj powyższych pierdół z autoryzacją online. Jedyne 100% skuteczne rozwiązanie (zakładam OS jako Windows**).

  • dodajesz do swojego programu dummy kernel driver, driver ma zaszyty klucz publiczny którym weryfikujesz swój certyfikat oraz jakąś krytyczną część logiki bez której aplikacja staje się bezużyteczna
  • zgodnie z procedurą sam sterownik musi zostać podpisany kluczem autoryzowanym przez MS, to kosztuje ale przecież twoja aplikacja jest komercyjna, prawda?
  • przy uruchomieniu aplikacji użytkownik musi podać licencję której częścią jest wystawiony przez ciebie certyfikat, jego autentyczność weryfikujesz za pomocą klucza zaszytego w sterowniku, certyfikat zapisujesz, całą procedurę powtarzasz przy każdym uruchomieniu programu

I teraz żeby obejść powyższe zabezpieczenie to użytkownik musi w zasadzie skompromitować cały proces bezpiecznego uruchamiana w Windowsie co w zasadzie oznacza że równie dobrze może spiracić wszystko (tip: nikt normalny w komercyjnym użytku tak nie zrobi). Działa bez żadnego wymogu online, kosztuje cię jedynie podpis sterownika z autoryzacją dla MS.

** nie wiem jak dla innych OS, dla MacOS wystarczy dystrybucja przez sklep co może być prostsze/tańsze. Sterowniki też wymagają podpisu. Komercyjna aplikacja na Linuxa? No cóż...

0

Czemu osoba, która kupiła program i klucz miałaby nie dawać go innym? Nawet jeśli nie za darmo, to mogłaby sprzedawać kopie po cenie niższej od ceny oryginału, albo po prostu zrzucić się na program w kilka osób i używać tej samej licencji.

Ty tak serio? Przecież to jest łamanie praw autorskich i łamanie licencji.
Kupując program musisz zaakceptować EULA. A tam jest napisane, że autor programu udziela CI jednej licencji. Nie masz prawa jej dalszego "odsprzedawania". OK, możesz sprzedać swoją licencję, ale wtedy Ty ją tracisz. Nie możesz kupić jeden raz programu a potem go 10 razy "odsprzedać" - bo to jest już jawne piractwo komputerowe.

A co do kupowania "na spółkę" - spoko, możesz się zrzucić z kumplami i razem korzystać. Ale jeśli masz jedną licencję, to instalujesz to na jednej maszynie, a nie że każdy z kumpli odpali u siebie niezależnie od reszty, bo się zrzucili na zakup.

Zresztą zobacz - jakby zrobić tak, jak piszesz to np. jakaś duża firma z 50 komputerami: po co ma kupować 50x Worda albo jakiegoś CAD'a, skoro można kupić jedną licencję, a potem ją zainstalować na wszystkich kompach. To po prostu tak nie działa.

co właściwie zrobisz, jeśli dowiesz się o tym, że któryś klient udostępnił swoją kopię? Będziesz miał czas i pieniądze (dla prawnika) na pozywanie każdego?

Naprawdę, postaraj się nie pisać o rzeczach, o których nie masz zbytnio pojęcia. Piractwo jest ścigane z urzędu, więc wystarczy zgłoszenie na policję/do prokuratury takiego faktu plus dostarczenie dowodów i dalej to leci z automatu. Powtarzam - nie jest to ścigane z oskarżenia prywatnego/na drodze cywilnej, tylko w ramach procedury karnej. Oczywiście - nie oznacza to, że później nie możesz na drodze cywilnej dochodzić zadośćuczynienia/odszkodowania/pokrycia poniesionych strat.

1
loza_prowizoryczna napisał(a):

Nie słuchaj powyższych pierdół z autoryzacją online. Jedyne 100% skuteczne rozwiązanie (zakładam OS jako Windows**).

Nie ma w 100% skutecznego zabezpieczenia. Gdyby tak było, to piractwo by od dawna nie istniało, a jak wiemy istnieje i nawet największe firmy nie są w stanie w 100% zabezpieczyć swoich produktów, pomimo niemal nieograniczonych środków. Poza tym wszystko co do tej pory zostało napisane, to raptem wylistowane najróżniejsze sposoby stosowane powszechnie, nie żadne pierdoły.

1

@Manna5

Od każdego klienta będziesz musiał dostać jego dane osobowe, upewnić się, że są prawdziwe, i przechowywać je zgodnie z RODO.

To nie rakieta nie ma cie zabezpieczyć przed każdym możliwym przypadkiem bo sie nie da. Ma dać ci po prostu maksymalnie dużo możliwości wykrycia sprawcy i dać możliwość podjęcia kroków prawnych.

przechowywać je zgodnie z RODO

Jak bardzo się tego obawiasz to delegujesz miejsce zakupu do jakiegos SaaS a samemu trzymasz nr licencji i nr kontraktu z serwisu. Możesz użyć https://gumroad.com/ albo https://stripe.com albo właśnie ms store.

Jeśli kiedyś zdecydujesz się wydać program na jakiś inny system, to będziesz musiał wymyślić inny system autoryzacji i zapewnić użytkownikom posiadającym licencję w postaci aplikacji wykupionej w sklepie również klucze do wersji na inne systemy.

Nic niezwykłego w wielu produktach które realizowałem dla klientów integrowałem sie z wieloma marketplacami(typu np aws marketplace) stopień integracji i jak to zrobisz zalezy od ciebie. Poza tym licencja != autoryzacja. A jak już bardzo chcesz sie tak spiąć to realizujesz autentykacje i autoryzacje zgodnie ze standardem openID i w aplikacji realizujesz możliwość wielu Idp.

Będziesz miał czas i pieniądze (dla prawnika) na pozywanie każdego?

Jeżeli nie tzn, że zabawa jest niewarta rozważania.

Z góry uniemożliwi korzystanie z programu na wersjach Windows starszych niż 8.

Serio ? Jak planujesz coś sprzedawać i nie jest to SCADA dla siłowni jądrowej to w dupie masz użytkowników ze starszą niż aktualna wersja - 1 na każdym systemie(w tym android, ios itd)

Nie wiem jak to jest, ale Microsoft może pobierać jakąś prowizję od zakupu płatnych aplikacji w sklepie

Oczywiście, że za darmo nikt ci nie da xD. Czas to też koszt.

@loza_prowizoryczna No patrz a gry i programy dalej są piracone na windowsie, a wszystkie są podpisywane :p.

0
Schadoow napisał(a):

Tzn najważniejsze pytanie to aplikacja offline czy online ?

Co do klucza licencyjnego nie wymyślaj od nowa. Zobacz jak to robią w jakis projektach os albo uzyj jakis gotowców jak np
https://www.treekslicensinglibrary.com/
https://www.crypkey.com/
https://keygen.sh/

Jeżeli twój użytkownik docelowy jest na windowsie uzyj po prostu windows store do zarządzania licencjami.

W przypadku online. Przenosisz część kluczowej logiki na serwer i to jest jedyna możliwość aby zabezpieczyć się przed wyżej wspomnianymi casami.

Dodatkowo możesz generować paczkę per client i jeżeli znajdziesz w sieci to uruchamiać prawnika :p.

Chodzi o Microsoft store to jest sklep z aplikacjami? jak zarządzać kluczami?

0
furious programming napisał(a):

Nie ma w 100% skutecznego zabezpieczenia. Gdyby tak było, to piractwo by od dawna nie istniało, a jak wiemy istnieje i nawet największe firmy nie są w stanie w 100% zabezpieczyć swoich produktów, pomimo niemal nieograniczonych środków.

Może po prostu nie chcą? Na 100% to nie zabezpieczysz ale na 99% jak najbardziej - choćby wypalając podpisy cyfrowy w warstwie sprzętowej na etapie składania produktu (jak np. robi Apple). Tyle że to wymaga poniesienia pewnych kosztów i kontroli nad łańcuchem produkcyjnym czego na normalnym rynku PC raczej nie uświadczysz. UEFI i MSowy Safe Boot to takie drobne kroczki w tym kierunku ale materia jest powolna.

1

@Programista Art Tak. https://learn.microsoft.com/en-gb/windows/uwp/monetize/use-receipts-to-verify-product-purchases
Pamiętaj, że przy zakupach licencji musisz ojebać casy jak płatność, zwrot, odstąpienie od umowy itd. W przypadku mark

@loza_prowizoryczna Ale po co tutaj gdybasz. Na ten moment sie nie da i tyle xD. Chcesz to zrób startup i zaproponuj takie machanizmy XD.

1
Schadoow napisał(a):

@loza_prowizoryczna Ale po co tutaj gdybasz. Na ten moment sie nie da i tyle xD. Chcesz to zrób startup i zaproponuj takie machanizmy XD.

Parafrazując - skoro guma nie ma skuteczności 100% to zostańmy przy kalendarzyku? W sumie po bożemu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1