| Autor |
Beitrag |
Peter2002
      
Beiträge: 103
Win XP, Win 7
Delphi 2007 / XE3
|
Verfasst: Fr 29.05.09 20:15
Hallo,
hat jemand ein Idee, wie ich einen einfachen Kopierschutz realisieren kann?
Ich beabschtige keinen super-sicheren und extrem schwer zu knackenden Schutz. Ich möchte eigentlich nur verhindern, dass die .exe von Rechner A auf Rechner B kopiert wird und da einfach so läuft...
Besten Dank im Voraus
_________________ Gruß Peter
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 29.05.09 20:22
Lege z.B. einfach eine Datei mit ein paar Informationen ins Anwendungsdatenverzeichnis. Sind die nicht vorhanden, startest du nicht. Oder auch in die Registry. An beiden Orten wird der ganz normale Benutzer nicht so schnell suchen.
Du könntest natürlich auch noch Hardwareinformationen dazunehmen, aber dann wäre das schlecht beim Wechsel von Hardwarebestandteilen.
Eine ganz andere Sache: Irgendwie musst du ja auf einem PC die Informationen hinterlegen. Wie willst du verhindern, dass diese Installationsroutine nicht auch auf anderen PCs ausgeführt wird?
Insgesamt ist so etwas keine besonders gute Idee, meistens verärgert man nur ehrlichen Käufer, aber versuch es...
Es gibt zu dem Thema auch schon sehr viele Threads hier, das wird immer wieder gefragt.
|
|
blaskito
      
Beiträge: 63
Win2003, 2008, 2012, WinXP, Win7
Delphi 6 Pers.
|
Verfasst: Fr 29.05.09 20:50
Hi,
ich hatte mal einen theoretischen Ansatz, um einen Kopierschutz in einem Netzwerk herzustellen:
Der Security Identifier (SID) ist auf einem Win 2000/XP/Vista PC in einem Netzwerk immer einmalig. Hinterlegst du den SID in einer Datei und verschlüsselst ihn am besten mit sich selbst, kann die Exe - selbst mit dem Keyfile - auf einem anderen PC nicht laufen.
Doof ist natürlich auch in diesem Fall, dass du ja irgendeinen Installer brauchst, der das Keyfile ersteinmal anlegt.
Getestet habe ich es aber nicht
Gruß aus dem Norden
blaskito
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Fr 29.05.09 23:08
blaskito hat folgendes geschrieben : | | verschlüsselst ihn am besten mit sich selbst |
Bitte?  Erklär mal kurz, wie du das meinst, etwa so:
Delphi-Quelltext 1: 2:
| key := SID; Output := Verschluessel(SID, key); | ??
Falls ja: Meinst du dann, man entschlüsselt einfach mit der gerade ermittelten SID, und falls diese rauskommt, war alles korrekt? Interessanter Ansatz.
Zum allgemeinen: Ich hab mal spaßeshalber versucht, ein zu diesem Zweck im DF gepostetes Programm zu "cracken", also den "Kopierschutz" zu umgehen. Um das Programm zu aktivieren, musste man seinen Namen und einen dazu generierten Key eingeben, den Generator hatte vermtl. nur der Entwickler. Ich hatte sowas noch nie gemacht und kannte nur die ungefäre Theorie: Such das richtige jz (Assembler befehl für "Jump if zero", ein bedingter Sprung also) und ersetze es mit einem jnz (Jump if not zero) (oder umgekehrt). Das herunterladen von OllyDbg und DeDe sowie das Einarbeiten in beide Programme eingeschlossen, habe ich 10 Minuten gebraucht, um das Programm lauffähig zu bekommen
Fazit: Verwende deine Zeit doch lieber, um das Programm bugfrei und mit einzigartigen Features auf den Markt zu bringen, anstatt einen Kopierschutz einzubauen.
Das ist nur mal meine Meinung zum Thema Kopierschutz, im Prinzip Off Topic
Ein Installer, der das Keyfile anlegt, ist nicht allzu schwierig zu erstellen, meines Wissens lässt sich das mit InnoSetup realisieren, was passender Weise Skripts in Pascal akzeptiert
Am simpelsten wird es mit einem Registry Eintrag gehen, der bei der Installation erstellt wird (und bei der Deinstallation wieder gelöscht werden sollte! ), vielleicht so, dass man den Eintrag nicht direkt mit dem Programm in Verbindung bringt, was natürlich, wie alle anderen Maßnahmen auch, nur geringfügig sicher ist. Aber es geht dir ja offenbar nicht darum, halbwegs versierte Hacker fernzuhalten, sondern nur um den Durchschnittsuser, von daher denke ich, ein Registry-Eintrag tut's schon. Vielleicht schreibst du einen vorher generierten Code rein, oder einen Produkt-Key, der deinen Käufern z.B. per E-Mail gesendet wird. Das Programm soll dann nur mit einem korrekten Key lauffähig sein. Vielleicht hasht du einfach den Namen des Käufers (gesalzen, versteht sich) und prüfst das dann beim Start immer.
Wobei mir die Methode von blaskito auf den ersten Blick auch gefällt
Wenn ich das aber richtig verstehe, dann hat dadurch jeder Nutzer im Netzwerk Zugriff auf das Programm und ein Laptop, das vllt zwischen mehreren Netzwerken wechselt, hat dann nur zu hause oder auf der Arbeit Zugriff - wenn das zutrifft, ist die Sache natürlich vollkommen nutzlos und Benutzerfeindlich 
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
ffgorcky
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: Sa 30.05.09 09:39
Du könntest dafür doch aber auch zum Beispiel den Computernamen auslesen (aus Thema 75468 "geräubert"):
Delphi-Quelltext 1: 2: 3: 4:
| Reg:= Tregistry.create; Reg.RootKey := HKEY_LOCAL_MACHINE; Reg.OpenKey('\System\CurrentControlSet\Control\ComputerName\ComputerName\', false); Computername:=Reg.ReadString('ComputerName'); |
Ich weiß nur leider nicht, wie oft denn da der gleiche vorkommt.
|
|
dummzeuch
      
Beiträge: 593
Erhaltene Danke: 5
Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
|
Verfasst: Sa 30.05.09 09:49
Peter2002 hat folgendes geschrieben : | Ich beabschtige keinen super-sicheren und extrem schwer zu knackenden Schutz. Ich möchte eigentlich nur verhindern, dass die .exe von Rechner A auf Rechner B kopiert wird und da einfach so läuft...
|
Wenn es nur auf einem bestimmten Rechner laufen soll, muss Dein Programm beim Start (und vielleicht auch haeufiger) irgendwas ueberpruefen, das fuer den Rechner eindeutig ist. Am Einfachsten z.B. der Rechnername, komplizierter waere die Windows SID oder irgendwas Hardware spezifisches, z.B. die MAC-Adresse der Netzwerkkarte (aber: Bist du sicher, dass immer eine drin ist? Und was ist, wenn es mehrere gibt?)
Diese Information muss dann entweder in Deinem Programm stehen oder in einer zusaetzlichen Datei. Und damit man es nicht einfach mit Notepad aendern kann, brauchst Du eine Pruefsumme. Nennen wir es mal eine Lizenzdatei. Die Pruefsumme sollte nicht zu simpel sein, denn sonst kann jeder die Datei aendern und einfach die Pruefsumme anpassen, fertig.
Und zu guter letzt: Wann ermittelt wer diese Information und generiert die Lizenzdatei? Die Information steht erst zur Verfuegung, wenn der Anwender das Programm installiert. Wenn allerdings das Installationsprogramm dann die Lizendatei erzeugt, so kann der Anwender es einfach auf beliebig vielen Rechnern laufen lassen und erhaelt so beliebig viele Lizenzdateien. Also muss die Information irgendwie zu Dir kommen, Du generierst die Lizenzdatei und schickst sie zum Anwender zurueck.
Alles in Allem ein ziemlich hoher Aufwand fuer einen relativ geringen Schutz (wenn die Abfrage im Programm einfach nur eine IF-Abfrage ist, kann man die mit etwas Debugger-Kenntnissen leicht rauspatchen). Ist es Dir das wert?
Wenn es hablwegs sicher sein soll, fuehrt nichts an einer professionellen Loesung mit z.B. einem USB-Dongle vorbei. Das wiederum bedeutet Kosten und auch nochmal Aufwand.
Und dabei ist der Supportaufwand noch gar nicht mitgerechnet, wenn irgendwas schiefgeht: Da funktioniert irgendwann das Programm ploetzlich nicht mehr, weil die Lizenzdatei verlorengegangenn ist. Schon fuehlt sich der ehrliche Kunde zu Recht um seine Leistung betrogen. (Dem Raubkopierer, der eine geknackte Version hat, kann das nicht passieren.) Im besten Fall bekommst Du einen Anruf oder eine E-Mail mit der Bitte um Hilfe. Dann musst Du ueberpruefen, ob eine legale Lizenz existiert und diese wiederherstellen.
Oder die Lizenz wird ungueltig, weil das, womit Du den Computer eindeutig identifiziert hast, sich aendert: Computername wird geaendert, Netzwerkkarte wird getauscht oder was auch immer. Und schon muss eine neue Lizenz erstellt werden. Das hoert sich jetzt nach wenig Aufwand an, aber je nachdem, wieviele Lizenzen Du rausgibst, kann sich das summieren. Und wieviele Jahre willst Du Support leisten?
twm
|
|
Reinhard Kern
      
Beiträge: 591
Erhaltene Danke: 14
|
Verfasst: Sa 30.05.09 12:14
dummzeuch hat folgendes geschrieben : | ... Und wieviele Jahre willst Du Support leisten?
twm |
Hallo,
das dürfte für Kleinfirmen und Selbsständige das grösste Problem darstellen: das Programm ist ja ohne zeitliche Begrenzung lizensiert (wenn da drinstünde, es läuft nur 5 Jahre, kauft es ja zu Recht keiner), also müsste die Antwort lauten "Für immer und ewig". Wer bitte kann das garantieren?
Ich kenne das Problem im Übrigen aus der Sicht lebenswichtiger Software mit Lizenzkosten über 100 kEUR: solche Software ist i.A. für den Anwender lebenswichtig, d.h. die Produktion steht wenn der Dongle kaputt ist. Daher sollten die Hersteller einen 24/7/365-Service zum Ersatz defekter Dongles bzw. zur Ausstellung von Überbrückungslizenzen unterhalten, das tun sie i.d.R. auch. Z.B. kann ein Ersatzdongle in der Fa. hinterlegt werden und es wird garantiert, dass innerhalb 2 Std. eine passende Lizenz per EMail zur Verfügung gestellt wird.
Gruss Reinhard
|
|
Peter2002 
      
Beiträge: 103
Win XP, Win 7
Delphi 2007 / XE3
|
Verfasst: Sa 30.05.09 13:42
Danke. Die Idee mit Rechnername und MAC dürfte mit halbwegs vertretbarem Aufwand zu realisieren sein.
Unsere Kunden sind größere Firmen, wo ich davon ausgehe, dass die ohnehin keine blödsinn machen...
Trotzdem möchte eine kleine Hürde haben... Wenn sich ein Programm einfach so kopieren lässt, versucht vielleicht doch der ein oder andere.
Naja, eigentlich ist das ja mehr eine Aktivierung.
Ich stell mir das momentan so vor:
Wenn das Programm startet und der Eintrag in der Registry bzw. die Datei nicht da ist, geht das System in einen Demomodus und startet nach z.B. 14 Tagen dann nicht mehr. Innerhalb dieser Zeit kann man mir die zur Aktivierung benötigten Informationen mitteilen und ich senden einen entsprechenden Schlüssel zurück.
Müsste eigentlich klappen.
Damit tut sich allerdings gleich die nächste Frage auf: Wie bekomme ich mit, wenn die Systemzeit zurückgestellt wird? Sonst wäre ja ein endloser Testbetrieb möglich
_________________ Gruß Peter
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Sa 30.05.09 14:23
bei jedem Start die Zeit mitloggen und dann überprüfen ob man in der "Zukunft" ist?!
|
|
dummzeuch
      
Beiträge: 593
Erhaltene Danke: 5
Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
|
Verfasst: Sa 30.05.09 14:28
Peter2002 hat folgendes geschrieben : |
Unsere Kunden sind größere Firmen, wo ich davon ausgehe, dass die ohnehin keine blödsinn machen...
Damit tut sich allerdings gleich die nächste Frage auf: Wie bekomme ich mit, wenn die Systemzeit zurückgestellt wird? Sonst wäre ja ein endloser Testbetrieb möglich |
Da die meisten groeseren Firmen einen automatischen Zeitabgleich verwenden, muesste jemand dafuer auch schon einiges an Auwand treiben. Ich wuerde mir darum wenig Sorgen machen.
twm
|
|
Reinhard Kern
      
Beiträge: 591
Erhaltene Danke: 14
|
Verfasst: Sa 30.05.09 15:40
Peter2002 hat folgendes geschrieben : | | Damit tut sich allerdings gleich die nächste Frage auf: Wie bekomme ich mit, wenn die Systemzeit zurückgestellt wird? Sonst wäre ja ein endloser Testbetrieb möglich |
Hi,
wie auch alles andere funktioniert auch das letztlich nicht wirklich: Ich stelle den PC auf den Anfang der Testzeit und installiere die Software. Nach Aktivierung mache ich ein Plattenimage (oder einen Snapshot einer VM) und lade dieses Image bei Bedarf zurück (Systemzeit einstellen nicht vergessen). Ist nicht übermässig komfortabel, aber wenn sichs lohnt...
Gruss Reinhard
PS komm nicht auf die Idee, virtuelle Maschinen zu unterbinden - dann ist deine Software gleich wertlos.
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: Sa 30.05.09 17:57
Das mit der Systemzeit wird zum Beispiel geregelt, indem man eine Abfrage danach an einen Server stellt und damit die Zeit vergleicht. Manche Programme nutzen dafür auch die Cookies des IE, soweit ich weiß.
Aber 100%-sicheren Kopierschutz gibt es sowieso nicht.
PS: www.michael-puff.de/...rschutzCracken.shtml
|
|
blaskito
      
Beiträge: 63
Win2003, 2008, 2012, WinXP, Win7
Delphi 6 Pers.
|
Verfasst: Sa 30.05.09 23:43
Hi JayEff,
jupp, genauso meinte ich es. Aber - wie gesagt - habbs nie getestet.
Gruß
blaskito
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: So 31.05.09 22:12
@Luckie:
Ändere mal in deinem Artikel OllyDebug zu Ollydbg (so findet man mehr bei google). Außerdem ist OllyDbg ein Debugger und IDA ein Disassembler, das ist ein kleiner Unterschied.
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 01.06.09 00:35
Danke für den Hinweis. Ich habe den Absatz angepasst.
|
|
Reinhard Kern
      
Beiträge: 591
Erhaltene Danke: 14
|
Verfasst: Mo 01.06.09 12:54
Jakob_Ullmann hat folgendes geschrieben : | Das mit der Systemzeit wird zum Beispiel geregelt, indem man eine Abfrage danach an einen Server stellt und damit die Zeit vergleicht. Manche Programme nutzen dafür auch die Cookies des IE, soweit ich weiß.
... |
Hallo,
ok wenn ein ständiger Internet-Zugriff besteht, ich würde das aber ablehnen aus folgenden Gründen:
1. Vetrauensfrage - wenn ein Programm von sich aus aufs Internet zugreift, kann mir der Verkäufer viel erzählen was alles NICHT übermittelt wird, glauben muss ich das nicht. Und wenn ich das Internet abtrenne und das Programm läuft nicht mehr, ist der Fall sowieso erledigt, siehe 2.
2. Es soll ja vorkommen, das der Internetanschluss ausfällt, auch ohne eigenes Verschulden. Bei uns hat mal ein Bagger einen ganzen Ortsteil für eine Woche vom Telefon getrennt, unsere Mitarbeiter standen draussen vor der Firma um mit dem Handy Kontakt zu halten. Eine Software, die ohne Notwendigkeit (wie ein Browser) ohne Internet nicht läuft ist für mich inakzeptabel.
Ich rede natürlich für mich persönlich, aber mit langer Industrieerfahrung. Viele professionelle Admins werden ähnlicher Meinung sein.
Gruss Reinhard
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: Mo 01.06.09 13:21
Reinhard Kern hat folgendes geschrieben : | Jakob_Ullmann hat folgendes geschrieben : | Das mit der Systemzeit wird zum Beispiel geregelt, indem man eine Abfrage danach an einen Server stellt und damit die Zeit vergleicht. Manche Programme nutzen dafür auch die Cookies des IE, soweit ich weiß.
... |
Hallo,
ok wenn ein ständiger Internet-Zugriff besteht, ich würde das aber ablehnen aus folgenden Gründen:
1. Vetrauensfrage - wenn ein Programm von sich aus aufs Internet zugreift, kann mir der Verkäufer viel erzählen was alles NICHT übermittelt wird, glauben muss ich das nicht. Und wenn ich das Internet abtrenne und das Programm läuft nicht mehr, ist der Fall sowieso erledigt, siehe 2.
2. Es soll ja vorkommen, das der Internetanschluss ausfällt, auch ohne eigenes Verschulden. Bei uns hat mal ein Bagger einen ganzen Ortsteil für eine Woche vom Telefon getrennt, unsere Mitarbeiter standen draussen vor der Firma um mit dem Handy Kontakt zu halten. Eine Software, die ohne Notwendigkeit (wie ein Browser) ohne Internet nicht läuft ist für mich inakzeptabel.
Ich rede natürlich für mich persönlich, aber mit langer Industrieerfahrung. Viele professionelle Admins werden ähnlicher Meinung sein. |
Soweit ich weiß, ist das aber ein gängiges Verfahren. 
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 01.06.09 13:45
|
|
Peter2002 
      
Beiträge: 103
Win XP, Win 7
Delphi 2007 / XE3
|
Verfasst: Di 02.06.09 12:58
Fragen über Fragen...
Mal angenommen das Programm wird in einer VM installiert und hier auch sauber aktiviert. Soweit so gut.
Gibt es eine Möglichkeit festzustellen, ob die komplette VM kopiert wurde? Oder habe ich da einfach Pech gehabt?
_________________ Gruß Peter
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Di 02.06.09 15:20
Da hast du dann Pech gehabt.
Aber mal im Ernst: Wenn eine Firma diese Software einsetzen will, dann wird sie nicht extra deswegen eine VM aufsetzen und diese alle 14 Tage wiederherstellen oder so, ist doch kompletter Unsinn!
Kurzum: JEDE Art von Kopierschutz kann man umgehen. Hör auf mit Hardwareschlüsseln, MAC-Adresse oder Internetaktivierung! Damit handelst du dir nur Probleme ein. Wenn einen Kopierschutz, dann am besten einen Dongle und gut ist. Kannst denen dann ja anstatt nur einen entsprechend 5 geben oder so...
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
|