Einfacher Kopierschutz
-
Hi Leute
Ich lerne zurzeit C++ welches übrigens meine erste Programmiersprache ist. Nun hab ich einen Simulator für ein Browsergame geschieben, da ich erst Konsolenprogramme proggen kann, hab ich den Simulator ...ja, schlagt mich ruhig.. mithilfe von Visual Studio "erschaffen".
Mein Ziel ist es, dieses Programm für alle zur Verfügung zu stellen, doch will ich nicht, dass sich Freunde von Freunden das Programm kopieren. Ich möchte den Überblick haben, wer mein Programm benutzt.Aus diesem Grund wollte ich nun eine Sicherung einbauen, damit das Programm nur auf bestimmten Computern läuft.
Und jetzt die Frage... genau, ihr habts erahnt... wie macht man das?
Meine Idee wäre die HardwareID der Festplatte herauszulesen und das Programm so zu gestalten, damit es nur auf dem Rechner mit der entsprechenden Festplatte funktioniert.
Bitte beachtet, dass ich erst die Grundlagen von C++ behersche. Gäbe es vielleicht auch einen einen leichteren Weg als mein Beispiel? Es geht nur darum, dass der Schutz nicht vom einfachen User umgangen werden kann.
Danke für eure Hilfe;)
-
Nein, gibt es nicht. Selbst Firmen die auf sowas spezialisiert sind, scheitern.
DRM is the root of all evil.
-
Vom "einfachen User" kann der Schutz schon nicht umgangen werden wenn du z.B. auf die SID prüfst.
p.S.:
Mein Ziel ist es, dieses Programm für alle zur Verfügung zu stellen, doch will ich nicht, dass sich Freunde von Freunden das Programm kopieren. Ich möchte den Überblick haben, wer mein Programm benutzt.
Kann ich irgendwo nachvollziehen. Allerdings nervt das bloss. Für ein Programm das nicht wirklich sehr interessant ist, wird das auch schon der Todesstoss sein, auch wenn du die "Keys" gratis hergibst. Soll heissen es wird dann genau keiner verwenden.
Stell das Ding einfach ins Netz, verlink es auf ein paar Seiten, und guck wie oft es in Foren etc. erwähnt/verlinkt wird. Wenn du dir nen guten Namen ausdenkst (z.B. einen zu dem Google genau gar keinen Hit findet), dann lässt sich das recht einfach und zuverlässig checken.
-
hustbaer schrieb:
Für ein Programm das nicht wirklich sehr interessant ist, wird das auch schon der Todesstoss sein, auch wenn du die "Keys" gratis hergibst. Soll heissen es wird dann genau keiner verwenden.
Danke für dieses Feedback.. ist ein guter Einwand.
In Foren wird es wohl mit Sicherheit nicht gepostet werden, da es nur für ein bestimmtes Browsergame ist. Allerdings ist es sehr Nützlich, denn es erpart einem viele komplizierte Berechnungen.
Trotzdem würde mich das intressieren, wie ich sowas bewerkstelligen könnte...
-
Tyu schrieb:
Trotzdem würde mich das intressieren, wie ich sowas bewerkstelligen könnte...
Wie dir schon gesagt wurde, es ist theoretisch unmöglich. Du kannst nur versuchen, es schwierig zu machen. Damit nervst du dann die normalen Benutzer und gibst den Kopierern eine einfache, sportliche Herausforderung. Wobei es dann auch keine Kopierer geben wird, denn wenn es im normalen Betrieb nervt, dann wird sich niemand dafür interessieren.
-
Wie kompliziert sind diese Berechnungen? Der beste Kopierschutz ist natürlich, wenn man das Programm erst gar nicht herausgibt. Dies ist bei einem Webserver der Fall, der die Berechnungen durchführt und nur die Ergebnisse verteilt. Außerdem kann man damit gut überblicken, wie das Programm genutzt wird.
-
SeppJ schrieb:
Wie dir schon gesagt wurde, es ist theoretisch unmöglich. Du kannst nur versuchen, es schwierig zu machen.
Wie gesagt, es sollte einfach für den normalen User "nicht übertragbar" sein. Es geht mir nur darum wie ich sowas machen könnte.. es kann auch nur was ganz einfaches sein.
SeppJ schrieb:
Damit nervst du dann die normalen Benutzer...
Ich hab mir den Beitrag von hustbaer schon zuherzen genommen;)
@Rhombicosidodecahedron
Die Idee finde ich gut, aber bevor ich mit der ganzen Web-Geschichte anfange, möchte ich erst C++ lernen. Bisher hatte ich mit Webseiten nur mit Editoren zu tun.
-
Tyu schrieb:
SeppJ schrieb:
Wie dir schon gesagt wurde, es ist theoretisch unmöglich. Du kannst nur versuchen, es schwierig zu machen.
Wie gesagt, es sollte einfach für den normalen User "nicht übertragbar" sein. Es geht mir nur darum wie ich sowas machen könnte.. es kann auch nur was ganz einfaches sein.
Kommt halt drauf an, wie einfach der User ist und wie sehr du ihn nerven willst.
Hardware-IDs sind beispielsweise extrem nervig und für Tante Emma nicht zu umgehen. Ihr Neffe, ein 12 jähriger Computerspieler, wird es auch schwer haben.
Überprüfung eines Originaldatenträgers (z.B. CD) auf besondere Merkmale ist ein weit weniger nerviges Mittel, welches bei recht breiten Personenkreisen als notwendiges Übel akzeptiert wird. Allerdings ist es mittlerweile auch recht allgemeines Wissen, wie man solche kopiergeschützten CDs richtig kopiert. Tante Emma hat vielleicht schon einmal gesehen, dass ihr Neffe Kopien von geschützten CDs hat und fragt ihn nach einer Kopie, die er ihr auch prompt anfertigen kann.
Jemanden der sich auch nur halbwegs auskennt, lassen all diese Techniken natürlich kalt. Hardware-IDs lassen sich trivial ändern und bei CD-Kopierschützen geht es in Hackerkreisen nicht um das eigentiche Kopieren der CD, sondern darum die Schutzfunktion ganz aus dem Programm zu entfernen, so dass man gar keine CD mehr benötigt (das ist sogar halbwegs schwer).
-
Dann präzisiere ich mal die Zielgruppe.. sie entspricht etwa Tante Emma und ihrem Neffen.
Oder ich stell gleich mal die Frage um: Wie kann ich die HardwareID der Festplatte herausfinden auf welcher sich die Partition C: liegt. Von mir aus könnte es auch die ID einer anderen Hardware sein(zB Grafikkarte) sein.
Ich hab versucht selbst einen passenden Code-Schnipsel zu finden, aber bin kläglich gescheitert.
-
http://www.codeproject.com/KB/system/computerinfo.aspx
http://www.codeproject.com/KB/mcpp/DriveInfoEx.aspxDa ist auch etwas Code dabei um das Guttenberg Pattern umzusetzen.
Hab übrigens 2 Minuten dafür gebraucht.
-
Was die funktion sonst noch bietet siehe: http://msdn.microsoft.com/en-us/library/aa364993
#include <iostream> #include <windows.h> int main() { DWORD seriennummer; if (GetVolumeInformationA("C:\\",NULL,NULL,&seriennummer,NULL,NULL,NULL,NULL)) std::cout << "Seriennummer der C-Platte ist: " << seriennummer; else std::cout << "Keine Seriennummer gefunden."; }
-
Und wie dir schon 2x gesagt wurde, dass ist der absolute Tod für die Verbreitung deines Programms. Dafür gibt es daher eine ganz einfache Methode, um das gleiche zu erreichen: Veröffentliche das Programm gar nicht erst.
-
SeppJ schrieb:
Und wie dir schon 2x gesagt wurde, dass ist der absolute Tod für die Verbreitung deines Programms. Dafür gibt es daher eine ganz einfache Methode, um das gleiche zu erreichen: Veröffentliche das Programm gar nicht erst.
Du hast mich wohl nicht vertanden... ich habs eingesehn, dass es nicht viel Sinn macht ein solches Programm abzusichern. Aber wie gesagt, intressiert es mich immer noch wie ich sowas bewerkstelligen könnte.
HighLigerBiMBam schrieb:
int main()
{
DWORD seriennummer;if (GetVolumeInf......
Vielen Dank! Das ist genau das was ich gesucht hab;)