Entwickler-Ecke

Sonstiges (Delphi) - Kopierschutz


Peter2002 - Fr 29.05.09 20:15
Titel: Kopierschutz
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


jaenicke - 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 - 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 - Fr 29.05.09 23:08

user profile iconblaskito hat folgendes geschrieben Zum zitierten Posting springen:
verschlüsselst ihn am besten mit sich selbst
Bitte? :shock: 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 :zustimm:
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 :oops:

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 :zustimm:

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 :nixweiss:


ffgorcky - Sa 30.05.09 09:39

Du könntest dafür doch aber auch zum Beispiel den Computernamen auslesen (aus Thema 75468 [http://www.delphi-forum.de/viewtopic.php?t=75468&highlight=computername+auslesen] "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 - Sa 30.05.09 09:49

user profile iconPeter2002 hat folgendes geschrieben Zum zitierten Posting springen:
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 - Sa 30.05.09 12:14

user profile icondummzeuch hat folgendes geschrieben Zum zitierten Posting springen:
... 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 - 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


FinnO - Sa 30.05.09 14:23

bei jedem Start die Zeit mitloggen und dann überprüfen ob man in der "Zukunft" ist?!


dummzeuch - Sa 30.05.09 14:28

user profile iconPeter2002 hat folgendes geschrieben Zum zitierten Posting springen:

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 - Sa 30.05.09 15:40

user profile iconPeter2002 hat folgendes geschrieben Zum zitierten Posting springen:
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 - 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: http://www.michael-puff.de/Artikel/KopierschutzCracken.shtml


blaskito - Sa 30.05.09 23:43

Hi JayEff,

jupp, genauso meinte ich es. Aber - wie gesagt - habbs nie getestet.

Gruß
blaskito


uall@ogc - 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.


Delete - Mo 01.06.09 00:35

Danke für den Hinweis. Ich habe den Absatz angepasst.


Reinhard Kern - Mo 01.06.09 12:54

user profile iconJakob_Ullmann hat folgendes geschrieben Zum zitierten Posting springen:
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 - Mo 01.06.09 13:21

user profile iconReinhard Kern hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconJakob_Ullmann hat folgendes geschrieben Zum zitierten Posting springen:
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. :wink:


jaenicke - Mo 01.06.09 13:45

user profile iconJakob_Ullmann hat folgendes geschrieben Zum zitierten Posting springen:
Soweit ich weiß, ist das aber ein gängiges Verfahren. :wink:
Bei welcher Software? Mit fällt da jetzt keine ein.


Peter2002 - Di 02.06.09 12:58

Fragen über Fragen... :roll:

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?


platzwart - 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...


Reinhard Kern - Di 02.06.09 15:51

user profile iconPeter2002 hat folgendes geschrieben Zum zitierten Posting springen:
Fragen über Fragen... :roll:

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?


Hallo,

zunächst mal weder noch - wenn ich eine VM auf einen anderen VM-Server kopiere, ist das ja kein Verstoss gegen irgendwas, unzulässig wäre bloss die gleichzeitige Verwendung von 2 Kopien.

Gruss Reinhard


Peter2002 - Mi 03.06.09 17:54

... also ist es nicht wirklich möglich, zu verhindern, dass ein und die selbe Installation in mehreren (identischen) VMs läuft...

nja, der Teil mit der MAC wäre ja schon mal ein kleines Hindernis. Das muss dann einfach reichen... Aktivierung, Kopierschutz ist meist ja eh vergebene Liebesmühe ;-)


jaenicke - Mi 03.06.09 17:57

Nein, das geht nicht. Jedenfalls nicht mit vertretbarem Aufwand...


platzwart - Mi 03.06.09 18:13

wenn jemand keine netzwerkkarte hat, ist die software sofort wertlos...


Peter2002 - Do 04.06.09 22:23

ohne Netzwerkkarte ist das Programm nutzlos ;-)
Es steuert Netzwerk-Barcodedrucker und versorgt diese mit Layout und Daten


Delete - Fr 05.06.09 00:02

Ist deine Software wirklich so gut, dass es sich lohnt so viel Zeit und Arbeit in einen Kopierschutz zu stcken? Wer ist denn deine Zielgruppe? Wenn es Firmen sind, werden sie für eine Lizenz bezahlen. Da reicht es, wenn bei der nicht lizensierten Version eine Messagebox beim Start kommt oder für Firmen wichtige Funktionen nur eingeschränkt sind. Firmen können es sich nicht lesiten mit Raubkopien oder gecrackten Versionen zu arbeiten. Und wenn du die Software für einen vernünftigen Preis anbietest, dann zahlen die Firmen auch für eine Lizenz, denn meist tut denen der Betrag für eine Lizenz nicht sehr weh, wenn du unter 100 Euro bleibst.


Peter2002 - Sa 06.06.09 11:21

Ich will nicht übermäßig viel Aufwand reinstecken, aber trotzdem ein paar kleine Hürden haben. Schließlich wird die Lizenz mehrere tausend kosten...
Wie schon gesagt, diese Programm ist für größere Firmen gedacht. Privat dürfte kaum einer Verwendung dafür haben.
Es geht dabei um validierte Etikettenerstellung und deren Druck, sowie Prüfung der Barcodes und ganze Verwaltung drumherum


jaenicke - Sa 06.06.09 11:25

user profile iconPeter2002 hat folgendes geschrieben Zum zitierten Posting springen:
Ich will nicht übermäßig viel Aufwand reinstecken, aber trotzdem ein paar kleine Hürden haben.
Du musst eben aufpassen, dass du dir durch diese Hürden nicht die ehrlichen Kunden vergraulst. Aber letztlich musst du das ja selbst wissen was du da machen willst. :nixweiss:


Delete - Sa 06.06.09 21:07

user profile iconPeter2002 hat folgendes geschrieben Zum zitierten Posting springen:
Ich will nicht übermäßig viel Aufwand reinstecken, aber trotzdem ein paar kleine Hürden haben. Schließlich wird die Lizenz mehrere tausend kosten...
Wie schon gesagt, diese Programm ist für größere Firmen gedacht. Privat dürfte kaum einer Verwendung dafür haben.
Es geht dabei um validierte Etikettenerstellung und deren Druck, sowie Prüfung der Barcodes und ganze Verwaltung drumherum

Gerade, wenn es sich um ein spezial Programm handelt, welches nur für große Firmen interessant ist, lohnt sich so ein Aufwand kaum. Mach eine Demoversion mit eingeschränkter Funktionalität und gut ist. Und die Firmen, die die Vollversion gekauft haben, werden sich hüten, der Konkurenz ihre Vollversion, für die sie mehrere tausend Euro bezahlt haben, umsonst zur Verfügung zu stellen.


dummzeuch - Sa 06.06.09 22:49

user profile iconPeter2002 hat folgendes geschrieben Zum zitierten Posting springen:
ohne Netzwerkkarte ist das Programm nutzlos ;-)
Es steuert Netzwerk-Barcodedrucker und versorgt diese mit Layout und Daten


Geht es Dir darum, zu verhindern, dass ein Kaeufer das Programm auf mehreren Rechner installiert, oder darum, dass er es an andere weitergibt.

Ersteres koennte man evtl. auch dadurch angehen, dass man generell eine Site-Licence verkauft und damit eben das Problem gar nicht auftritt.

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Firmen können es sich nicht leisten mit Raubkopien oder gecrackten Versionen zu arbeiten.


Da sehen meine Erfahrungen aber anders aus. Ich habe als IT-Berater da schon Sachen gesehen... Zugegebenermassen ist das schon ein paar Jahre her, aber ich glaube nicht, dass sich das wirklich grundlegend geaendert hat. Vielleicht was Windows und MS Office angeht, aber bestimmt nicht bei Spezialsoftware. Gerade in kleinen Firmen bis 50 Mitarbeiter gibt es haeufig keine zentrale Lizenzverwaltung sondern die Software wird von den Angestellten selbst installiert und dann auch mal an ein paar Kollegen "ausgeliehen". Und selbst wenn es eine zentrale Verwaltung gibt, wird immernoch ein gewisser Wildwuchs auftreten, der regelmaessig ueberprueft und "zurueckgeschnitten" werden muss (Ausnahme: Die Leute haben keine Admin-Rechte, aber das ist auch heute noch die Ausnahme.)

twm