2011-04-23 2 views
2

Je travaille toujours sur mon programme d'obfuscation basé sur la modification de fichiers ILAsm. (Réf Which C# method names should not be obfuscated?)Est-il correct de supprimer des instructions .property des fichiers ILAsm pour une utilisation en production?

En regardant le code ILAsm, j'ai l'impression que les instructions .property ne sont utilisées pour rien, du moins pas pour l'exécution du programme. Ai-je raison de penser qu'ils ne sont là que pour fournir des métadonnées pour Visual Studio? Et si oui, est-il correct de les supprimer simplement quand le code ILAsm ne sera utilisé que pour produire des modules de production qui ne seront jamais utilisés avec Visual Studio?

+2

Alors, des questions stupides: avez-vous essayé de le supprimer pour voir quel effet il a? Quelles recherches avez-vous faites sur ILAsm et .property pour voir s'il sert à quoi que ce soit? – jcolebrand

+1

Peut-être que je pourrais essayer de le faire et peut-être qu'il semblerait être OK et peut-être plus tard, il deviendrait évident que ce n'était pas une bonne idée après tout. Alors peut-être qu'une chose intelligente à faire est de demander aux gens qui ont plus de connaissances que moi de donner des conseils. – RenniePet

+0

très vrai, très vrai en effet. J'étais juste curieux de savoir si vous en aviez déjà rencontré. – jcolebrand

Répondre

4

Vous avez raison de dire que le fait que quelque chose soit déclaré comme une propriété n'affecte pas l'exécution du programme. Comme le livre Inside Microsoft .NET IL Assembler déclare dans son introduction au chapitre concernant les propriétés, le compilateur JIT et le moteur d'exécution ne sont pas du tout conscients des propriétés, et aucune instruction IL ne fait référence au concept de propriété.

Notez que Visual Studio n'est pas le seul consommateur de métadonnées. Si vous déposez .property et réassemblez, vous aurez les méthodes getter et setter, mais ce n'est évidemment plus une propriété. L'exemple le plus évident d'où cela devient un problème: que se passe-t-il si une instance d'un objet est transmise à une autre méthode qui utilise la réflexion pour invoquer chaque propriété de la classe? Les propriétés ne seraient pas trouvées et le comportement au moment de l'exécution a changé en raison de la méthode d'obfuscation proposée.

Bien sûr, des scénarios tels que la réflexion et la sérialisation sont des outils courants d'obfuscation, comme nous l'avons vu dans votre question précédente. Donc, ce que je dis est, c'est problématique, mais sa problématique dans un ensemble de scénarios similaires à ceux décrits dans votre autre thread - en particulier les scénarios où les métadonnées sont consommées ou la sérialisation est en cours d'exécution.

La dernière édition du livre que j'ai mentionné ci-dessus a un nom différent: Expert .NET 2.0 IL Assembler; ce peut être une référence utile pour vous. Compiling for the .NET Common Language Runtime peut également être utile.

+0

Merci pour votre réponse très informative. Cela a dû prendre du temps pour taper, et je l'apprécie. – RenniePet

Questions connexes