Je dirige un réflecteur pour décompiler un programme et il semble être obscurcié.
J'ai eu la sortie suivante, ce n'est pas très utile.
Des idées comment décompiler le code obscurant?
[CompilerGenerated]
get
{
// This item is obfuscated and can not be translated.
}
[CompilerGenerated]
set
{
// This item is obfuscated and can not be translated.
switch ((1 == 1))
{
case true:
goto Label_0020;
}
goto Label_0018;
if (((0 == 0) ? 0 : 1) != 0)
{
}
this.eval_t = value;
}
Techniquement parlant, le code obscurcissant de décompilation est identique à la décompilation du code non obscurposé. La façon dont l'obfuscation de .NET fonctionne est en le rendant furieuse pour suivre la logique du codePaths en routant les appels via des types/méthodes/properties nommés aléatoirement/etc. de manière non évidente. L'ensemble de l'obfuscation est d'empêcher les personnes de décompiler le code à travers les goûts de réflecteur et de comprendre comment les internes du code fonctionnent.
Il n'y a pas de moyen facile de sortir de l'obscurcissement. Vous êtes à peu près bloqué avec la marche du code comme.
Avez-vous essayé iLspy?
http://wiki.shaarpdevelop.net/ilspy.ashx
J'ai eu une assez bonne chance avec un code obscurci, il ressemble toujours à des ordures en raison du renommage variable, mais vous pouvez le suivre plutôt bien.
Il est difficile de dire ce que l'obfuscator a été utilisé, mais DE4DOT (.NET DEBFUSCATOR) peut être capable de vous aider: https://github.com/0xd4d/de4dot
Il existe en fait plusieurs (au moins 4) types d'obscurcissement très différents, allant de la simple modification de méthode et de noms variables en noms "anonymes", à la logique de programme de gerling, et même un moteur d'obfuscation d'exécution.
Les outils pour le faire varient des plugins gratuits (certains programmeurs écrivent même tout leur code de cette façon :)), à travers des outils commerciaux haut de gamme et coûteux. Vous devriez savoir ce que vous traitez, selon que la réponse peut être différente.
Dans votre cas, votre code ressemble à son niveau 2, c'est-à-dire avec un chemin de code Mangring, pas seulement des variables. Ce qui signifie, il est toujours parfaitement valide, avec exactement les mêmes résultats, juste incroyablement difficile d'analyser manuellement. (Si cela ne faisait que la nommage variable, vous pouvez modifier progressivement les noms, en fonction du contexte et de la plage et essayez de vous fixer à partir de là).
Je n'ai pas de solution simple pour vous, mais la question est - que voulez-vous avec cela?