Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Demoversion Programm beenden (https://www.delphipraxis.net/166123-demoversion-programm-beenden.html)

blondervolker 31. Jan 2012 10:34

Demoversion Programm beenden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich bastle gerade an einem Beispiel um eine Demoversion zu erstellen.
Die Tools die man kaufen kann kosten richtig Kohle...

Aber mit meinem "Hobby-Wissen":-D:-D:-D komme ich nicht weiter.
Habe mal ein kleines Beispiel als Demo im Anhang.

In der Lektüre Grundlagen,Profiwissen,Kochbuch ist nix zu finden.:oops:

Vielleicht kann jemand helfen,wie man die die Daten in der Demo
auch speichern kann.

Code:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Button2: TButton;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);





  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  zaehler: Integer;

implementation

{$R *.dfm}





procedure TForm1.Button2Click(Sender: TObject);
begin
Inc(Zaehler);
  Edit1.Text := IntToStr(Zaehler);
  if Edit1.Text = '1' then Label1.Caption:='1.Versuch';
  if Edit1.Text = '2' then Label1.Caption:='2.Versuch';
  if Edit1.Text = '3' then Label1.Caption:='Testzeitraum ist beendet!';
  if Edit1.Text = '3' then Button2.Caption:='Ende!';
  if Edit1.Text = '4' then Form1.Close;

end;







procedure TForm1.FormActivate(Sender: TObject);
var f:TextFile; zahl:Integer;
begin
AssignFile(f,ExtractFilePath(Application.ExeName)+'tes.dat');
Reset(f);
Readln(f,zahl);
Inc(zahl);
CloseFile(f);
Rewrite(f);
Writeln(f,zahl);
CloseFIle(f);

Label2.Caption:='Du hast das Prog schon '+IntToStr(zahl)+' mal gestartet.Nun ist Feierabend';
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Zaehler := 0;
  Edit1.Text := IntToStr(Zaehler);

end;

end.

DeddyH 31. Jan 2012 10:39

AW: Demoversion Programm beenden
 
Mein Rat: vergiss es. Es gibt schon einige Threads hier dazu mit dem Fazit: man kann ein Programm nicht zu 100% schützen, man kann höchstens den Crack-Aufwand erhöhen. Und das ist mit externen Textdateien schon gar nicht zu erreichen. Inverstier daher Deine Zeit lieber in das eigentliche Programm, da hast Du mehr gekonnt.

blondervolker 31. Jan 2012 10:45

AW: Demoversion Programm beenden
 
Ja das stimmt.Aber ich schaue nicht nur durch das Delphi Rohr.
Die Mehrheit der Bevölkerung beschäftigt sich nicht mit dem Cracken und
Rückstellen von Systemzeiten...Die Mehrheit sind Anwender sind froh,wenn
sie ein Programm richtig bedienen können.:)
Ich denke da gerade an meine Frau...:)
Ich möchte nur Wissen wie ich oben schon genannt,die Anzahl der Programmaufrufe
speichern kann.:lol:

Steku 31. Jan 2012 10:46

AW: Demoversion Programm beenden
 
Zitat:

Zitat von DeddyH (Beitrag 1148483)
Mein Rat: vergiss es. Es gibt schon einige Threads hier dazu mit dem Fazit: man kann ein Programm nicht zu 100% schützen, man kann höchstens den Crack-Aufwand erhöhen. Und das ist mit externen Textdateien schon gar nicht zu erreichen. Inverstier daher Deine Zeit lieber in das eigentliche Programm, da hast Du mehr gekonnt.

Jo, ist wohl so...

Und als kleines Tool kannst du es ja mal damit versuchen...
http://sourceforge.net/projects/tponguard/

Grüße
Steku

Sir Rufo 31. Jan 2012 10:47

AW: Demoversion Programm beenden
 
Direkt in das Anwendungsverzeichnis zu schreiben ist eine ganz doofe Idee - oder muss der Anwender zwingend als Administrator arbeiten

Und das ist ja so durch die Brust ins Auge gehüpft und am Fuß wieder rausgesprungen:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  // Zähler erhöhen, ok
  Inc(Zaehler);
  // Zähler in ein Edit-Feld schreiben (Int->Str) ... öh soll der User das ändern können???
  Edit1.Text := IntToStr(Zaehler);
  // Wieso denn jetzt wieder Str->Int, du hast doch Zugriff auf Zaehler???
  if Edit1.Text = '1' then Label1.Caption:='1.Versuch';
  if Edit1.Text = '2' then Label1.Caption:='2.Versuch';
  if Edit1.Text = '3' then Label1.Caption:='Testzeitraum ist beendet!';
  if Edit1.Text = '3' then Button2.Caption:='Ende!';
  // Form1 ist eher fehleranfällig. Besser:
  // HauptForm schließen: Application.MainForm.Close
  // Diese Form schließen: Self.Close oder einfach Close
  if Edit1.Text = '4' then Form1.Close;
end;
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  Inc(Zaehler);
  Edit1.Text := IntToStr(Zaehler);
  case Zaehler of
    1: Label1.Caption:='1.Versuch';
    2: Label1.Caption:='2.Versuch';
    3:
      begin
        Label1.Caption:='Testzeitraum ist beendet!';
        Button2.Caption:='Ende!';
      end;
    4: Close;
  end;
end;

Sir Rufo 31. Jan 2012 10:51

AW: Demoversion Programm beenden
 
Zitat:

Zitat von blondervolker (Beitrag 1148485)
Ja das stimmt.Aber ich schaue nicht nur durch das Delphi Rohr.
Die Mehrheit der Bevölkerung beschäftigt sich nicht mit dem Cracken und
Rückstellen von Systemzeiten...Die Mehrheit sind Anwender die Fro sind,wenn
sie ein Programm richtig bedienen können.:)
Ich denke da gerade an meine Frau...:)
Ich möchte nur Wissen wie ich oben schon genannt,die Anzahl der Programmaufrufe
speichern kann.:lol:

Um eine unknackbare Demo-Version herzustellen solltest du einige Teile nicht in das Programm kompilieren.
Hat man eine Speicher-Routine, dann kann man diese in der Demo einfach ersetzen durch eine Hinweis-Box: "Wenn Sie das Programm kaufen, dann könnte ich auch speichern!"

Delphi-Quellcode:
{$DEFINE DEMO}

...

procedure SaveTheData;
begin
{$IFDEF DEMO}
  ShowMessage( 'Wenn Sie das Programm kaufen, dann könnte ich auch speichern!' );
{$ELSE}
  // Hier jetzt den echten Code zum speichern rein
{$ENDIF}
end;

blondervolker 31. Jan 2012 10:57

AW: Demoversion Programm beenden
 
Soweit bin ich noch nicht vorgedrungen.:roll:

Die "tes.dat" wird noch versteckt in einem anderen Ordner.
Dieses hier ist nur ein Beispiel.Und Windows hat viele Ordner:-D:-D:-D
Ein Dank an Bill Gates.:-D:-D:-D

Der Nutzer soll die Anwendung nur zeitlich oder als Beispiel 30 Programmaufrufe
nutzen können.

Ist es möglich den Nutzungszeitraum oder die Aurufe irgenwo direkt in der
Form zu speichern?

himitsu 31. Jan 2012 10:58

AW: Demoversion Programm beenden
 
Demos mit Zeitbegrenzung sind nicht sicher machbar.
- die Uhr kann man verstellen
- eine Uhrzeit aus dem Internetabfragen, kann man vergessen, da man meistens keinen aktiven Internetzugang voraussetzen kann und über diverse Tricks kann man sowas sowieso umgehen

Die einzig sichere Möglichkeit ist:
- bestimmten Code garnicht erst einzukompileren ('nen Button zu deaktivieren hildt nix, denn der läßt sich extrem einfach wieder aktivieren) und eine spezielle Demo-Version rauszubringen, welche sich nicht auf eine vollversion patchen läßt, da dieser nicht enthalten ist.
- also irgendwas weglassen, welchen einen dazu drängt sich dann doch mal die Vollversion zu besorgen

Zitat:

Die "tes.dat" wird noch versteckt in einem anderen Ordner.
Dieses hier ist nur ein Beispiel.Und Windows hat viele Ordner
Mir egal.
In vielen Ordner hat dein Programm sowieso keine Zugriffsrechte und verstecken kannst'e vor mir eh nix.
Und wenn sich dein Programm irgendwo an meinem System zu schaffen macht, mir dieses mutwillig zumüllen will, dann fliegt dein Programm von der Platte und ich nehm mir ein nettes Programm eines anderen Herstellers. (ich bin mir sicher, daß es besseren Alternativen geben wird)

PS: In der FORM speichern? In einer unverschlüsselten Resource, welche sich leicht ändern läßt. :lol:

Sir Rufo 31. Jan 2012 11:03

AW: Demoversion Programm beenden
 
Auch wenn ein Betriebssystem viele Ordner hat (das hat mit Bill Gates gar nichts zu tun), so haben die alle einen Sinn und Zweck - man muss sich nur damit befassen.

Es gibt zwar die Möglichkeit an eine Anwendung Daten zu hängen und dort die Anzahl der Aufrufe zu vermerken, allerdings reagieren da die Virenscanner etwas ungehalten.

Darlo 31. Jan 2012 11:22

AW: Demoversion Programm beenden
 
Ich nehme für sowas folgendes Verzeichnis:
C:\Users\[user]\AppData\Roaming

Den Ordner AppData findet ein normaler User eh nicht.
Da kannst Du ja ne verschlüsselte Datei reinlegen die die Aufrufe mitloggt. Setze bei der Datei einen bestimmten Timestamp der weit in der Vergangenheit liegt,
wenn dieser nicht mehr stimmt ist die Demoversion zu.

Um die Demo zu aktivieren muss bei mir eine Onlineverbindung bestehen und ich speichere die HDD-Id in eine Datenbank,
wenn die ID vorhanden, kann die Demo nicht mehr aktiviert werden.


Nicht 100 % sicher, aber für die meisten Anwender reicht es.

Gruß

p80286 31. Jan 2012 11:27

AW: Demoversion Programm beenden
 
Die "alternate datastreams" wären vllt. eine Möglichkeit. Aber unter W8 soll es sie nicht mehr geben, dann wären sie auch wieder eine Sackgasse.

Gruß
K-H

Sir Rufo 31. Jan 2012 11:28

AW: Demoversion Programm beenden
 
Zitat:

Zitat von Darlo (Beitrag 1148502)
Ich nehme für sowas folgendes Verzeichnis:
C:\Users\[user]\AppData\Roaming

Eine schlechte Wahl ... besser
Code:
%APPDATA%
bzw.
Code:
CSIDL_APPDATA
, dann ist Windows dafür zuständig, das richtige Verzeichnis zu liefern

Darlo 31. Jan 2012 11:39

AW: Demoversion Programm beenden
 
Zitat:

Zitat von Sir Rufo (Beitrag 1148505)
Zitat:

Zitat von Darlo (Beitrag 1148502)
Ich nehme für sowas folgendes Verzeichnis:
C:\Users\[user]\AppData\Roaming

Eine schlechte Wahl ... besser
Code:
%APPDATA%
bzw.
Code:
CSIDL_APPDATA
, dann ist Windows dafür zuständig, das richtige Verzeichnis zu liefern

Das war nur der Pfad.
Code:
    SHGetSpecialFolderLocation(Einstellungen.Handle, CSIDL_APPDATA, SpecialDir);
    SHGetPathFromIDList(SpecialDir, @FBuf[0]);
    Allocator.Free(SpecialDir);
    pfad := FBuf+'\[Firma]\[Programmname]\';
Gruß

Luckie 31. Jan 2012 14:00

AW: Demoversion Programm beenden
 
Zitat:

Zitat von Darlo (Beitrag 1148502)
Ich nehme für sowas folgendes Verzeichnis:
C:\Users\[user]\AppData\Roaming

Den Ordner AppData findet ein normaler User eh nicht.

Ein normaler Benutzter crackt auch keine Demoversionen. Er sucht sie sich im Internet. Und mit der Software von Sysinternals ist das ganz schnell gefunden. Dann noch die Sprunganweisung gepatcht und das war es dann. Ein mittlemäßig erfahrener Cracker macht dir das in einer halben Stunden. Und jetzt setzte das mal ins Verhältnis zu der Zeit und den Aufwand, den ihr da schon reingesteckt habt. Hättet ihr die Zeit und Mühe in gute Features investiert, dann hättet ihr auch ein paar ehrliche Käufer mehr und die, die die gecrackte Version nutzen, würden gar nicht groß ins Gewicht fallen.

Darlo 31. Jan 2012 15:48

AW: Demoversion Programm beenden
 
Zitat:

Zitat von Luckie (Beitrag 1148529)
Hättet ihr die Zeit und Mühe in gute Features investiert, dann hättet ihr auch ein paar ehrliche Käufer mehr und die, die die gecrackte Version nutzen, würden gar nicht groß ins Gewicht fallen.

Wo liest du denn raus dass die Software nicht gut ist und dass der Absatz nicht stimmt?? :gruebel:

Luckie 31. Jan 2012 15:53

AW: Demoversion Programm beenden
 
Wo liest du raus, dass ich gesagt habe, die Software sei schlecht? ;)

p80286 31. Jan 2012 16:33

AW: Demoversion Programm beenden
 
Zitat:

Zitat von Darlo (Beitrag 1148550)
Zitat:

Zitat von Luckie (Beitrag 1148529)
Hättet ihr die Zeit und Mühe in gute Features investiert, dann hättet ihr auch ein paar ehrliche Käufer mehr und die, die die gecrackte Version nutzen, würden gar nicht groß ins Gewicht fallen.

Wo liest du denn raus dass die Software nicht gut ist und dass der Absatz nicht stimmt?? :gruebel:

Wahrscheinlich wurde er an die seltenen Softwareperlen erinnert, die mit so vielen Sicherheitsfeatures zugenagelt waren, daß ein Arbeiten mit ihnen unmöglich war.

Gruß
K-H

Darlo 31. Jan 2012 19:32

AW: Demoversion Programm beenden
 
Zitat:

Zitat von Luckie (Beitrag 1148552)
Wo liest du raus, dass ich gesagt habe, die Software sei schlecht? ;)

Oh man, Programmierer können so penibel sein ;-), du weißt was ich meine...

Luckie 31. Jan 2012 19:35

AW: Demoversion Programm beenden
 
Zitat:

Zitat von Darlo (Beitrag 1148584)
Oh man, Programmierer können so penibel sein ;-), du weißt was ich meine...

Berufskrankheit. ;)

CCRDude 1. Feb 2012 17:18

AW: Demoversion Programm beenden
 
Zitat:

Zitat von Darlo (Beitrag 1148502)
Um die Demo zu aktivieren muss bei mir eine Onlineverbindung bestehen und ich speichere die HDD-Id in eine Datenbank, wenn die ID vorhanden, kann die Demo nicht mehr aktiviert werden.

Und informierst Du den Benutzer vor der Ausführung dieser Funktion darüber, daß Du personenbeziehbare Daten übermittelst, wie Du sie speicherst, zu welchen Zwecken Du sie speicherst, und wie Du sicherstellst, dass diese nicht verloren oder sonstwie an Dritte gehen? Bzw. an welche Dritte sie gehen?

DP-Maintenance 26. Apr 2012 17:34

Dieses Thema wurde am "26. Apr 2012, 18:34 Uhr" von "fkerber" aus dem Forum "Neuen Beitrag zur Code-Library hinzufügen" in das Forum "Sonstige Fragen zu Delphi" verschoben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz