Reflector - codice offuscato

5

Eseguo Reflector per decompilare alcuni programmi e sembra essere offuscato.

Ho ottenuto l'output seguente, non è molto utile.

Qualche idea su come decompilare il codice offuscato?

  [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;
    }
    
posta AaronS 06.02.2012 - 18:38
fonte

4 risposte

5

Tecnicamente, decompilare il codice offuscato equivale a decompilare il codice non offuscato. Il modo in cui l'offuscamento in .NET funziona è rendendolo ridicolmente difficile seguire la logica dei codepath instradando le chiamate attraverso tipi / metodi / proprietà / etc in modo casuale in modi non ovvi. L'intero punto di offuscamento consiste nell'impedire alle persone di decompilare il codice attraverso nomi simili a Reflector e capire come funzionano gli interni del codice.

Non esiste un modo semplice per uscire dall'offuscamento. Sei praticamente bloccato a camminare il codice così com'è.

    
risposta data 06.02.2012 - 20:25
fonte
4

Hai provato ILSpy?

link

Ho avuto abbastanza fortuna con il codice offuscato, sembra ancora spazzatura a causa della ridenominazione variabile, ma puoi seguirla abbastanza bene.

    
risposta data 06.02.2012 - 19:38
fonte
3

Esistono in realtà diversi (almeno 4) tipi di offuscamento molto diversi, che vanno dal semplice cambiamento del nome di metodi e variabili in nomi "anonimi", alla logica del programma di mangling e persino a un motore di de-offuscamento del runtime.
Gli strumenti per farlo vanno dai plugin gratuiti (alcuni programmatori addirittura scrivono tutto il loro codice in questo modo :)), attraverso strumenti commerciali costosi e di alta gamma. Dovresti sapere con cosa hai a che fare, a seconda che la risposta possa essere diversa.

Nel tuo caso, il tuo codice sembra probabilmente il Livello 2, cioè con qualche mangling del percorso del codice, non solo delle variabili. Il che significa che è ancora perfettamente valido, con gli stessi esatti risultati, solo incredibilmente difficile da analizzare manualmente. (Se si trattava solo di denominazione variabile, è possibile modificare i nomi in modo incrementale, a seconda del contesto e dell'intervallo, e cercare di capire da lì).

Non ho una soluzione semplice per te, ma la domanda è: cosa vuoi fare con esso?

  • Se vuoi ricompilarlo, con piccole modifiche - dovrebbe funzionare bene, non sarà troppo complicato, a meno che tu non abbia davvero bisogno di capire cos'è che cosa.
  • Se vuoi controllarlo manualmente per difetti - Buona fortuna, ne avrai bisogno
  • D'altra parte, non dovresti avere problemi alimentando questo a uno scanner di codici automatico. Gli strumenti di fascia alta (:-) ) dovrebbe non avere problemi nell'analizzare questo (ma non promette), sebbene provi a verificare il risultati, o individuare la linea di codice originale, potrebbe rivelarsi impegnativo. Ma almeno saresti in grado di ottenere una certa visibilità del livello di sicurezza.
risposta data 23.02.2012 - 19:21
fonte
3

È difficile dire quale sia stato l'offuscatore, ma de4dot (deobfuscator .NET) potrebbe essere in grado di aiutarti: link

    
risposta data 01.03.2012 - 03:04
fonte

Leggi altre domande sui tag