2013-08-26 12 views
9

Ho un'applicazione scritta in C# (senza fonte, ovviamente), che deve essere modificata un po '. Ad esempio, ho bisogno di fermare alcune righe di codice che creano un menu non necessario. Quindi penso che dovrei commentarli.Modifica compilata. Net Exe

Il codice sorgente non è offuscato. So che posso decompilare, modificare e compilare completamente, usando strumenti come Reflector/Reflexil. Ma tutti sanno che, facendo ciò, molte parti del codice non verranno compilate di nuovo! C'è un modo in Reflector (o qualsiasi altro prodotto) che una parte di potrebbe essere disabilitata/modificata senza questo processo?

Grazie.

risposta

3

Alla fine sono riuscito a "Disable" poche righe di codice nel exe compilato.

Ho usato Reflector con plug-in Reflexil installato. Reflexil mi ha permesso di modificare un'istruzione MSIL e quindi salvare il risultato in un file exe. Quindi, ha coinvolto l'apprendimento di alcune istruzioni MSIL, in particolare il comando "nessuna operazione" (fare una riga di codice non fare nulla).Per visualizzare l'elenco di istruzioni e un tutorial, vedere here e here.

Spero che aiuti qualcun altro.

4

Se fosse davvero necessario farlo, è possibile decompilarlo con Reflector (o un prodotto simile) e quindi utilizzarlo per provare a ricreare una soluzione in .Net che produrrà lo stesso eseguibile.

Si può incorrere in problemi intorno:

  1. codice offuscato
  2. sezioni in cui la mostra decompilare codice preciso per sezioni specifiche, ma per qualche motivo non funziona nella vostra nuova soluzione (e allora cosa fai?)

Questo per non parlare delle potenziali questioni legali legate a questo. Se l'eseguibile è stato rilasciato con una licenza che ti permetterebbe di farlo, probabilmente avresti accesso al codice sorgente. Quindi il fatto che tu non abbia accesso al codice sorgente implica che fare ciò che stai suggerendo potrebbe non essere legale.

+0

A parte le questioni legali, il codice sorgente non è offuscato. Sapevo di poter decompilare, modificare e compilare completamente. Ma come hai detto, molte parti del codice non verranno compilate di nuovo! C'è un modo in Reflector (o qualsiasi altro prodotto) che una parte di potrebbe essere disabilitata/modificata senza questo processo? –

-2

Se si dispone del codice sorgente sulla stessa macchina su cui si sta testando il file exe e se si stanno apportando modifiche nel codice sorgente in Visual Studio, durante la compilazione verrà automaticamente visualizzato il file exe.

Non è necessario fare alcuna cosa speciale per questo. E se non lo è, basta apportare le modifiche al codice e incollare il nuovo exe della cartella di debug (con la cartella debugg) su un'altra macchina con tutte le modifiche recenti.

+1

Ti dispiacerebbe leggere di nuovo la domanda? Non abbiamo alcun codice sorgente. Ho appena compilato exe e dll. E abbiamo bisogno di cambiare alcune righe di codice. –

0

Questo thread può aiutare: dotnet dll decompile and change the code

L'ultima volta Quando ho provato con decompilare la fonte utilizzando la riflessione, ho avuto troppi problemi di compilazione con riguardo alle risorse e di altri sub se la DLL non è offuscato. Quindi ci potrebbero essere cose che vanno oltre l'estrazione della sorgente e la modifica per far funzionare la nuova dll come quella vecchia.

Quindi suggerisco di andare con la manipolazione diretta di dll usando una delle opzioni menzionate nell'altra discussione.

13

Si potrebbe provare dnSpy. È un editor di assembly .NET, un decompilatore e un debugger biforcato da ILSpy.

https://github.com/0xd4d/dnSpy

+4

Grande scoperta! La descrizione della pagina github sembra che si tratti di un progetto non intenzionale, ma l'app stessa è costituita da leghe che precedono qualsiasi alternativa gratuita. – blade

+0

Wow, sono impressionato. Questo può effettivamente ricompilare gli assembly modificati. Volevo solo cambiare un indirizzo email codificato (* sight *) e questo ha fatto il trucco! Insane! – Jerther

+0

Che tipo di magia è? È semplicemente perfetto! –