Je travaille sur une application que je vais bientôt distribuer publiquement. Je voudrais faire n'importe quoi dans mon pouvoir pour vous assurer que ceux qui téléchargent mon programme ne renversent pas l'ingénieur. Je comprends que la distribution d'un fichier .jar est hautement insécurité. P>
Quelqu'un peut-il recommander une plate-forme de manière indépendante de distribuer mon application Java? En outre, j'aimerais l'installer comme service sur n'importe quelle plate-forme (Windows, Linux, Mac OSX). P>
Merci! P>
7 Réponses :
Avez-vous envisagé d'utiliser un compilateur de code natif tel que GCJ ? Ce n'est pas une plate-forme indépendante (vous devriez compiler une pour chaque plate-forme cible), mais je ne vois pas comment vous pouvez distribuer le bytecode indépendant de la plate-forme et pourtant cacher ce bytecode à partir de vos utilisateurs finaux. P>
Vous pouvez l'obscorer. Il rendra plus difficile l'ingénierie inverse de votre programme. En outre, je pense que vous pouvez rendre votre fichier de classe exécutable (c'est-à-dire pour Windows) trop p>
Edit: Pour être honnête, si la sécurité de votre application est si importante, ce qui est préférable d'éviter Java. Vous pouvez utiliser GCC Compiler pour C ++ par exemple (qui est plus ou moins une plate-forme indépendante tant que vous ne faites pas d'appels système). Il vous suffit de le compiler sur les différentes machines hôtes (qui est quelque chose que votre question initiale indique comme votre besoin, mais sur Java). P>
Il y a aussi qt, mais je n'ai pas essayé celui-là moi-même. P>
Vous pouvez faire des exécutables - mais tout ce que vous faites est de faire une machine virtuelle.
Difficile, mais pas impossible.
Vous pouvez chiffrer le pot, mais vous devrez alors écrire un chargeur de classe personnalisé pour charger le contenu du pot. Cela n'est toujours pas 100% imbécile à la preuve - le fait simple est que rien que vous puissiez faire, vous rendrez votre code 100% sécurisé s'il est ciblé. Voir cette discussion ici. P>
Le problème avec les fichiers JAR cryptés est que vous devez fournir un code pour décrypter les fichiers d'exécution. Ce code peut être inverse ingénieur pour déterminer la clé / algorithme de déchiffrement.
@Stephen - d'accord 100%. Il ne fait aucun doute que cette méthode est seulement comme un cadenas - faite pour garder un homme honnête honnête. Quiconque souhaite mettre un niveau d'effort dans l'obtention de la source d'un pot peut le faire. Après tout, une fois que cela a été décodé, il peut être lu à la mémoire de la mémoire.
Vous pouvez brouiller / obscurcer votre bytecode avec YGUARD ou autre Java-byTecode- Obfuscators. P>
Système d'exploitation La distribution indépendante peut être difficile. IMHO La meilleure solution est une archive normale contenant plusieurs scripts (.bat / .cmd pour Windows, .sh pour Linux / OSX) pour le démarrage du programme sous les systèmes d'exploitation Le programme prend en charge le programme. P>
Exécution d'un programme Java en tant que service peut être encore plus difficile: c'est facile sous Linux, où il vous suffit d'écrire un script de démarrage approprié pour l'exécuter à l'arrière-plan. Je sais que Firedaemon a des problèmes à exécuter des programmes Java en tant que service, il pourrait donc être difficile (ou impossible) de l'exécuter en tant que service sur Windows. Désolé, mais je n'ai aucune idée de MacOS X. Pourrait être aussi facile que Linux, pourrait être aussi impossible que Windows. P>
Obfuscation est la voie à suivre.
Exécution de votre application via un Obfuscator permet d'ingénierie inverse plus difficile et coûteuse. P>
Jetez un oeil au wrapper de service Java pour un moyen relativement facile Pour installer et exécuter votre application Java en tant que service sur plusieurs plates-formes. P>
Comme d'autres les ont dit, vous pouvez obscorer votre code. Cela rendra l'ingénierie inverse non triviale. Vous pouvez également compiler votre Java au code natif en utilisant (par exemple) GCJ. Cela fera de plus en ingénierie inverse, mais cela signifie également que vous devez créer différents ensembles de distribution pour chaque plate-forme matérielle / système d'exploitation prise en charge. P>
Je comprends que la distribution d'un fichier .jar est hautement insécurité. P> blockQuote>
Vous devez comprendre que si vous distribuez un logiciel sous n'importe quel formulaire em> pour exécuter sur une plate-forme que vous ne contrôlez pas complètement, il n'ya rien de technique que vous puissiez faire pour empêcher l'ingénierie inverse. Rien. P>
En fin de compte, vous devez échanger les avantages de la distribution de votre logiciel par rapport aux risques de quelqu'un en ingénierie inverse. Une approche que les gens prennent consiste à comprendre si les avantages l'emportent sur les risques * des coûts et utilisent des garanties légales (par exemple des licences de logiciels appropriées) pour dissuader l'ingénierie inverse. L'autre approche consiste à dire «bonne chance à vous» à des ingénieurs inverse potentiels et à faire votre argent en offrant des services plutôt que des licences logicielles. P>
ou vous pouvez faire ce que j'ai fait. Java Front Fin avec certaines fonctions backend écrites en C ++ compilée dans une DLL appelée via JNI. L'interface graphique frontale est complètement portable avec le gruau de backend fait comme natif. P>