Hallo Leute!
Ein Kunde fordert eine Software, die ich demnächst veröffentlichen
werde.
Allerdings habe ich noch keine Idee, wie ich am besten einen
Kopierschutz für die von mir geschriebene Software programmieren könnte,
um die Software vor Dritten zu schützen.
Ich habe zunächst an eine recht triviale Möglichkeit gedacht, die
MAC-Adresse der LAN-Karte des PCs als "Fingerprint" zu nutzen.
Was gibt es da für Möglichkeiten?
Hardware-Dongle fällt definitiv flach, zu hohe Kosten.
Gruß und Danke!
Markus Lebner schrieb:> Hardware-Dongle fällt definitiv flach, zu hohe Kosten.
Schonmal über nen simplen (USB-)AVR als dongle nachgedacht, kostet keine
5€....
Ok und wie würdet ihr dann den "Aktivierungsprozess" machen?
Nach der Erstinstallation wird die MAC des Kunden-PCs ausgelesen.
Diese wird mir dann zugeschickt.
Ein Tool auf meinem PC generiert einen Schlüssel aus MAC und
Algorithmus.
Dieser wird dann dem Kunden übergeben. (Kunden-Software prüft quasi, ob
die ihr bekannten MAC-Adresse der passende Algorithmus zugrunde liegt).
Wenn ja, wird in die Registry irgendein Flag geschrieben, oder notfalls
auch in eine verschlüsselte Datei.
Oder habe ich noch einen Denkfehler?
Ist jetzt nur mal eine Idee ohne weiter drüber nachgedacht zu haben:
Man könnte doch auch einen USB-Stick als Dongle (kostet ja nicht die
Welt) mitliefern und dessen Seriennummer abfragen. Zur weiteren
Verwirrung könnte da noch irgend ein kleines Programm drauf ablegen, mit
dem das zu schützende Programm einfach gelegentlich kommuniziert, was
aber eigentlich ohne Bedeutung ist. Also Daten an das Prog auf dem Stick
und das liefert etwas zurück.
hardware-dongles und fest damit verbundene software ist der einzig
einigermaßen sichere kopierschutz. das sieht man an den ganzen spielen
und den versuchen CDs und DVDs zu sichern... nichtmal bill gates hat's
in winblöd geschafft, auch diese aktivierung ist zu knacken.
Nicht nur einen, sondern viele.
1) Die MAC lässt sich ändern.
2) Die MAC ändert sich, sobald die Netzwerkkarte geändert wird.
3) Der Algorithmus zur Prüfung lässt sich für einen erfahrenen Cracker
binnen weniger Sekunden finden, und aushebeln. Skype, die bisher als die
sicherste Software der Welt galt, nutzt dermaßen viele unterschiedliche
Kontrollinstanzen, dass eine kleine Änderung sofort auffällt. Einen
Quellcode aber soweit zu bringen, dass er eine Veränderung an sich
selbst erkennt, ist ein sehr komplexer und komplizierter Vorgang.
4) Ich weiß ja nicht, ob Du eine Steuerung für ein Atomkraftwerk
entwickelt hast. Die Aushebelung eines Kopierschutzes ist nur bei
interessanter Software mit interessantem Schutz überhaupt ein Thema.
Unter Betrachtung der genannten Aspekte (die Liste könnte ich noch
deutlich verlängern) mache einfache die Registrierung einfach über einen
Schlüssel und gut ist. Und wenn das ganze für eine Firma ist, dann ist
eine Online-Registrierung eine Zumutung.
Einfachstes Patent: Du generierst einen Schlüssel, der mit dem Programm
mitgeliefert wird. Alle Deiner Schlüssel besitzen die selbe Checksumme
im einfachsten Fall oder den gleichen MD5-Hash. Im Programm wird darauf
geprüft und gut ist.
Achja, ich habe Punkt 6 vergessen: Selbst wenn die Arbeit hart war, so
sollte man als Entwickler nie glauben, man hätte die wichtigste Software
der Welt geschrieben. Und das alleine schon aus reinem Selbstschutz.
> Alle Deiner Schlüssel besitzen die selbe Checksumme im einfachsten Fall oder> den gleichen MD5-Hash.
Das sollte hoffentlich in absehbarer Zeit nicht möglich sein ;)
Wirklich sinnvoll geht das nur mit Hardware Schlüsseln. Alladin Key
beispielsweise.
Der allerbeste Kopierschutz ist aber immer noch ein angemessener Preis,
ein gedrucktes Handbuch und ein 1a Support.
Markus Lebner schrieb:> Allerdings habe ich noch keine Idee, wie ich am besten einen> Kopierschutz für die von mir geschriebene Software programmieren könnte,> um die Software vor Dritten zu schützen.
Wenn die Software wirklich so weltbewegend besonders ist, daß ein
realistisches Risiko der "Raub"kopie besteht, dann ist die einzig
sinnvolle Lösung für einen "Kopierschutz" der Einsatz von darauf
spezialisierten Dienstleistern (sprich: Donglehersteller à la Aladdin,
Wibu, Marx o.ä.). Die dadurch entstehenden Zusatzkosten musst Du
allerdings Deinen Kunden aufhalsen.
Alle selbst entwickelten Systeme sind prinzipbedingt* unsicher oder ganz
erheblich zu teuer oder für den Kunden zu unflexibel.
Andererseits gibt es Kunden, die sich gezielt weigern, "verdongelte"
Software einzusetzen, eine Einstellung, die ich verstehen kann.
*) ohne hier jemandem zu nahe treten zu wollen glaube ich ausschließen
zu können, es hier mit ernstzunehmenden Kryptographiexperten zu tun zu
haben.
Rufus Τ. Firefly schrieb:> *) ohne hier jemandem zu nahe treten zu wollen glaube ich ausschließen> zu können, es hier mit ernstzunehmenden Kryptographiexperten zu tun zu> haben.
Muss dich enttäuschen, ich habe das sogar studiert ;)
>Alladin Key beispielsweise
genau am Besten Alladin Fast-Eye Parallelport-Dongle. Mit dem hatte ich
mal einige Winterabende lang mein Vergnügen. Mach's aber bitte Win98
kompatibel, da's mit SoftICE und BPIO am spassigsten ist.
Mal ernsthaft, die ganzen Dongles sind doch genauso wie ein existenter
Software-Key. Hat man einen, dann fängt man den Traffic ein und emuliert
ihn entsprechend. Geauso wie man die conditional JMPs dem existenten Key
entsprechend durch fixe JMPs ersetzt, das quasie jeder Key gültig ist.
Beim Alladin FastEye von anno 1997 war es IIRC ein 400Bit langer,
repetitiver String, der mit geringfügigen Abweichungen immer wieder
abgefragt wurde.
>> Alle Deiner Schlüssel besitzen die selbe Checksumme im einfachsten Fall oder>> den gleichen MD5-Hash.>Das sollte hoffentlich in absehbarer Zeit nicht möglich sein ;)
Eine CUDA-fähige Grafikkarte spielt sich damit.
Daniel H. schrieb:>> Alle Deiner Schlüssel besitzen die selbe Checksumme im einfachsten Fall oder>> den gleichen MD5-Hash.>> Das sollte hoffentlich in absehbarer Zeit nicht möglich sein ;)
MD5 gilt seit einiger Zeit als gebrochen bzw. zumindest als für
ernsthafte Anwendungen eher nicht mehr brauchbar...
Unbekannter schrieb:> Mal ernsthaft, die ganzen Dongles sind doch genauso wie ein existenter> Software-Key. Hat man einen, dann fängt man den Traffic ein und emuliert> ihn entsprechend. Geauso wie man die conditional JMPs dem existenten Key> entsprechend durch fixe JMPs ersetzt, das quasie jeder Key gültig ist.
Naja, auf Basis von asymetrischer Verschlüsselung und Challenge Response
Verfahren könnte man ein Dongle schon sicher machen. Aber wie du schon
gesagt hast, kann man oft einfach den Code anpassen und die JMPs
ersetzten.
Lösung:
Man könnte jetzt anfangen und den Programmcode verschlüsselt auf dem
Dongle selbst speichern, der den Code würde dann "on demand"
entschlüsselt und zum PC geschickt. Aber da wirts' dann irgendwann
lächerlich.
Als jemand der schon auf beiden Seiten stand kann ich dir nur sagen das
du dir einfach überlegen musst welche Klientel deine Software anspricht
und wie viel sie wirklich wert ist.
Dann kannst du entscheiden wie viel dir der Schutz wert ist. Am Ende ist
alles knackbar, wenn du den Schutz aber mit jeder Version variierst und
neue interessante Features in der Software hast, dann lohnt es sich
nicht wirklich sie zu cracken.
Wirklich sicher wirst du eigentlich nur indem du essentielle Teile der
Software in Hardware oder auf einen Server auslagerst. Sprich, gewisse
Berechnungen werden nicht in der Software sondern in der Hardware
ausgeführt. Diese sollten natürlich nicht einfach nachvollziehbar sein.
Z.B. kann man diverse Tabellen auslagern, welche essentiell für die
Funktion sind, auf die man aber nicht einfach schliessen kann. Das
liesse sich dann relativ einfach in Hardware implementieren.
Wir standen auch vor der Entscheidung. Haben uns dann aber entschieden,
nur einen Pseudo-Schnutz mit RockEye Dongles zu implementieren und den
Code soweit wie möglich durch den Dotfuscator zu jagen. Als echten
Dongle gibts bei uns ja eh die 2kg schwere Hardware, ohne die die
Software keinen Sinn macht. Die Chinesen bekommen noch den RockEye
Dongle, den hatten wir aber selbst in weniger als einer Stunde gekackt.
Eine Idee war noch, Teile der Software verschlüsselt auf der Hardware zu
speichern und erst beim Start zu laden, aber der Aufwand steht meist in
keinem Vehältnis zum Nutzen, vor allem da die Software ein
Nischenprodukt ist.
Ich würde mir das stark überlegen. Viel wichtiger ist eine gerichtsfeste
EULA.
Jasch schrieb:> Daniel H. schrieb:>>> Alle Deiner Schlüssel besitzen die selbe Checksumme im einfachsten Fall oder>>> den gleichen MD5-Hash.>>>> Das sollte hoffentlich in absehbarer Zeit nicht möglich sein ;)>> MD5 gilt seit einiger Zeit als gebrochen bzw. zumindest als für> ernsthafte Anwendungen eher nicht mehr brauchbar...
Das spielt doch überhaupt keine Rolle. Es ist doch nur das
Authentifizierungsverfahren für den Key. Und wie gesagt: Wer so eine
Abfrage aushebeln kann und will, schafft das binnen weniger Minuten. Da
muss nur der Rückgabeparameter der Prüffunktion in der Hexdatei geändert
werden, und gut ist.
Es gibt genügend Firmen die lehnen prinzipiell Kopierschutz ab,
der auf "nach Hause telefonieren", Dongels oder anderer Zusatzhard-
ware, beruht ab. Auch an den Rechner gebundene SW wird abgelehnt.
Wobei der Kopierschutz als solcher voll in Ordnung ist.
Der bisher sicherste Kopierschutz ist ein erstklassiger Service,
logischerweise nicht über Abzock-Tel-Nummern!
So nach der Art: "Wir haben ein Problem, Seriennummer unsere SW ist
Xyyyz"; "Sie werden gleich zurückgerufen"; Rückruf binnen 5 min.
Problem war gelöst. Die Zeit reicht leicht um zu prüfen, ob der
echte Kunde angerufen hat.
Zusatz: Man kann ja auch Fehlermeldungen generieren die sehr selten
(1 mal pro Jahr) auftauchen, Antwort dann "Drücken Sie die Tasten
blabla" und gut ist.
Daniel H. schrieb:> Muss dich enttäuschen, ich habe das sogar studiert ;)
ein Studum allein macht noch nicht zum Experten. ;)
Nein, mal im Ernst:
Tu da einzig richtige und verzichte ganz auf einen Kopierschutz.
1. Der zusätzliche Aufwand verteuerte das Produkt, was es letztlich
unattraktiver für den Kunden macht.
2. Wenn dein Programm wirklich sensationell gut ist, wird es sowieso
geknackt und kopiert werden. Selbst Hardwaredongles bieten da keinen
wirklichen Schutz.
3. Falls dein Programm wieder Erwarten grottenschlecht ist, ist der
Kopierschutz eh obsolet, denn dann will es gar keiner kopieren.
Ok Leute, danke erstmal für die guten und interessanten Antworten.
Allerdings muss man auch das Klientel der Software betrachten. Und das
werden definitiv keine Cracker, Hacker, Hash- und Algorithmusexperten
sein.
Klar, wissen kann man's nie, aber dafür ist die Software auch zu
"klein", um einen derartigen Aufwand mit Dongles o.ä. zu machen.
Ich glaube, ich bleibe bei meiner MAC-Adresse.
Könntet ihr mir dafür irgendwelche Tipps geben, wie ich das am besten
angehe?
Gruß
Toni schrieb:> Der bisher sicherste Kopierschutz ist ein erstklassiger Service,> logischerweise nicht über Abzock-Tel-Nummern!
wie hält das jemanden davon ab deine software unerlaubt einzusetzen?
oder meinst du dass man die software so grottig programmieren muss dass
permanentes händchenhalten durch den support notwendig ist?
Hallo,
ich nehme an, du möchtest eine firmenspezifische Software programmieren.
Diese wird dann wohl nicht weltweit innerhalb von Minuten verbreitung
finden. Angenommen die Anzahl der Rechner, auf dem die Software
eingesetzt werden soll, ist überschaubar, wäre eine Möglichkeit, die
Software vor dem "Gelegenheitsraubkopierer" zu schützen, folgende: Fahr
zum Kunden hin und installier sie vor Ort. Die Funktion der Software
könnte an einfache Abfragen wie z.B. die Seriennummer der Festplatte
oder des Prozessors geknüpft sein. Jeder Versuch, die Software auf einem
anderen System zum Laufen zu bringen, wird scheitern. So hast Du
außerdem die Gewissheit, dass die Software auf diesem System garantiert
läuft, ohne dass Reklamationen durch fehlerhafte Installation oder
Nichtbeachtung von Voraussetzungen kommen.
Ganz nebenbei kannst Du auch einen Wartungsvertrag anbieten, um so
regelmäßig (im besten Fall ohne etwas tun zu müssen) Geld zu verdienen.
Oder du kassierst bei jeder Änderung/Reparatur am System eine
entsprechende Summe (z.B. 25€ je angefangene Viertelstunde). Auftrag per
Fax mit angegebener Telefonnummer und Unterschrift des Kunden zurück an
Dich wäre ratsam. So hast Du gleichzeitig einen schriftlichen Auftrag
und die Sicherheit, dass es sich um ein Original handelt.
Das Wäre z.B. auch per Fernwartung eine feine Sache. Möglichkeiten gibt
es genug, nur musst Du bei dem Wartungsvertrag höllisch aufpassen, dass
Deine Software vorher sehr gut getestet wird.
Guten Tag die Runde!
Gleich vorweg, ich bin kein Programmierer, bin aber mit Dongle (auch
Aladin, hab ich sogar) vertraut, meine ich kenn das.
Da ich nun vorhabe einen Automaten zu kreieren, und eigentlich das ganze
für mich ist, somit eigentlich sinnlos, ist es für mich aber dennoch
wichtig, zumindest mal ansatzweise dies mit den Dongle zu "verstehen".
Vieles hab ich da schon gelesen, aber der Punkt ist, dass ich für meinen
Automaten einen Schutz benötige, damit die Festplatte alleine sinnlos
ist.
Im Automaten wird ein PC verbaut, also dachte ich an einen USB Stick,
der immer angeschlossen sein muss damit das Gerät normal läuft. (Ohne
Abfrage beim Start) - so wie Aladin... Ich benötige auch kein Passwort
oder so, nur eben dass, dass bei einer Kopie der Festplatte der eine
nichts damit anfangen kann. Logischerweise muss der Stick sicher vor das
Kopieren sein bzw auch nicht formatierbar gemacht werden.
Ich rede von keiner High Tech Sache, wenns ein "normaler" User nicht
schafft da ranzukommen bin ich happy.
Es würde mich freuen wenn hier was entsehen könnte.
danke
@walter:
Moment, das ist vielleicht eine ganz andere Aufgabenstellung.
Wenn der Automat ein PC-gesteuertes "Embedded System" (im weitesten
Sinne) ist, und von der eigenen Firma gewartet wird, was soll verhindert
werden?
a) Nachbau durch Konkurrenz
b) Manipulation oder Datenentnahme von der enthaltenen Platte durch
Kunden?
Danke für die Antwort.
Es geht schon um die Datenentnahme. Denn sämtliche Software ist zwar
öffentlich, aber ich will einfach verhindern, dass bei Kopieren der
ganzen Festplatte einfach die Spiele nicht laufen, ohne "Dongle".
Es ist rein ein privates Projekt.
@walter: was du willst ist ein online Schlüssel im RAM.
"ich bin kein Programmierer, bin aber mit Dongle (auch
Aladin, hab ich sogar) vertraut"
...pffff....
"also dachte ich an einen USB Stick,
der immer angeschlossen sein muss damit das Gerät normal läuft. (Ohne
Abfrage beim Start) - so wie Aladin..."
...pffff.......pffff....
Ohne Ahnung kann mans gleich sein lassen.
Ist zwar schon ein paar Jährchen her, aber Alladin hat doch auch
Lösungen für Nicht-Programmierer. Da gabs doch so ein
Verschlüsselungsprogramm, dem wirfst du dein Programm vor und dieses
Tool bindet das dann an einen Dongle. Bei starten des Programms läuft
erst mal Alladin-Software, die nachsieht ob der Dongle vorhanden ist und
nur wenn ja wird dann das in ihm eingebettete Exe gestartet.
Markus Lebner schrieb:> Allerdings muss man auch das Klientel der Software betrachten. Und das> werden definitiv keine Cracker, Hacker, Hash- und Algorithmusexperten> sein.> Klar, wissen kann man's nie, aber dafür ist die Software auch zu> "klein", um einen derartigen Aufwand mit Dongles o.ä. zu machen.
Gute Einstellung.
Für den Tischler Huber, der bei dir eine Etikettendrucksoftware kauft,
tut es auch ein Schlüssel in der Registry, den du ein wenig versteckt
anlegst, wenn du bei ihm bist.
Das reicht völlig aus, dass er deine Software nicht auch noch auf die
anderen 5 PC im Unternehmen ohne dein Wissen verteilt.
Und wenn sich Crack-Profis deines Programmes annehmen, hast du sowieso
keine Chance.
Ein Kopierschutz erfüllt selten seinen eigentlichen Zweck. Spätestens
wenn diese Firma bankrott macht, kannst Du Deine Maschine wegwerfen oder
mit einem kleinem Sprung im Programm das Übel beseitigen.
Jedesmal wenn Du einen USB in den Rechner einsteckst, wird der
Registry-Eintrag \HKLM\SYSTEM\CurrentControlSet\Services\USBSTOR\Enum
aktualisiert.
Dort kannst Du die Serie-Nr des Sticks ermitteln.
Mehmet Kendi schrieb:> Dort kannst Du die Serie-Nr des Sticks ermitteln.
Idee ist schön, aber kaputte, verschwundene Sticks hatte ich schon wie
Sand am Meer.
Ein Text auf dem Monitor mit Hinweis auf irgendeine Maschinen-Nr
(ausgelesen) und Servicetelefon/Fax 0049... könnte für weitere
Kundenkontakte und Nachfolgegeschäfte durchaus gewinnbringender sein.
Vorteil ist: auch exportierte oder geklaute Maschinen werden mit der
Zeit wieder aufgefunden.
Für wenig Aufwand würde ich folgendes machen: Du suchst einen USB Stick,
der eine eindeutige Seriennummer im USB Descriptor einprogrammiert hat.
Diese Seriennummer liest zum Beispiel mit dem Tool devcon aus. Mit der
Seriennummer als Passwort hast deine Spiele verschlüsselt (Zip, Rar...).
Wenn der USB Stick dran steckt, entschlüsselst du beim Systemstart die
Spiele mithilfe der wiederum ausgelesenen USB Seriennummer auf eine
Ram-Disk und startest sie von dort. Somit kann man die Spiele nur
spielen, wenn man genau den USB Stick hat. Jetzt müsste man nur noch
verhindern, dass jemand im Betrieb einen USB Stick ansteckt und die
entschlüsselten Spiele kopiert. Das könnte man erreichen, wenn man alle
USB Ports außer dem für den Dongle-Stick zuklebt/ablötet und beim
Abziehen des Dongles die RAM-Disk löscht.
Christian R. schrieb:> Viel wichtiger ist eine gerichtsfeste> EULA.
Kann jeder knicken, zumindest in Deutschland:
EULAs sind nicht rechtskräftig und nicht bindend, da diese erst nach dem
Kauf vom Benutzer akzeptiert werden müssen, aber um rechtskräftig zu
sein müssen Vereinbarungen schon vor dem kauf durch den Nutzer gekannt
und akzeptiert werden... gab dazu auch mal ein interessantes Video von
Semper wo das auch erklärt wurde...