web-dev-qa-db-fra.com

Réflecteur - code obscurcié

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;
    }
5
AaronS

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.

5
Steve

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.

4
StrangeWill

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

3
0xd4d

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?

  • Si vous voulez le recompiler, avec de petits changements - devrait fonctionner correctement, ne sera pas trop compliqué, à moins que vous n'ayez vraiment besoin de comprendre ce qui est quoi.
  • Si vous voulez l'examiner manuellement pour les défauts - bonne chance, vous en aurez besoin.
  • D'autre part, vous ne devriez pas avoir de problème à nourrir cela à un scanner de code automatique. Les outils supérieurs (:-)) devrait n'ont aucun problème à analyser cela (mais pas de promesses), bien que d'essayer de vérifier les résultats, ou de localiser la ligne de code d'origine, peut s'avérer difficile. Mais vous pourrez au moins être capable d'obtenir une certaine visibilité sur le niveau de sécurité.
3
AviD