Autor Beitrag
ChaseX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Sa 25.11.06 13:57 
Also ich hab folgendes Problem:
Ich habe mir eine Art Kopierschutz ausgedacht, der sehr simpel funktionieren soll(wahrscheinlich bin ich nicht der erste der drauf kommt). Dazu schreibe ich beim ersten Programmstart einen Key in die Registry und überprüfe bei einem ButtonKlick(der notwendig ist, ansonsten wäre das Programm nutzlos) ob der Key vorhanden ist.Ist er nicht vorhanden, wird das Programm beendet. Das Problem ist, dass er wirklich nur beim ersten Programmstart schreiben soll.
Also habe ich eine Variable(FirstTime) eingebaut, die nach dem schreiben auf false gesetzt wird. Hier mal der code:
ausblenden Key schreiben
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.FormCreate(Sender: TObject);
begin
reg:= TRegistry.Create;
if FirstTime = true then
begin
reg.Rootkey := HKEY_CURRENT_USER;
reg.OpenKey('SOFTWARE\name', true);
reg.WriteBool('A',True);
reg.CloseKey;
reg.Free;
end;

end;

beim Button sieht es dann so aus:
ausblenden Key abfragen
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.Button1Click(Sender: TObject);
begin
With TRegistry.Create do
  begin
    RootKey:=hkey_current_user;
    OpenKey('Software\name\', false);
    if not ValueExists('Go'then
      begin
      Application.terminate;
      end;
  end;
popupmenu2.Popup(x,y);
end;

Das Programm wird nie beendet, und in der Registry steht auch nichts. Woran liegt das?
Und kann man diese 'Keysetzen'-Funktion nach dem Ersttart dauerhaft deaktivieren oder löschen?
(wenn die exe dann auf einen anderen PC kopiert wird, soll sie sich da eben nicht eintragen und dadurch nicht funktionieren;))
Danke im Vorraus
ChaseX

Hat sich erledigt..ich mache es mit online-registrierung.
Ihr könnt mir aber gerne bei dem daraus erfolgenden Problem helfen;)


Zuletzt bearbeitet von ChaseX am Do 30.11.06 15:26, insgesamt 1-mal bearbeitet
Reinhard Kern
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: So 26.11.06 02:49 
user profile iconChaseX hat folgendes geschrieben:
Also ich hab folgendes Problem:
Ich habe mir eine Art Kopierschutz ausgedacht, der sehr simpel funktionieren soll(wahrscheinlich bin ich nicht der erste der drauf kommt). Dazu schreibe ich beim ersten Programmstart einen Key in die Registry und überprüfe bei einem ButtonKlick(der notwendig ist, ansonsten wäre das Programm nutzlos) ob der Key vorhanden ist.Ist er nicht vorhanden, wird das Programm beendet. Das Problem ist, dass er wirklich nur beim ersten Programmstart schreiben soll.
Also habe ich eine Variable(FirstTime) eingebaut, die nach dem schreiben auf false gesetzt wird. Hier mal der code:
...
Das Programm wird nie beendet, und in der Registry steht auch nichts. Woran liegt das?
Und kann man diese 'Keysetzen'-Funktion nach dem Ersttart dauerhaft deaktivieren oder löschen?
(wenn die exe dann auf einen anderen PC kopiert wird, soll sie sich da eben nicht eintragen und dadurch nicht funktionieren;))
Danke im Vorraus
ChaseX

Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt


Hallo,

Selbst wenn es programmtechnsich funktioniert, du gehst das so an:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
RegKey "lizenz" vorhanden?
Ja:   Ok
nein: erster Start?
      ja:   RegKey "lizenz" schreiben
      nein: Abbruch

Bleibt die Frage, woher weisst du, ob es der erste Start ist? Also erweitern wir:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
RegKey "lizenz" vorhanden?
Ja:   Ok
Nein: RegKey "erster" vorhanden?
      ja:   RegKey "lizenz" schreiben
      Nein: erster Start?
            ja:   RegKey "erster" schreiben"
            nein: Abbruch


Es spielt dabei keine Rolle, ob du den Merker für "erster Start" in die Registry schreibst oder woandershin, das ändert überhaupt nichts - und mit etwas Nachdenken müsstest du darauf kommen, das das überhaupt keinen Fortschritt bringt und dass du auf diese Art endlos weitermachen kannst.

Das Ganze ist ein Zirkelschluss der nicht ganz offensichtlichen Art.
ChaseX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: So 26.11.06 19:39 
Hmm..Naja wie auch immer, die Frage ist und bleibt ob ich Variablen die ich in einem Programm als true deklariert habe, beim Programmstart für immer umschreiben kann, also praktisch den Quelltext umschreibe. Wenn ich das dann in eine .dll Datei packe, die benötigt wird damit das Programm läuft, den Key schreibt und eben Information darüber gibt ob sie(nach dem Compilieren praktisch) schon einmal oder mehrmals geöffnet wurde, was dann das schreiben verhindert.
Dh. ich compiliere und schicke eine .exe und die .dll Datei zu einem Benutzer.
Dieser öffnet die exe Datei. Die exe-Datei greift auf die .dll datei zu und 'fragt' sie ob sie das Programm starten darf(bzw. ob das Programm weiterlaufen darf). Daraufhin sucht die .dll-Datei nach dem Registry-Eintrag, sagen wir 'erlaubt'. Ist dieser vorhanden sagt sie der .exe, in Ordnung, fahr fort mit dem Programm. Ist er nicht vorhanden sucht sie die Variable(in der dll also in sich selber) 'ErsterStart' und überprüft ihren Wert. Da Gerade erst compiliert wurde, ist der Wert true. Sie macht den Eintrag 'erlaubt' und setzt den Wert auf false. Dadurch dass der Eintrag nun existiert, erlaubt sie der exe fortzufahren. So also nutzt der User das Programm und beendet es irgendwann.
Nun denkt er sich, hmm das Programm läuft ja ganz gut, kopier ich es mal für Person xy.
Person xy probiert es natürlich sofort aus, dabei können 2 Blockaden auftreten.
1. dll fehlt, Programm beendet(unwahrscheinlich dass die nicht auch kopiert wurde, aber möglich)
2. wenn die dll da ist, fragt die exe sie weider an. dll sucht den Eintrag und findet nichts, dadurch geht sie zu Schritt 2 und guckt den Wert von 'ErsterStart' nach. Dieser ist nun auf false, weil der andere User das Programm vorher benutzte, also sagt die dll der exe 'STOP!Hier stimmt was nicht'(vllt kommt vorher noch die Fehlermeldung, Illegale Kopie oder was weiß ich, ist aber im moment uninteressant), also wird die exe beendet.
Der benutzer könnte zwar jetzt den Eintrag in der Registry machen, aber daran denken vielleicht nur 2-3% derer die das Programm interessant finden.
Bei User eins läuft es natürlich noch, da der Eintrag in der Registry besteht.
Die Frage ist und bleibt also, wie ich den Wert dauerhaft ändern kann, weil normalerweise läd zB User2 das Programm ja neu und dadurch die Einstellungen vom compilieren, und dort musste ich ja den wert auf true setzen.
Ich hoffe durch die Personifikationen etc. ist mein Vorhaben nun verständlich erklärt.
Bitte helft mir,
ChaseX
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: So 26.11.06 20:28 
Was ist, wenn die die Software VOR dem ersten Programmstart kopiere?

_________________
Na denn, dann. Bis dann, denn.
Reinhard Kern
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: So 26.11.06 20:35 
user profile iconChaseX hat folgendes geschrieben:
Hmm..Naja wie auch immer, die Frage ist und bleibt ob ich Variablen die ich in einem Programm als true deklariert habe, beim Programmstart für immer umschreiben kann, also praktisch den Quelltext umschreibe. ...
ChaseX


Hallo,

wenn ich neue Software installiere, kopiere ich sie von meinem Downloadrechner auf einen Linux-Server ins Verzeichnis "install", damit sie mir überall zur Verfügung steht.

Dann gehe ich an den Rechner, wo ich die Software haben möchte, und installiere oder kopiere sie vom Linux-Server.

Ich würde nicht einmal bemerken, dass du einen Kopierschutz vorgesehen hast.

Gruss Reinhard
ChaseX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: So 26.11.06 20:43 
:P
Ihr versteht mich nicht...
Ich bin mir sehr wohl bewusst, dass der 'Kopierschutz' einfach zu umgehen ist.
Aber ich gehe eben davon aus, dass derjenige, dem ich das Program dann schicke es ersteinmal selber ausprobiert bevor er es weitergibt, es müsste sich also ersteinmal rumsprechen, dass dies so einfach geht.
Da es ebenfalls unwahrscheinlich ist, dass jemand der 'Zielpersonen', die hauptsächlich faule ComputerSPIELER sind(was nicht bedeuten soll, dass alle Zocker faul sind, sondern nur diese, da das Programm das spielen erleichtert), sich die vorher kopiert, also sozusagen als Sicherheitskopie, denke ich sollte er reichen.
Außerdem kann man so gut wie jeden Kopierschutz umgehen, wenn man will. Meines Erachtens gibt es keinen 100%igen Kopierschutz, da es immer Menschen gibt, die sich damit so lange beschäftigen bis sie die Wirkung herausgefunden haben und dann Gegenmaßnahmen erarbeiten. Warum also die Mühe machen einen Extra-schwierigen Kopierschutz zu basteln, wenn man da sowieso noch nicht SOO viel von versteht?!
Kann mir jetzt vielleicht mal jemand meine Frage beantworten??:D
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: So 26.11.06 21:52 
Sobald die EXE gestartet ist, kannst die Datei sich nicht mehr selbst verändern, soweit ich weiss. Aber über einen Umweg würde das schon gehen, aber wozu? Was man in die eine Richtig hinbekommt, kann man auch wieder rückgängig machen.

Du argumentierst mit 'Security by Obscurity', also 'Sicherheit durch Verschleierung'. Das ist aber kein guter Ansatz, noch nicht mal ein Schlechter.

Verschwende deine Ideen nicht mit solch sinnlosen "Kopierschutzversuchen". Mach Dich doch schlau, wie man es richtig macht (Online-Aktivierung, moderate Preise, Support nur bei Registrierung etc.)

_________________
Na denn, dann. Bis dann, denn.
ChaseX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Do 30.11.06 15:15 
Hm okay hat sich erledigt..ich mache es mit online-registrierung.
Ihr könnt mir aber gerne bei dem daraus erfolgenden Problem helfen;)


Zuletzt bearbeitet von ChaseX am Do 30.11.06 15:25, insgesamt 1-mal bearbeitet
ZeitGeist87
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Do 30.11.06 15:19 
wo is das denn n kopierschutz? :gruebel:

_________________
Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
Danny W.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 296

Windows XP, WIN 2000
Delphi 2005 PE
BeitragVerfasst: Do 30.11.06 15:56 
ich hab mal soetwas ähnliches als Email verifizierung gemacht... allerdings mit einer MySQL Datenbank...

wenn man sich registriert hat, war das Feld "verify" mit einer zufallsgenerierten reihenfolge aus zahlen und buchstaben versehen (immer 8. Zeichen) .. beim programmstart wurde abgefragt ob das feld = 'RDY' war...wenn nicht, dann musste man die zeichenreihenfolge eintippen, die man vorher per email zugesandt bekommen hat. wenn diese zahl richtig eingegeben wurde, hat er dir 'RDY' ins feld geklatscht.

Vielleicht hilft dir das ja ein wenig

_________________
"Ich find den Fehler nicht. Der Artist wird immer als "Syntax Error" gezeigt :("
"Ach verdammt, der Artist heißt wirklich "Syntax Error" xD"
freak4fun
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 604
Erhaltene Danke: 4

Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
BeitragVerfasst: Do 30.11.06 16:15 
user profile iconMantis1987 hat folgendes geschrieben:
... mit einer zufallsgenerierten reihenfolge aus zahlen und buchstaben versehen (immer 8. Zeichen) ... wenn diese zahl richtig eingegeben wurde, hat er dir 'RDY' ins feld geklatscht


Wie prüfst du denn, ob eine zufällige Zeichenfolge richtig ist?

_________________
"Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
Danny W.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 296

Windows XP, WIN 2000
Delphi 2005 PE
BeitragVerfasst: Do 30.11.06 16:20 
es wird eine zufällige zeichenfolge generiert und ind die datenbank geschreiben...dort bleibt sie ja..bis sie zum vergleichen wieder ausgelesen wird ;)

_________________
"Ich find den Fehler nicht. Der Artist wird immer als "Syntax Error" gezeigt :("
"Ach verdammt, der Artist heißt wirklich "Syntax Error" xD"
ZeitGeist87
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Do 30.11.06 16:24 
zeichenfolge..

da find ich

ausblenden Quelltext
1:
md5(uniqueid(microtime(10000)));					


ganz witzig..schön lang xD

_________________
Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
Danny W.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 296

Windows XP, WIN 2000
Delphi 2005 PE
BeitragVerfasst: Do 30.11.06 16:25 
ich benutze aber nur eine 8stellige :)

_________________
"Ich find den Fehler nicht. Der Artist wird immer als "Syntax Error" gezeigt :("
"Ach verdammt, der Artist heißt wirklich "Syntax Error" xD"
freak4fun
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 604
Erhaltene Danke: 4

Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
BeitragVerfasst: Do 30.11.06 16:25 
user profile iconMantis1987 hat folgendes geschrieben:
es wird eine zufällige zeichenfolge generiert und ind die datenbank geschreiben...dort bleibt sie ja..bis sie zum vergleichen wieder ausgelesen wird ;)


Das macht natürlich Sinn. :D

Wenn du eine Onlineregistrierung in dein Programm einbaust, schränkst du deinen Benutzerkreis ein. Nicht jeder will einem Programm Zugriff aufs Internet gewähren. Außerdem kann dein Programm dann nicht auf rechnern ohne Internet laufen.
Da du in deinem anderen Fread auch auf die Probleme mit der Registry triffst, würde ich nach dem Herausfinden der Lösung wieder auf die "lokale" Rigistrierung zurückgreifen. ;)

MfG
freak

_________________
"Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen