Avatar billede landsbytossen Nybegynder
12. oktober 2001 - 08:49 Der er 3 kommentarer og
4 løsninger

Tidsbegrænsning på prøveprogram

Har lavet et program, der nu skal score klatten ved salg på hele gloden. Er der i den forbindelse nogle der kender til metoder, der kan begrænse et programs funktionalitet til 10 dage. Har selv overvejet:
1. En registrering i databasen der tæller ned. Når de 10 dage er gået virker programmet ikke mere. Nu er det bare sådan at registreringsdatabasen kan nemt redigeres. Kan man evt kryptere en streng i registreringsdatabasen, der indeholder information om udløbsdatoen.
2. Man laver en ressource dll og lægger den \"skjult\" på brugers maskine, nok i windows kataloget. I den kan man så styre den tid, der er tilbage til at prøve programmet af i.

Er der nogle der har gode forslag ?
Avatar billede pellelil Nybegynder
12. oktober 2001 - 09:21 #1
I stedet for at tællle ned, kunne du jo (i krypteret form) skrive den sidste dato programmet vil virke. I denne krypteret værdi \"indbygger\" du en eller anden form for \"check ciffer\" således den kan holde rede på om \"nogen har pillet\".

Under installation af programmet skal du således undersøge om den pågældende nøgle allerede findes i registrerings databasen. Dette vil indikere at bruger blot igen forsøger at installere programmet og så skal du ikke give den 10 yderligere dage (eller hvad du nu beslutter).

Medmindre de knækker din \"kryptering/checkciffer\" algoritme så vil de ikke være i stand til at generere nye nøgler i Reg-Databasen. Bevars hvis de gidder at ændre datoen på deres PC hver gang de skal køre dit program så vil det bliv ved med at virke - men hvis de vil \"gå så langt\" så skulle de næsten have lov.

Uanset hvad du beslutter dig for at gøre så vil dette her aldrig kunne gøres 100%
Avatar billede morten_s Nybegynder
12. oktober 2001 - 10:12 #2
Når jeg installere programmer som jeg ved har tidsbegrænsning, så plejer jeg altid lige og skrue datoen et par år frem *GGG*

Så hvis du vil klare ovenstående skal du med andre ord gemme installations datoen og kigge på om nogen pludselig skruer datoen tilbage ;-((
Avatar billede stone Forsker
12. oktober 2001 - 10:33 #3
brug componentet \"regisdays fra:
http://go.to/masdp
Med dette component er det ikke muligt at stille tiden tilbage.

Quick Reference:
                TRegistDays inherits from TComponent.

                Key-Properties:

                  DaysToUse:  Specifies the number of days the appliction
                              could be used without registering it.

                  DaysLeft:  The number of days left before registering is
                              nescessary.

                  Pd:        Modified in version 3.0.
                              The Password. The string that should be used when
                              registering the application.
                              Write to this property at design-time, and be sure
                              to remember it. When entered, this property will
                              show a coded password. In earlier versions the
                              password wasn\'t coded and could simply be read in
                              the exe-file with an text-editor!!!
                              A slight oversight...

                  Fake-GUID:  This string is the entry label in Registry. Keep
                              it as anonymous as possible.

                  RegNumber:  A number used for Key-name and Key-data entries in
                              Registry. Randomly (1-999999999) generated at
                              component creation, or choosen by user.

                  Registered: True if application was successfully registered.


                Key-Methods:

                  Init:          Function that should be called each time the
                                application is runned. Call if from the
                                MainForm OnCreate event. Returns TimesLeft.
                                left as a string.

                  CheckPassWord: Function that checks the input string against
                                the Password. Returns true if equal.

                  RegisterApp:  Registers the application. Sets Key-name and
                                Key-data equal to RegNumber.



Avatar billede pellelil Nybegynder
12. oktober 2001 - 10:38 #4
Med hensyn til at skrue datoen frem INDEN man installerer programmet kunne man jo kigge på dato\'en af de filer som windows \"piller ved\" (i forbindelse med opstarten). Denne dato fil således afspejle den dato hvor maskinen blev bootet. Så kan man jo bare sætte datoen frem - boote - og SÅ installere produktet. Men man kan jo se om forskellen på Dags dato og den dato hvortil programmet vil virke overstiger X (evt. 30 dage) hvis dette er tilfældet så kan det tyde på at \"nogen har være kreative\".
Avatar billede borrisholt Novice
12. oktober 2001 - 11:21 #5
prøv den her ... Den viser grund princippet :

const
  GUID : String = \'{300C7CF3-98E9-4EBD-B7AC-8D3AC93FF4A9}\';
  EvalTid = 10; //10 dage
type
  TMyDataStruct = packed record
    Nonsens : ShortString;
    InstDate : TDateTime;
  end;

procedure TForm1.FormCreate(Sender: TObject);
  function DayDiff(Beginning: TDateTime; Ending:TDateTime): integer;
  begin
    Result := Trunc(Ending -Beginning);
  end;
var
  i : Integer;
  MyDataStruct : TMyDataStruct;
  Registry : TRegistry;

begin
  Registry := TRegistry.Create;
  Randomize;

  with Registry do
  begin
    RootKey := HKEY_CLASSES_ROOT;
    OPenKey(\'CLSID\', false);
    if not OPenKey (GUID, false) then
    begin
      OpenKey(GUID, true);
      i := Random(255);
      repeat
        MyDataStruct.Nonsens[i] := chr(Random(233) + 32);
        dec(i);
      until i = 1;
      MyDataStruct.InstDate := Now;
      OpenKey (\'InprocServer32\',true);
      WriteBinaryData(\'\',MyDataStruct, SizeOf(MyDataStruct));
      Destroy;
    end
    else
    begin
      OpenKey(GUID, false);
      OpenKey (\'InprocServer32\',false);
      ReadBinaryData(\'\',MyDataStruct, SizeOf(MyDataStruct));
      i := DayDiff(NOW, MyDataStruct.InstDate);

      if i < 0  then
      begin
        MessageDlg(\'Du fusker med datoen din nar !!!!!!\', mtError, [mbOk], 0);
        Application.Terminate;
      end;

      if i > EvalTid then
      begin
        MessageDlg(\'Game over !!!!!!\' + #13 + \'Nu skal du købe !!!!\', mtError, [mbOk], 0);
        Application.Terminate;
      end;

      i := EvalTid - i;
      MessageDlg(\'Du har nu \'+IntToStr(i)+\' Dage tilbage  !!!!!!\', mtError, [mbOk], 0);
      Destroy;
    end;
  end;
end;


Jens B
Avatar billede borrisholt Novice
12. oktober 2001 - 11:22 #6
husk at finde på din eget GUID ....  (Tryk Shift + CTRL + g);

Jens B
Avatar billede mora Nybegynder
12. oktober 2001 - 11:34 #7
Hvis dine brugere har internet forbindelse ved opstart, kan du bruge ASP/PHP på en server til at godkende en key ...

men det kræver at de har en netværks forbindelse ved opstart ...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester