En supposant que votre algorithme doit être exécuté en tant que bytecode Java, sur des JVM arbitraires. Ensuite, les utilisateurs peuvent pirater leur JVM pour vider le bytecode quelque part, peu importe à quel point vous masquer le processus de chargement des classes. Une fois que vous avez le bytecode, vous pouvez contrôler l'analyse des flux, c'est-à-dire décider quelle information est transmise d'où à où.
Vous pouvez confondre l'ordre des instructions individuelles, mais cela ne changera pas le calcul. Pour quelqu'un qui veut simplement exécuter votre algorithme non modifié, cela ne change rien. Dans quelle mesure une réorganisation va-t-elle empêcher les gens de modifier votre algorithme? Cela dépend beaucoup de l'algorithme et de la complexité du flux de contrôle.
Vous pourriez confondre le flux de contrôle en utilisant une réflexion de façon obscure, ou en implémentant votre propre interpréteur et en l'utilisant pour exécuter l'algorithme. Mais ces deux approches seront probablement sévèrement pénalisées par les performances de l'algorithme. Dans d'autres langues (comme le code x86 natif), vous pourriez confondre le désassembleur en introduisant une ambiguïté sur la façon dont les octets devraient être divisés en instructions, en utilisant certains octets comme partie de queue d'une instruction dans un cas, mais en tant que instruction distincte dans d'autres cas. Mais en Java il n'y a pas une telle option, la signification du bytecode est trop bien définie.
Une façon dont pourrait être en mesure d'obscurcir les choses quelque peu est de mélanger étroitement l'algorithme avec d'autres étapes du programme. Pour un programme en ligne droite, cela peut rendre les choses un peu plus difficiles à suivre, en particulier si vous passez des numéros à travers des objets GUI invisibles ou des choses bizarres similaires. Mais une fois que vous avez besoin de boucles ou similaires, il semble très difficile d'aligner les limites de la boucle, donc je doute que cette approche ait beaucoup de potentiel non plus. Et je doute qu'il y ait un obfuscateur prêt à l'emploi pour cela, alors vous devriez faire les choses à la main.
Si votre algorithme est si important, n'en donnez aucune implémentation à quelqu'un d'autre. Exécutez-le uniquement sur du matériel que vous * contrôlez * et vendez-le en tant que service. Tout le reste va être inversé. –
Les numéros peuvent-ils être stockés de manière cryptée ou obscurcie? –
Peut-être que vous pouvez traduire l'algo spécifique en tant que c/C++ dll et l'appeler avec JNI? Beaucoup plus difficile à inverseengineer – Rolle