Jak stworzyć wersję demo aplikacji działającą przez X dni?

0

Witam.
Próbuje w swoim programie utworzyć wersję demo aplikacji na X dni. Do tego celu posługuję się zmienną "data_exp", w której mam zapisaną wartość do kiedy program będzie aktywny.
Problem jest w tym, że gdy użytkownik wybierze aktywację wersji demo na X dni to ja sprawdzam jaka jest aktualnie data w systemie i od tej daty wszystko zależy. Natomiast jeśli przed aktywowaniem aplikacji ustawi datę systemową na inną to automatycznie moja "data_exp" jest źle ustawiona.

Używam również opcji pobierania daty z internetu używając komponentu TidSNTP aby sprawdzić czy aktualnie ustawiona data w systemie jest poprawna.

Niestety jeśli użytkownik będzie offline i przestawi sobie datę systemową to nadal można obejść takie zabezpieczenie.

Czy znacie jakieś sposoby aby ustawić możliwość uruchomienia programu na X dni?

4

Tak zupełnie się przed tym nie zabezpieczysz.
Na pewno powinieneś kontrolować czy data się nie przesuwa do tyłu. Do tego możesz liczyć godziny pracy aplikacji - bo jak się okaże że w czwartek ósmego kwietnia użytkownik pracował 39 godzin to znaczy że coś się dzieje dziwnego ;)

3

Bez uruchamiania aplikacji w trybie online nie widzę sposobu prócz podanego przez @cerato wcześniej. Lepszym rozwiązaniem jest ilość uruchomień lub sumaryczna ilość przepracowanych godzin. Ja w takich przypadkach przeważnie daję użytkownikowi klucz licencyjny, w którym są zaszyte stosowne informacje, a następnie przy uruchomieniu programu apka łączy się na serwer porównuje wartości z licencji z tym co mam w systemie i w przypadku majstrowania w pliku/datach/konfigu aplikacja się od razu zamyka. Jednak kiedyś jeden z moim wykładowców mi powiedział, że nie ma zabezpieczeń nie do złamania i jeśli ktoś poświęci swój czas na złamanie nawet najprostszego zabezpieczenia w Twojej aplikacji to możesz być z Siebie dumny bo to oznacza, że napisałeś wartościowy kawałek kodu.

4

W obecnych czasach trudno "siedzieć" na wstecznej dacie (choćby przez to że nie ma kompów bez neta a na nieodpowiedniej dacie problemy z certyfikatami SSL) więc jeżeli ktoś wyłącza kompa na noc można założyć, że bazową poprawną datą jest data dostępu (nie jego utworzenia) do jakiegoś systemowego pliku dajmy na to C:\Windows\system.ini
Teraz tak jeżeli bazowa data jest późniejsza niż normalnie pobrany czas systemowy to znaczy, że ktoś w kulki leci a tak to normalnie liczyć.

0

@woolfik: Ja również mam kod licencyjny gdzie zaszyfrowane są różne informacje, w tym właśnie data do kiedy program ma być aktywny. Wszystko działa w porządku za wyjątkiem właśnie tego momentu aktywacji demo na X dni. Jeśli użytkownik ma połączenie z internetem to wtedy właściwą datę również jestem w stanie ustawić. Jedynie można oszukać ustawienia będąc offline i zmieniając datę w systemie.

Zapytam jeszcze Cię woolfik: co w momencie gdy użytkownik nie ma połączenia z internetem i Twoja aplikacja nie połączy się z serwerem aby sprawdzić licencję? Blokujesz aplikacje czy pozwalasz pracować?

No nic, pomyślę jeszcze nad opcją ilości uruchomień i/lub przepracowanych godzin.

1

Zależy od aplikacji. W systemach księgowych, magazynowych itd tam gdzie są dokumenty i ich data jest ważna to robię myk, który użytkownikowi nic nie da jeśli chodzi o zmianę daty bo przy uruchomieniu pobieram datę i jak jest w offline to tą datę zapisuję w programie. W efekcie użytkownik uruchomi program ale np wystawiając FV wstawi mu się data z uruchomienia aplikacji. Czyli mechanizm cofam datę, uruchamia apkę w offline, i przywracam datę nic mu nie da bo wszystkie dokumenty, raporty itd będą z datą uruchomienia. Wiadomo, że jak się uprze to znajdzie offset w exe i podmieni w trakcie działania aplikacji ale tak jak pisałem nie ma zabezpieczenia, którego nie da się złamać. W aplikacjach gdzie data nie ma znaczenia po prostu zamykam program i nie pozwalam uruchomić (choć na to też są sposoby np podmieniając hosta i sprawdzając pakiety latające z aplikacji na serwer i z powrotem). Trzecia opcja to programy, które mogą pracować offline ale bez licencji i wtedy kasuję za to jednorazowo :)

1
jm0x01 napisał(a):

Próbuje w swoim programie utworzyć wersję demo aplikacji na X dni.

Czemu chcesz mieć wersję demo z ograniczeniem czasowym?

Wersja demo, jak sama nazwa wskazuje, to wersja demonstracyjna, posiadająca tylko ułamek pełnej funkcjonalności. Ograniczenie czasowe wykorzystuje się w wersji trial — jest to de facto pełna wersja programu, ale ograniczenie wystepuje nie w postaci braku funkcji, a w formie limitu czasowego. Nigdy nie spotkałem się z kombinacją tych wersji, czyli z wersją okrojoną i z limitem czasowym.

jm0x01 napisał(a):

Jedynie można oszukać ustawienia będąc offline i zmieniając datę w systemie.

Można też otworzyć plik wykonywalny w edytorku, znaleźć miejsce w kodzie maszynowym, w którym wykonywane jest sprawdzanie daty i go po prostu ominąć skokiem bezwarunkowym. Wystarczy zmienić kilka bajtów i całe zabezpieczenie szlag trafia. A tutoriali o tym jak to zrobić nie brakuje.

No nic, pomyślę jeszcze nad opcją ilości uruchomień i/lub przepracowanych godzin.

To wszystko i tak może okazać się bez sensu, bo aplikacja tak czy siak musi gdzieś te informacje przechowywać — w rejestrze, pliku itd. użytkownik zawsze będzie miał do takich informacji dostęp, a więc będzie mógł kombinować i próbować resetować liczniki, tak aby program się uruchomił.

Dlatego lepszym rozwiązaniem jest aktywacja produktu online, jednak to powoduje u użytkowników niezadowolenie — nie dlatego, że nie mają połączenia z Internetem, a dlatego, że czegoś się od nich wymaga. Użytkowników nie posiadających połączenia z Internetem dziś raczej nie ma (chyba że w biednych krajach).

Jeśli ktoś nie ma neta, to jak pobierze instalator? Kupi na CD w kiosku? ;)

0

@furious programming: jeśli chodzi o słówka "demo" i "trial" to w moim przypadku chodzi o "trial". Z przyzwyczajenia użyłem słowa "demo".
jeśli zaś chodzi o sposób zdobycia instalatora. To czasami ktoś może poprosić aby mu wysłać płytę CD tradycyjnie pocztą. Możliwość wystąpienia takiej sytuacji w dzisiejszych czasach niemal równa zeru, ale istnieje.

0
jm0x01 napisał(a):

jeśli zaś chodzi o sposób zdobycia instalatora. To czasami ktoś może poprosić aby mu wysłać płytę CD tradycyjnie pocztą. Możliwość wystąpienia takiej sytuacji w dzisiejszych czasach niemal równa zeru, ale istnieje.

Dlatego właśnie nie powinieneś się taką grupą przejmować — jest ich za mało, aby opłacalnym było tworzenie dodatkowych rozwiązań. Skup się na tym, aby typowy odbiorca mógł łatwo i wygodnie pobrać produkt i go zarejestrować, a nie na tym, aby być w stanie zadowolić każdego użytkownika, nawet najbardziej zacofanego technologicznie.

0
jm0x01 napisał(a):

W Twoim przypadku najlepszym rozwiązaniem jest ograniczenie na ilość uruchomień. Jednak chyba jest to najłatwiejszy sposób na złamanie: wiadomo, że aplikacja musi coś zapisać na zewnątrz, a to już można sprawdzić, czy to w plikach, czy w rejestrze.

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