Bibliothek schützen



  • Hallo,
    ist es irgendwie möglich, dass ich vor dem kompilieren ein Skript ausführe, welches das kompilieren beeinflusst? Z.B. wenn das Skript erfolgreich war, soll ein bestimmtes #define gesetzt werden.

    Ich habe eine Bibliothek, wovon ich eine Demoversion anbieten möchte. Wenn z.B. eine Lizenzdatei nicht vorhanden ist, soll in der kompilierten Anwendung ein Wasserzeichen angezeigt werden. Ich möchte jedoch nicht, dass die kompilierte Anwendung nach der Lizenzdatei sucht, da sie ja dann jeder haben müsste und nicht nur der Entwickler.



  • In welcher Form liegt deine Bibliothek vor? Wenn du eine static library anbietest, ist es einfach. Definiere in deinem Quellcode einige bedingte Abschnitte ( #ifdef , #define sollten dafür bereits reichen) und kompiliere eine Demo-Version, wo du gewisse Code-Sequenzen ausführst, welche das gewünschte Verhalten in die fertige Anwendung einfügen.

    Für die richtige Version entfernst du das. Dann kannst du beide Versionen verteilen, wie es dir gerade beliebt.

    Andere Varianten sind nicht so einfach umzusetzen.


  • Mod

    Dein Compiler sollte auch eine Kommandozeilenoption dafür kennen. Guck mal in der Anleitung. Oftmals ist es -D.



  • Es ist eine statische Bibliothek. Wenn ich aber 2 Versionen kompiliere, kann die Vollversion doch einfach weitergereicht werden... oder verstehe ich dich jetzt falsch?



  • storm009 schrieb:

    Wenn ich aber 2 Versionen kompiliere, kann die Vollversion doch einfach weitergereicht werden... oder verstehe ich dich jetzt falsch?

    Ja, das ist korrekt. Darum schnell einfach mal $10.000 für eine Lizenz verlangen, und vielleicht auch noch für jeden Lizenznehmer separat kompilieren, so dass dieser jeweils ersichtlich ist. Dann wird die Library auch nicht mehr so einfach verteilt 😉



  • Du machst statt einer LIB eine DLL mit einer Initialiserungsfunktion int = InitDLL(char *license), die als erstes aufgerufen werden muss und ohne die nichts läuft. Ist der Aufruf richtig (Vollversion) liefert die Funktion 1 ansonsten (Demoversion) 0 zurück. Alles andere regelst du in der DLL. So hast du eine Version für beides, allerdings mit festgeschriebenem Lizenzcode.

    Dieser Vorschlag ist vergleichbar mit einer externen INI-Datei, nur ohne diese. Die nicht erlaubte Weitergabe einer lizensierten Version regelt man in der Lizenzvereinbarung. Versuche aber erst einmal Interesse für die Bibliothek zu finden, dann kannst du dir belibig zusätzliches einfallen lassen.

    @/rant/ Statt $10.000 besser $11.000 verlangen. Dann lässt du dir das Neucompilieren auch noch bezahlen! 🕶



  • In dem Fall muss doch auch wieder der Entnutzer die Lizenzdatei besitzen 😉 Ich hätte gerne, dass nur der Entwickler eine Lizenz hat um Vollversionen veröffentlichen zu können. Ob das, mit meiner Biblitothek erstellte, Programm weitergereicht wird interessiert micht garnicht ^^

    Mir geht es jetzt nicht hauptsächlichs ums Geld oder irgendwelchen sicheren Lizenzvereinbarungen. Mich interessiert nur, ob das irgendwie machbar wäre.

    Dachte man könnte vll irgendwie von außen defines setzen, die man beim kompilieren per ifdef überprüft oder so...



  • Mit einer DLL geht es wie vorgeschlagen ohne Lizenzdatei. Der Programmenwickler erhält die von dir vereinbarte Lizenz zur freien Benutzung und kann seine damit erstellten Anwendungen beliebig an Endnutzer verteilen. Willst du jetzt auch noch eine Kontrolle, wer als Endnutzer von welchem lizensierten Programmentwickler mit deiner Bibliothek arbeiten will?

    Zur Klarstellung:
    Es sind 3 Parteien beteiligt
    - du als Entwickler der Bibliothek
    - der Programmenwickler (Demo oder Lizenz), der die Bibliothek verwendet
    - der Endnutzer der vom Programmentwickler erstellten Anwendung

    Mach das nicht unnötig schwer. Je höher die Hürden, desto geringer das Interesse zum Einsatz! Wenn du primär kein Geld damit verdienen willst, gebe doch alles frei. Du kannst natürlich auch mit dem lizensierten Programmentwickler vereinbaren, wieviele Anwendungen er mit einer Lizenz erstellen und weitergeben darf. Um das zu kontrollieren ist einiges mehr erforderlich, aber nicht unmöglich.



  • storm009 schrieb:

    Dachte man könnte vll irgendwie von außen defines setzen, die man beim kompilieren per ifdef überprüft oder so...

    Um mit #define und #ifdef etwas erreichen zu können, mußt du aber auch den Quellcode zur Verfügung stellen, damit ihn der Entwickler mit den entsprechenden Einstellungen selber übersetzen kann. Und dann kann er den Mechanismus auch problemlos aushebeln.


  • Mod

    Damit sind wir beim Thema Kopierschutz im Allgemeinen angelangt. Darüber haben sich schon ganz andere Leute die Köpfe zerbrochen. Es gibt keine Lösung.

    Aber bei einer Bibliothek sehe ich das Problem nicht: Deine Bibliothek soll von den Entwicklern gekauft werden. Die Entwickler dürfen Programme gegen diese Bibliothek linken und diese Programme vertreiben. Aber wo liegt dein Problem, dass du überhaupt an irgendeiner Stelle auf gültige Lizenz prüfen musst? Wenn du den Verdacht hast, dass ein Programm deine Bibliothek unrechtmäßig benutzt, so lässt sich das doch leicht feststellen und dann lässt sich der Urheber des Programms juristisch belangen. Dazu braucht man doch nicht den rechtmäßigen Entwicklern (oder gar den Nutzern) eine Prüfung aufdrücken.



  • SeppJ schrieb:

    Damit sind wir beim Thema Kopierschutz im Allgemeinen angelangt. Darüber haben sich schon ganz andere Leute die Köpfe zerbrochen. Es gibt keine Lösung. .....

    👍 Stimmt 100%-ig !!!

    Denkbar, aber aufwendig wäre es, in die Bibliothek ein Monitoring (auf einer eigenen Webseite) für den Einsatz jeder damit erstellten Anwendung einzubauen. Ist kein Netzzugang möglich, macht die Bibliothek einfach nichts oder nur Demo. Ansonsten wird jeder Einsatz im Detail mit IP-Nr. und Lizenzcode protokolliert. Darüber möchte ich aber nicht weiter nachdenken und schon gar nicht selbst realisieren wollen!

    George Orwell: "1984: Big Brother is watching you!" Die Zuständigkeit läge im Liebesministerium. 🕶

    Reicht das jetzt? 😕


Anmelden zum Antworten