Schutz eigener Software vor Raubkopien - Lizensierungsmodell
-
Hallo Entwickler,
ich habe grad eine Anwendung fertig programmiert, die ich die Tage zum Verkauf anbieten will.
Da ich kein Bock habe, dass meine Software ohne zu zahlen eingesetzt wird, (immerhin will ich mir nen Auto zulegen, ferner sind 19 Euro auch günstig :)) möchte ich die Anwendung entsprechend schützen.
Dies ist mein Modell, was mir so eben eingefallen ist. Mir wäre recht, wenn ihr das mal durchgeht und mir eure Meinung dazu sagt, ob ihr das gut findet oder was man anders machen könnte.
1. Kunde kommt auf meine Website und kann sich eine Demo Version laden, die später nach Kauf freigeschaltet wird.
2. Wenn der Kunde eine Lizenz kaufen will, wird er zu ShareIt geleitet, über die ich die gesammte Abwicklung ausführen werden. Die sind ja recht günstig.
3. Sobald der Kunde der ShareIt bezahlt hat, wird auf meiner Website der Kunde freigeschaltet, dies geschieht automatisch. Nach Bezahlung erhält der Kunden ebenfalls automatisch eine Email wo steht wie er die Software freischaltet.
4. Der Kunde wählt in meiner Software den Menüpunkt Lizenz. Wenn die Software bereits freigeschaltet ist, wird es da stehen. Andernfalls wird eine n stellige Zahl angezeigt, die auf jeden PC anders ist. (also eine unique Nummer). Nun gibt der Kunde in Editfeldern, seine Email Adresse und sein Passwort ein.
5. Meine Website wird aufgerufen und prüft ob der Kunde unter der Email schon freigeschaltet wurde. Wenn nein, wird ne Meldung angezeigt. Wenn ja frage ich ab, ob der Kunde schon mal versucht hat die Anwendung zu lizenzensieren. Nun bekommt der Kunde einen freischaltcode, den er in der Anwendung eingibt und kann die Software freischalten.
6. Anwendung ist freigeschaltet und bei jedem Programmstart wird geprüft ob der Schlüssel zur unique ID passt.
So stelle ich mir das vor. Der Vorteil ist, dass die Anwendung nicht so schnell weitergegeben wird. Sowas will ich ja.
Der Nachteil ist, dass die Anwendung dann nur auf einem PC läuft. Wenn der Kunde diese auf einem anderen PC installieren will, dann geht das nicht, bzw. wenn der Kunde seine Hardware wechselt, könnte es auch Probleme geben.
Dadurch gibt es wieder schwierigkeiten.
Haltet ihr mein Modell dennoch für gut oder würdet ihr wegen den Schwierigkeiten irgendwo anders vorgehen.
Bin für jeden Tip dankbar.
Philipp
-
Philipp HB schrieb:
1. Kunde kommt auf meine Website und kann sich eine Demo Version laden, die später nach Kauf freigeschaltet wird.
Crack in ca. 30 Min. würd' ich schätzen...
-
das einzig sichere ist, das wertvolle an einer software auf einem server ablaufen zu lassen.
rapso->greets();
-
Hallo,
das es kein Modell gibt was 100%ig sicher ist, zumindest kein Modell was ich selbst lösen könnte, suche ich halt ne einfache Lösung, die möglichst viele Leute abhält.
Daher wäre mir eure Meinung zu meinem Modell wichtig.
Philipp
-
dein modell hört sich gut an ... in der theorie
jedoch (mal vorausgesetzt es läuft alles so wie du dir das vorstellst, was ich stark bezweifle) wirst du jede menge ärger mit den kunden bekommen bzw. wird dein system sicher viele kunden davon abhalten dein programm zu kaufen.
gründe dafür hast du ja selber schon jede menge aufgezählt.
btw. sollte dein programm wirklich was taugen, wird es sicher auch einige leute geben die es kaufen, egal ob es auch eine illegale version gibt ... diejenigen die nichts bezahlen wollen finden immer mittel und wege
-
es gibt aber viele die sich sagen : wozu kaufen wenn man es einfach so gratis haben kann, mit nem simplen kopierschutz kann man schon ne menge leute davon abhalten.
eine möglichkeit die mir einfällt, wäre wenn jeder der regestriert ist einen teil des binaries von deinem server beim start des programm downloaden würde, wenn du es für die aktuelle IP immer verschlüsseln würdest, wäre ne gewisse sicherheit gegeben.
du könntest das mit einem immer aktuellen patch verbinden sodass die kunden auch etwas davon hättenrapso->greets();
-
Den unüberwindbaren Schutz gibt es nicht. Ein sehr guter ist, das Programm an einen Rechne zu binden. Dazu erstellt man aus der Hardware einen Code der an die Seite übermittelt wird. Nun schaut man ob dieser freigeschaltet ist. Das aber bei jeden Programmstart. Zusätzlich bekommt der User eine Serialnummer. Nun kann man sagen das er X-Mal seine Hardware zu dieser Serialnummer wecheln kann.
Hier gibt es auch viele Probleme die man mit Support lösen muss. (kostet dann auch Geld da man Zeit investiert)
-
Unix-Tom schrieb:
Den unüberwindbaren Schutz gibt es nicht. Ein sehr guter ist, das Programm an einen Rechne zu binden. Dazu erstellt man aus der Hardware einen Code der an die Seite übermittelt wird. Nun schaut man ob dieser freigeschaltet ist. Das aber bei jeden Programmstart. Zusätzlich bekommt der User eine Serialnummer. Nun kann man sagen das er X-Mal seine Hardware zu dieser Serialnummer wecheln kann.
Hier gibt es auch viele Probleme die man mit Support lösen muss. (kostet dann auch Geld da man Zeit investiert)
So ca. will er es doch machen?!
Worauf ich noch hinaus wollte mit meinem Post: Ich würde nicht die Demo-Version vollversiontauglich machen, sondern den Leuten bei Registrierung entweder eine richtige Version zukommen lassen oder die Demo-Version mit 'ner EXE patchen lassen.
Sonst kann sich jeder Freak schnell mal Dein Prog runterladen und mit 'nem Disassembler sein Glück versuchen...
-
Sgt. Nukem hat recht. Überprüfungen kann man Kinder leicht umgehen. Je nachdem dürfte es einfach reichen einen Call mit NOPs zu überschreiben. Fertig, egal wie gut er das kontrolliert.
Was mir gerade so einfällt und sehr aufwendig ist und die Ausführung der Anwendung auch verlangsamt, dass du neben der Prüfung der unique-ID auch eine kleine Funktion aus dem Programm auslagerst, zu not wird nur ein Eingabewert für eine Funktion konvertiert. Dann ist es nicht so einfach Möglich die Abfrage im Internet zu umgehen. Die ausgelagerte Funktion sollte nur so komplex sein, dass man sie nicht einfach rekonstruieren kann.
Aber wie gesagt, das bringt sehr viele Nachteile mit und macht die Kunden nicht unbedingt glücklich
Andere Möglichkeit wär eine Hardwarelösung, da verstehe ich eh nicht, warum das mittlerweile nicht umgesetzt wurde. TCPA ist ja schon ein Anfang. Aber wenn jeder Rechner einen Chipkarten-Leser hätte, könnte man bei der Software einfach eine Chipkarte mitliefern, die man zur Verifizierung einlegen muss. Ok das wär bei Shareware in der Regel auch nicht durchsetzbar, wegen der Herstellungskosten.
Solange du den User nicht von seinem Rechner `ausschließt`, kannst du das Cracken deiner Software nicht vermeiden, nur verkomplizieren.
Ach, tu dir einen gefallen und komm nicht auf die dumme Idee die Kopierschutzfunktionen in irgend welche dynamischen Librarys auszulagern und die dann am besten noch copyprotection oder check_serial zu nennen
-
Hallo,
danke erstmal für die bisherigen antworten
@benutzer2
// jedoch (mal vorausgesetzt es läuft alles so wie du dir das vorstellst, was
// ich stark bezweifle) wirst du jede menge ärger mit den kunden bekommen bzw.
// wird dein system sicher viele kunden davon abhalten dein programm zu kaufen.Ich musste so etwas ähnliches mal für ein Großunternehmen programmieren. Das umzusetzten ist nicht weiter schwierig.
@all
Wie raspo schon sagt, mit nem kopierschutz möglich viele leute abhalten, nur ist es auch schon recht hart, wenn eine anwendung nur auf einem pc läuft. ich könnte wohl unsere webseite so programmieren, dass man die software auch für andere rechner freischalten könnte. das ist z.b. gut, da es verschiedene lizenzen gibt.
nun komme ich auch auf deinen gedanken, also den nutzer die möglichkeit geben, z.b. 5x die software unter einer anderen hardware laufen zu lassen. vor jedem programmstart wird eine online abfrage gemacht ob die lizenz noch gültig ist, so dass zur zeit auch immer nur eine version laufen kann. die support probleme, würden sich durch eine sehr benutzerfreundliche weboberfläche auslagern lassen. und einige anfragen werden ja immer mal kommen. ich bin eh nen fan von dingen die automatisiert ablaufen.
@Sgt. Nukem
ja, das mit der demo ist so ne sache, da ich keine lust habe, zwei versionen zu verwalten. ferner ist das bei meiner anwendung auch problemantisch, da ein absicherung wie z.b.
if (anz > MAXNUMBERS)
{
leider nicht möglich
break;
}auch habe ich nicht die zeit mich vor allem zu schützen. aber wenn das nun jemand cracken will, ist mir das auch egal, solange es nicht alle tun. ansonsten lade ich jeden monat ne neue exe datei hoch, wo die variablen andere namen haben und einige zeilen vertauscht sind
Ich fasse nochmal mein Modell zusammen:
1. Kunde kommt auf meine Website und kann sich eine Demo Version laden, die später nach Kauf freigeschaltet wird.
2. Wenn der Kunde eine Lizenz kaufen will, wird er zu ShareIt geleitet, über die ich die gesammte Abwicklung ausführen werden. Die sind ja recht günstig.
3. Sobald der Kunde bei ShareIt bezahlt hat, wird auf meiner Website der Kunde freigeschaltet, dies geschieht automatisch. Nach Bezahlung erhält der Kunden ebenfalls automatisch eine Email, wo steht wie alles abläuft.
4. Der Kunde wählt in meiner Software den Menüpunkt Lizenz. Wenn die Software bereits freigeschaltet ist, wird es da stehen. Andernfalls wird eine n stellige Zahl angezeigt, die auf jeden PC anders ist. (id aus hardwaredaten). nun wird nen link zu unser seite angezeigt wo der kunde sich einloggen kann und seine anwendung freischalten kann. der kunde gibt also die id ein und es kommt nen key zurück. dieser wird in der software eingegeben und fertig. auf unser website kann der kunde jederzeit sehen wie oft er noch die hardware wechseln darf.
(im notfall, können wir wenn ne kunden anfrage kommt, die zahl 5 auch ändern, bzw. manche kunden dauerfreischalten)
5. Wenn beim Programmstart die Hardware ID zum Schlüssel passt und die Online Abfrage unser Website ergibt, das dies der aktuelle schlüssel ist, dann sind alle Funktionen freigeschaltet. andernfalls ist es halt wieder ne demo.
Gibst an diesem Modell irgendwas, was nicht gut ist? ich denke grad, wenn man es einfach und sehr verständlich macht, dann werden die kunden das auch hinrkiegen. und soviel support bleibt hoffentlich nicht übrig
Bitte wieder um eure Meinung.
Philipp
-
kingruedi schrieb:
Andere Möglichkeit wär eine Hardwarelösung, da verstehe ich eh nicht, warum das mittlerweile nicht umgesetzt wurde. TCPA ist ja schon ein Anfang. Aber wenn jeder Rechner einen Chipkarten-Leser hätte, könnte man bei der Software einfach eine Chipkarte mitliefern, die man zur Verifizierung einlegen muss. Ok das wär bei Shareware in der Regel auch nicht durchsetzbar, wegen der Herstellungskosten.
Und was soll das bringen? Die Chipkarte kann man genauso emulieren oder kopieren wie eine CD-ROM/DVD.
-
dgdfgdf schrieb:
kingruedi schrieb:
Andere Möglichkeit wär eine Hardwarelösung, da verstehe ich eh nicht, warum das mittlerweile nicht umgesetzt wurde. TCPA ist ja schon ein Anfang. Aber wenn jeder Rechner einen Chipkarten-Leser hätte, könnte man bei der Software einfach eine Chipkarte mitliefern, die man zur Verifizierung einlegen muss. Ok das wär bei Shareware in der Regel auch nicht durchsetzbar, wegen der Herstellungskosten.
Und was soll das bringen? Die Chipkarte kann man genauso emulieren oder kopieren wie eine CD-ROM/DVD.
Ich rede nicht davon, dass man irgend so einen 08/15-Chipkarten Leser an den Rechner anschließt, sondern von den Konzepten, die in TCPA angedacht werden. Zum Beispiel, dass man den Code dann erst durch die Chipkarte beim auslesen durch den Prozessor entschlüsselt. Man kann da ja ganze Algorithmen drauf auslagern und nicht nur Daten.
-
Wie soll dein System ohne Internetanschluss funktionieren?
-
Hi,
wer kein Internet hat, kann die Anwendung
a) nicht runterladen
b) nicht gebrauchendas ist so, wie leute die online banking machen wollen und kein pc und internet haben.
philipp
-
Hi,
wenn du eine einfache Lösung suchst, könnte man es doch auch so machen,
dass du eine DLL runterladen lässt.Ist die DLL (noch) nicht vorhanden, ist die Software im "Demo"-Modus.
Geht er deinen Schritt mit der Registrierung/Payment usw. wird z.B. sein
"Rechnername+nummervonirgendwasvonderhardware" zu einer Unique-ID errechnet.
Diese ID zusammen mit einer gültigen Emailadresse vom Kunden wird gespeichert.Der Kunde erhält die benötigte DLL und die Software wird voll funktionsfähig.
Die DLL sollte sich allerdings selbst löschen, sobald eine gewisse Anzahl
von Hardwareänderungen vorgenommen wurde+der Rechnername ein anderer ist.So kann der Kunde die DLL auch nicht einfach weitergeben, wenn er das Prinzip
durchschaut hat, da ja "Rechnername+nummervonirgendwasvonderhardware" nicht die ID bilden die auf ihn zutrifftAnhand der Emailadresse könntest du dann später, wenn es wirklich notwendig ist
(neuer PC beim Kunden), feststellen wer da häufiger nach neuen Freischaltungen fragt.Chris
-
Du hast ne große Sicherheitslücke in deinem Programm: du schilderst dein Vorgehen für die Sicherung hier
sowas sollte man nicht tun *g*
abgesehen davon ist die Überprüfung immer leicht zu entfernen für nen geübten Cracker, wenn es sich um ne vollständige Version handelt, man muss ja nur die Abfragen überschreiben und jeder wird es sowieso nicht können sondern nur sehr wenige.
Wenn deine Anwendung nicht gerade nen Verkaufsschlager wird, wird sich auch niemand die Version über P2P organisieren können und wenn man jdm. ne Kopie an nen Kumpel
gibt fällt das ja nicht so ins Gewicht.
-
kingruedi schrieb:
Ich rede nicht davon, dass man irgend so einen 08/15-Chipkarten Leser an den Rechner anschließt, sondern von den Konzepten, die in TCPA angedacht werden. Zum Beispiel, dass man den Code dann erst durch die Chipkarte beim auslesen durch den Prozessor entschlüsselt. Man kann da ja ganze Algorithmen drauf auslagern und nicht nur Daten.
Dir ist klar, das bei Software mit Dongles (wie z. B. Cubase SX 2, USB-Dongle, knapp 1.000,- EUR) die Dongle-Abfrage einfach "rausgepatcht" wird, ja?
Ein Dongle ist ein Kopierschutz-Stecker, der zum Betrieb der (legalen) Software an den PC gesteckt sein muß.
Also wenn so eine Abfrage schlichtweg rausgepatcht werden kann, wird das mit Deinem "Chipkarten-Leser" genauso möglich sein...
-
TCPA ist eine Möglichkeit. Eine andere wäre, wichtige Funktionen in Hardware zu implementieren und diese immer von der Hardware ausführen zu lassen.
-
Von daher ist es am wichtigsten, dass du deine Executables selbst so gut wie möglich schützt.
Es geht darum dem Cracker möglichst viel Arbeit zu machen, so daß er es sein lässt.1. Packen/Verschlüsseln der Exe mit einem Exe-Packer/Crypter (wehrt schon unerfahrene Cracker ab). billige Möglichkeit: UPX
2. Mehrere voneinander unahängige Überprüfungeroutinen. Dann muss der Cracker auch mehrere knacken. ( kostet den Cracker Zeit und Nerven)
3. Lass deine Software laufende Debuggerprozesse erkennen und führe dann sinnlosen Code aus. (Verwirrt den Cracker u.U. extrem)
4. Sämtliche String-Literale die du für die Anwendung heranziehst aus eine externen verschlüsselten Quelle ziehen. (Erschwert dem Cracker die Rückverfolgung von MessageBoxen wie "Ungültiger Lizenzschlüssel")Wenn du das alles machst muss deine Software schon sehr teuer und toll sein, dass sich jemand die Wochen dafür Zeit nimmt das Ding zu cracken.
-
Philipp HB schrieb:
wer kein Internet hat, kann die Anwendung
a) nicht runterladen
b) nicht gebrauchenHat er irgendwo geschrieben, dass seine Anwendung nur mit Internetzugang Sinn macht? Warum soll ich sie nicht auf einen Datenträger packen können und damit zu einem anderen PC gehen und sie von dort installieren?
Desweiteren wird wohl der ein oder andere immer etwas mistrauisch sein, wenn es darum geht etwas über das Internet zu registrieren.