Kopierschutz für USB stick?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Kopierschutz für USB stick?

    Hi,

    ich habe folgendes Problem:
    Ich entwickele gerade ein Java Programm welches vom Auftraggeber auf einem USB Stick an den Kunden ausgeliefert wird.
    Soweit so gut.
    Jetzt soll es aber so sein, dass wenn der Kunde den Wartungsvertrag meines Auftraggeber kündigt, dieser den Stick wieder einziehen will, damit der Kunde die Software nicht weiter nutzen kann. Dummerweise kann der Kunde nun aber vorher einfach den USB stick kopieren und das wollen wir verhindern.
    Klar könnte man jetzt ein zusätzliches Hardware dengle dazu packen aber das ist ja auch irgendwie doof. Leider muss das ganze Plattform übergreifend sein. Sonst wäre es kein Problem einfach die Seriennummer des Sticks abzufragen. Aber soweit wie ich in meinen Recherchen gekommen bin, ist das mit java nicht wirklich möglich und schon gar nicht auf allen drei relevanten OS.

    Es es muss jetzt nicht der Wahnsinns Schütz sein, denn wir gehen nicht von besonders hoher krimineller Energie des Kunden aus und auch seine IT Kenntnisse sind meist nur rudimentär. Die Software auf dem Stick ist schon auf die Hardware des Kunden gelockt, somit nutzt es auch nichts wenn irgendjemand mal so einen Stick kopiert und ins Netz stellt. Denn der würde bei anderen nicht funktionieren.

    Habe ihr eine gute Idee wie man das mit vertretbarem Aufwand umsetzen kann?

    Gruss

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Naja du könntest einfach für alle 3 großen Plattformen kleine C-Wrapper schreiben, welche die Seriennummer auslesen und an das Java Programm weiterreichen. Alternativ baust du dir einen einfachen Lizenz Server und das Programm fragt bei jedem Start (oder alle x Tage) die Lizenz ab. Kunden, welche die Software nicht mehr nutzen möchten werden dann einfach deaktiviert und die Software verweigert den Dienst ;)
  • Ein Lizenzserver ist leider keine alternative, da die Firma Teil eines Konzerns ist der keine externen webservices erlaubt. Das wäre ein riesen aufwand so etwas bei der IT des mutterkonzerns zu beantragen und installieren zu lassen.

    Das mit den 3 C-Programmen hatte ich mir auch schon überlegt. Wäre halt nur viel Arbeit.

    Gruss

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Thallius schrieb:

    Habe ihr eine gute Idee wie man das mit vertretbarem Aufwand umsetzen kann?
    Von einer Programmierumgebung für SPSen kenne ich das Verfahren mit der Lizenz folgendermaßen:1. Das Programm braucht eine lokale Lizenz (auf der Festplatte) und prüft dies beim Programmstart.2. Mit dem Lizenzprogramm kann man von einem und auf einem USB-Stick die Lizenz übertragen. Das Lizenzprogramm kopiert also die Lizenz auf die Festplatt und löscht die Lizenz vom USB-Stick gleichzeitig, um sicherzustellen, dass die Lizenz nur einmal vorhanden ist. Ebenso rückwärts, um die Lizenz auf einen anderen Rechner zu übertragen. Irgendwie wird in der Lizenz vermerkt, auf welchen Datenträger diese aktuell gültig ist.Hoffe ich habe das einigermaßen verständlich das Verfahren rübergebracht. Ob's dir jetzt weiterbringt, keine Ahnung
  • Baue doch einfach ein Verfallsdatum in die App ein, welches jeweils bis zum Ende des Wartungsvertrages + 1-2 Monate läuft. Dies sollte sich auch über ein Lizenzfile mit Ablaufdatum realisieren lassen. Wird der Wartungsvertrag nicht verlängert, dann erhält der Kunde auch kein neues Lizenzfile und das Programm verweigert nach Ablauf der Lizenz einfach den Dienst. Bei einer Verlängerung des Wartungsvertrages erhält der Kunde einfach ein neues Lizenzfile mit neuer Laufzeit.
  • Thallius schrieb:


    Die Software auf dem Stick ist schon auf die Hardware des Kunden gelockt, somit nutzt es auch nichts wenn irgendjemand mal so einen Stick kopiert und ins Netz stellt. Denn der würde bei anderen nicht funktionieren.

    Laut Claus ist die Software ja schon auf die Hardware des Kunden gelockt. Es würde also nur noch darum gehen, die Nutzbarkeit der Software einzugrenzen. Dies würde über eine Lizenzfile mit Nutzungsende sicherlich recht einfach zu lösen sein.
  • Ja das wäre Plan B, dass die Software immer nur 1 Jahr laufen würde und der Techniker dann bei der jährlichen Wertung über ein Hardware dongle, dass der Techniker eh für die Installation der Software braucht, die Software wieder um ein Jahr verlängert. Das hat hat nur den Nachteil, dass der Techniker das nicht vergessen darf, sonst muss er später extra noch einmal hin nur weil er das vergessen hat. deswegen wäre was anderes schöner.

    Gruss

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Ich find auch die RAW-Blockdevice-Lesen-Lösung (s. post von entwickler) klingt ab besten. Wenn alles fertig ist, ein Key-File auf den Stick schreiben und ausm FAT32-Katalog löschen, sollte denke ich gehen. Und dann per offset vom Stick trotzdem lesen. Aber frag mich bloss nicht, ob man mit Java aufs Raw-Device zugreifen kann......

    EDIT: Alternativ:
    - Heh, oder viel zu grossen Stick kaufen, aufschrauben, einen der Speicher-Blöcke physikalisch zerstören, und dann testen, ob der auch wirklich zerstört ist :)
    - Eigenen USB Massstorage Driver, der unter bestimmten Dingen was komisches macht. Diese kleinen ATmega Devboards kommen ja bspw. alle mit Software "auf sich selbst" als Massstorage-Device, plus Quellcode für den Treiber IIRC. Und billig sind die auch.
    C++

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von zerm ()

  • zerm schrieb:

    Ich find auch die RAW-Blockdevice-Lesen-Lösung (s. post von entwickler) klingt ab besten. Wenn alles fertig ist, ein Key-File auf den Stick schreiben und ausm FAT32-Katalog löschen, sollte denke ich gehen. Und dann per offset vom Stick trotzdem lesen. Aber frag mich bloss nicht, ob man mit Java aufs Raw-Device zugreifen kann......

    EDIT: Alternativ:
    - Heh, oder viel zu grossen Stick kaufen, aufschrauben, einen der Speicher-Blöcke physikalisch zerstören, und dann testen, ob der auch wirklich zerstört ist :)
    - Eigenen USB Massstorage Driver, der unter bestimmten Dingen was komisches macht. Diese kleinen ATmega Devboards kommen ja bspw. alle mit Software "auf sich selbst" als Massstorage-Device, plus Quellcode für den Treiber IIRC. Und billig sind die auch.


    Ja mit mit C oder C++ hätte ich auch jede Menge tolle Ideen. Aber mit Java geht eben so gut wie nichts das Spaß macht und für alle drei OS extra Software schreiben ist auch lästig.

    Gruss

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • C/C++ und JNI, ansonsten wird das wohl nix…
    Eventuell gibt es schon eine Cross-Platform Library dafür, die Du dann nur noch mit Hilfe des JNI mit Java verdrahten musst.

    (Klingt einfacher als es ist. ;))
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Thallius schrieb:

    Ja mit mit C oder C++ hätte ich auch jede Menge tolle Ideen. Aber mit Java geht eben so gut wie nichts das Spaß macht und für alle drei OS extra Software schreiben ist auch lästig.

    Naja, wenn Du das ganze im Mass-Storage-Treiber auf Device-Seite implementierst, ist es ja relativ Sprach-agnostisch? Kannst ja sowas machen, wie wenn man ein File namens XXX anlegt, und dannach davon liesst, bekommt man vom USB-Gerät eine Seriennummer geliefert. Dannach löscht man das File wieder..
    C++
  • zerm schrieb:

    Thallius schrieb:

    Ja mit mit C oder C++ hätte ich auch jede Menge tolle Ideen. Aber mit Java geht eben so gut wie nichts das Spaß macht und für alle drei OS extra Software schreiben ist auch lästig.

    Naja, wenn Du das ganze im Mass-Storage-Treiber auf Device-Seite implementierst, ist es ja relativ Sprach-agnostisch? Kannst ja sowas machen, wie wenn man ein File namens XXX anlegt, und dannach davon liesst, bekommt man vom USB-Gerät eine Seriennummer geliefert. Dannach löscht man das File wieder..

    Müsste gehen, aber es gibt zwei Haken: Erstens müsste man dann nicht nur die Mass Storage Class implementieren, sondern auch das Filesystem darüber (MSC ist block level). Und zweitens müsste man ggf. Caching und Optimierungen der Filesystem-Implementierungen auf dem Host überlisten. Geht auch, kann aber fummelig werden. Wenn man über eine Custom-Hardware (bzw. Firmware) geht, könnte es einfacher sein, das Gerät als Composite Device zu bauen und ein zweites Interface zur Authentifizierung bereit zu stellen, auf das man dann über ein Java-USB-Binding (wie usb4java) zugreifen kann (also die Ideen von Marco und macmoonshine). Auf das Mass Storage-Gerät selbst zuzgreifen dürfte schwierig werden, weil es zu dem Zeitpunkt vom Mass Storage-Treiber des Hosts benutzt wird, deshalb das zweite Interface.

    Lustiger Talk zu dem Thema: media.ccc.de/browse/congress/2…ve_from_scratch_h264.html
    Multigrad - 360°-Produktfotografie für den Mac
  • manoh schrieb:

    Thallius schrieb:

    Habe ihr eine gute Idee wie man das mit vertretbarem Aufwand umsetzen kann?
    Von einer Programmierumgebung für SPSen kenne ich das Verfahren mit der Lizenz folgendermaßen:1. Das Programm braucht eine lokale Lizenz (auf der Festplatte) und prüft dies beim Programmstart.2. Mit dem Lizenzprogramm kann man von einem und auf einem USB-Stick die Lizenz übertragen. Das Lizenzprogramm kopiert also die Lizenz auf die Festplatt und löscht die Lizenz vom USB-Stick gleichzeitig, um sicherzustellen, dass die Lizenz nur einmal vorhanden ist. Ebenso rückwärts, um die Lizenz auf einen anderen Rechner zu übertragen. Irgendwie wird in der Lizenz vermerkt, auf welchen Datenträger diese aktuell gültig ist.Hoffe ich habe das einigermaßen verständlich das Verfahren rübergebracht. Ob's dir jetzt weiterbringt, keine Ahnung
    Wie stellen die denn sicher, dass ich nicht kurz vor dem Kopieren der Lizenz von der HD auf den Stick ein Back-Up mache, welches ich kurz nach dem kopieren wieder auf die HD bringe?
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • macmoonshine schrieb:

    Vielleicht geht es ja mit usb4java


    Habs gerade ausprobiert und scheint zu funktionieren. Er will zwar im Moment unter Windows7 das Device nicht öffnen aber das kriege ich bestimmt auch noch irgednwie hin.

    Auf jeden Fall ist es sehr einfach zu handhaben und gut durchdacht.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Zu früh gefreut.....

    Unter Windows geht es nur mit einem speziellen WinUSB Treiber für das jeweilige Device.

    Also auch nicht zu gebrauchen. Schade das wäre ja auch zu schön gewesen.

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)