Obfusquait un programme Java affecte ses performances (à l'exclusion des choses de renommage)? P>
5 Réponses :
non. L'obfuscation remplace simplement votre code sensiblement nommé avec un problème illisible. Dans certains cas (à titre d'exemple lors de l'utilisation de PROGUARD, notre code peut même être "optimisé", en supprimant tous les blocs de code inuelables (tels que edit forte> (pour clarifier les idées Magesh). P>
Lorsque vous utilisez un obfuscator (et ne pas obscurcir à la main, ce qui n'est pas une bonne idée), il chargera vos classes et inline certaines méthodes, ou des blocs de code (comme le cas susmentionné) pour simplifier le code des gros blocs de code obtenu. . En conséquence, il existe moins d'appels de méthode, nécessitant moins d'utilisation de la pile, puis fixant l'application. P>
L'autre chose qu'un obfuscator a généralement pour renommer toutes les variables de si (faux) code> et des déclarations d'apparence). P >
mysmartvariable code> à
A $ A $ A $ A CODE>, rendant impossible à décompiler (car un décompleterie Java considère
$ code> comme symbole utilisé pour identifier les classes internes et anonymes, et non les variables). P>
@James, pas toujours, vois ma réponse. Certains logiciels ajoute des flux de contrôle sans signification afin que le code soit beaucoup plus difficile à lire, par ex. flux obscurcissement. Cela a un impact sur la performance, bien que petit.
@James oui je voulais dire l'obscurcissement de flux.
Le plus définitivement oui: sauf dans le cas le plus simple où seuls les noms d'identifiant sont brouillés, ce n'est qu'une question de la quantité de performance affectée. Plus de détails sur l'exemple ici , des informations générales sur les techniques d'obfuscation sont disponibles dans le Code Obfuscaté Article Wikipedia. P>
Si vous ajoutez du code redondant qui ne sera jamais traversé, non. Si vous ajoutez une logique qui doit être traversée dans l'exécution normale de votre code, alors, oui, cela affectera les performances. Combien dépend de quelle structure illogique que vous avez essayée d'ajouter aux confondes serait des pirates logiciels. P>
Désolé de bosse sans vergogne, mais un code qui n'est pas traversé peut être identifié assez rapidement pendant la rétro-ingénierie à l'aide d'une exécution étape par étape, donc je ne pense pas que cela soit considéré comme un bon type d'obfuscation.
Parfois, oui. En Java Me (la "version de téléphonie mobile" de Java), l'obfuscation fonctionne sur le code d'octet compilé et (entre autres choses) remplace les noms avec des courtes et automatiquement générées. Cela rend le code octet plus court, qui le rend au moins plus rapide de télécharger l'application sur le réseau. P>
En général, l'obfuscation en renommant des variables, des procédés et des noms de classe à plus de signification Noms n'a pas d'impact sur la performance. Certains fournisseurs de logiciels d'obfuscation prétendent même que de côté d'obscurcissement, il y a aussi un gain de performance jusqu'à 30%. Bien que je n'ai jamais testé ces revendications, je ne les ai jamais vus prouvés et les trouva donc difficiles à croire. P>
Cependant, gardez à l'esprit que certains logiciels permettent également d'obtenir l'obfuscation: ajouter des boucles de contrôle sans signification aux instructions afin que le code soit plus difficile à suivre. Que fait em> a un effet négatif sur la performance, bien que petit. P>
Point intéressant (vraiment, pas de blague ici), Razzie. Je me demande quel est l'intérêt car, une fois impliquant obfuscation, vous considérez votre code de mains hostiles pouvant utiliser des outils d'analyse de code pour éliminer les méthodes vides et les méthodes 1 appelées inline ...
Les bons obscustateurs peuvent produire un code totalement illisible, à l'aide de GOTO et d'autres déchets, entraînant du code très difficile à décompiler (bien). Cela vient avec une pénalité de performance cependant. Jetez un coup d'œil à Excelsior-usa.com/articles/java-obfuscators. HTML # Performance , lecture intéressante.