Question

Les noms de classe, de méthode et de variable sont-ils inclus dans le MSIL après la compilation d'un projet Windows App dans un fichier EXE?

  • Pour l'obscurcissement : moins de noms, plus difficile à inverser.
  • Et pour des performances : noms plus courts, accès plus rapide.

Par exemple. Donc, si les méthodes sont appelées via nom:

  • Conservez les noms courts pour améliorer les performances de la recherche de noms.
  • Conservez les noms cryptiques , plus difficiles à décompiler.
Était-ce utile?

La solution

Oui, ils sont dans l’IL - lancez le réflecteur et vous-même. Je les verrai. S'ils ne se retrouvaient pas dans l'IL, vous ne pourriez pas créer contre eux des bibliothèques. (Et oui, vous pouvez référencer les fichiers .exe comme s'il s'agissait de bibliothèques de classes.)

Cependant, tout cela est résolu une fois dans JIT.

Conservez les noms lisibles afin de pouvoir conserver le code ultérieurement. Il est peu probable que le problème de performances fasse une différence significative, et si vous souhaitez masquer votre code, ne le faites pas au niveau du code source ( vous êtes le lire le code) - faites-le avec un obfuscateur spécialement conçu.

EDIT: Pour ce qui est inclus - pourquoi ne pas simplement lancer Reflector ou ildasm et le découvrir? De mémoire, vous perdez les noms de variables locales (qui sont dans le fichier pdb si vous le construisez), mais c'est à peu près tout. Les noms de méthodes privées et les noms de variables privées sont toujours là.

Autres conseils

Oui, ils le font. Je ne pense pas qu’en utilisant des noms plus courts, on obtiendrait un gain de performances notable. Il n’ya aucun moyen que le gain surmonte la perte de lisibilité.

Les variables locales ne sont pas incluses dans MSIL. Les champs, méthodes, classes, etc. Les variables sont basées sur un index.

Les noms de membres sont inclus dans l'IL, qu'ils soient privés ou publics. En fait, tout votre code est également inclus et, si vous utilisez Reflector, vous pouvez pratiquement lire tout le code source de l'application. Il ne reste plus qu'à déboguer l'application, et je pense qu'il pourrait y avoir des outils pour cela.

Vous devez ABSOLUMENT (et je ne peux pas le souligner davantage) obscurcir votre code si vous créez des applications empaquetées comportant plusieurs clients et concurrents. Heureusement, de nombreux obfuscateurs sont disponibles.

C’est un problème majeur que j’ai avec .Net. Puisque MS travaille d'arrache-pied dans ce domaine, pourquoi ne pas développer (ou acquérir) un obfuscateur professionnel et en faire un élément de VS. Dotfuscator ne le coupe pas, pas la version qu'ils ont pour la communauté.

  
      
  • Gardez les noms courts, meilleurs   performances pour la recherche par nom.
  •   

Comment cela pourrait-il faire une différence? Je ne suis pas sûr de savoir comment les identifiants sont recherchés par la machine virtuelle, mais je suis à peu près sûr qu'il ne s'agit pas d'une comparaison de chaîne directe. Ce serait la pire façon de le faire.

  
      
  • Conservez les noms cryptés, plus difficiles à décompiler.
  •   

Pour être honnête, je ne pense pas que l’obscurcissement du code aide beaucoup. La plupart des développeurs compétents ont déjà développé un "sixième sens". pour comprendre rapidement les choses même si des identifiants comme les noms de méthodes sont totalement inutiles, car très souvent le code source qu’ils ont besoin de maintenir ou d’améliorer a déjà ces problèmes (je parle de noms de méthodes comme "DoAllStuff ()").

Quoi qu'il en soit, la sécurité par l'obscurité est généralement une mauvaise idée .

Si vous êtes préoccupé par l’obscurcissement, consultez .NET Reactor. J'ai testé 8 obfuscateurs différents et Reactor était non seulement le moins cher commercial, mais aussi le deuxième meilleur du groupe (le meilleur était le plus cher, Dotfuscator Gold).

[EDIT]

En fait, maintenant que j'y pense, si tout ce qui vous préoccupe est d'obscurcir les noms de méthodes, celui fourni avec VS.NET, Dotfuscator Community Edition, devrait fonctionner correctement.

Je pense qu'ils ont été ajoutés, mais la longueur du nom ne changera rien, à cause de la façon dont les noms de fonctions sont recherchés. En ce qui concerne l’obscurcissement, je pense qu’il existe des outils (Dotfuscator ou quelque chose du genre) qui font exactement ce que vous dites.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top