Also generell gibt es da keinen wirklichen Schutz. Das erkennt man an den ganzen Firmen, die dies massiv probiert haben und alle mehr oder weniger gescheitert sind.
Das, was Du da baust, ist eher etwas negatives aus Anwendersicht. Daher sollte man sich immer gut überlegen ob und was man macht. Man muss ja nur an die eigene Genervtheit denken, wenn eine Windows Aktivierung Probleme machte oder so ...
Ich sehe das also sehr kritisch! Zumal die, die es "hacken" wollen, es einfach machen.
Generell kannst Du Dir anschauen, was für Werte Du wo auslesen kannst. (z.B. mal bei
https://github.com/oshi/oshi schauen, was es da alles gibt ... )
So Dinge kannst Du dann als String zusammen fassen und den dann nutzen um diesen dann mit einem private key/Zertifikat zu signieren. Dann kannst Du auf dem Client immer wieder prüfen, ob die gelesenen werte und die Signatur übereinstimmen (mit dem public key/zertifikat).
Aber ist natürlich leicht zu hacken - ich tauschen den public key aus und signiere einen String entsprechend oder ich passe die Kontrolle so an, dss diese immer ohne Check zurückgibt, dass der Check ok ist ....
Kann man erschweren - zur Not sogar mit GraalVM ein native binary bauen. (Also voll übersetzt - nichts "zusammengepacktes". Dann braucht es auch keine Spielereien wie Obfuscator.
Obfuscator ist was feines - dann viel Spass mit den Stacktraces. Da es ja keine aussagekräftigen Namen mehr gibt, ist der Stacktrace quatsch. Traces schreiben wird auch blöd, denn was nützt es, wenn eine Methode unleserlich gemacht wird aber als erstes eine Tracenachricht mit dem original Methodennamen kommt?
Um es etwas sicherer zu haben, könntest Du da natürlich Online Checks machen. Dann hast Du einen Server zu betreiben und die Applikation redet mit dem um zu sehen, ob er arbeiten darf. Macht es dem Kunden einfach, die Applikation zu verlagern. Er kann diese aber nur einmal nutzen. Denn jeder Client spricht den Server ja an mit Details a.la. "Kundenname" "Lizenznummer" und nur wenn das passt und nicht von einem anderen Rechner angefragt wurde in letzter Zeit, dann ist es ok. Musst Du aber auch absichern denn so einen REST Service mocken ist nicht schwer ...
Und der Kunde verhaut Dich, weil er nicht arbeiten kann, wenn das Netz mal nicht geht, dein Server nicht läuft und und und ...
Es gibt natürlich auch noch die Idee, das mit Hardware abzusichern. Diese Hardware Dongles gab es in der Vergangenheit z.B. bei Autocad. (Evtl. auch heute noch, keine Ahnung). Steinberg sichert Lizenzen auf einem USB Stick / Key meine ich. Unraid nutzt eine Lizensierung per USB Stick, der eine id haben muss (haben die meisten). Sowas wäre also auch denkbar - müsste man zur Not schauen, wie man per JNI sowas ausliest.
Also ich sehe es kritisch, den es macht es den ehrlichen Kunden schwerer. Und die Frage ist eh, was für Schaden Du da ggf. hast. Und es hört sich nicht wirklich wie ein eigenständiges Produkt an sondern ein Tool, das da spezifisch ist für einen Kunden. Da wird die Entwicklung Kostenseitig doch hoffentlich abgedeckt sein, so dass der Kunde machen kann, was er will. (Sprich: Auftragsentwicklung - da hat der Kunde sogar alle Rechte. Der kriegt sogar den Source und kann machen was er will.)
Das einfach einmal von meiner Seite über Möglichkeiten, die ich so sehe und die ich aber alle extrem kritisch sehe! Ich würde mich auf das Produkt konzentrieren und die Zufriedenheit des Kunden sicher stellen. Und dann reicht ein einfaches bauen eines Produktes.
Ach ja: Die notwendigen Tools um selbst exe zu analysieren und so gibt es auch schon als Open Source - dank NSA:
https://www.nsa.gov/resources/everyone/ghidra/. Da braucht man also keine teuren Tools mehr
