È possibile "decompilare" un file .exe di Windows? O almeno visualizzare l'Assemblea?


237

Un mio amico ha scaricato del malware da Facebook e sono curioso di vedere cosa fa senza infettarmi. So che non puoi davvero decompilare un .exe, ma posso almeno visualizzarlo in Assembly o collegare un debugger?

Modifica per dire che non è un eseguibile .NET, nessuna intestazione CLI.


3
malware da facebook ?? potresti spiegarlo
Aditya Mukherji il

Ci scusiamo per la risposta in ritardo ... ma il modo in cui penso sia successo è stato: ha eseguito un malware, che a un certo punto ha spammato tutti i suoi contatti su FB (me) con un link a un "video" che ti ha richiesto scarica un "nuovo codec". Suppongo che si sia comportato come un verme in questo senso.
Swilliams,

Risposte:


448

Con un debugger è possibile scorrere in modo interattivo l'assemblaggio del programma.
Con un disassemblatore , è possibile visualizzare l'assemblaggio del programma in modo più dettagliato.
Con un decompilatore , puoi trasformare un programma in codice sorgente parziale, supponendo di sapere in cosa è stato scritto (cosa che puoi scoprire con strumenti gratuiti come PEiD - se il programma è compresso, dovrai prima decomprimerlo O Rileva facilmente se non riesci a trovare PEiD da nessuna parte. DIE ha una forte comunità di sviluppatori su github al momento).

debugger:

  • OllyDbg , gratuito, un eccellente debugger a 32 bit, per il quale puoi trovare numerosi plugin e script creati dagli utenti per renderlo ancora più utile.
  • WinDbg , gratuito, un debugger abbastanza capace da Microsoft. WinDbg è particolarmente utile per esaminare gli interni di Windows, poiché conosce più le strutture di dati di altri debugger.
  • SoftICE , SICE agli amici. Il commercio e lo sviluppo si sono interrotti nel 2006. SoftICE è una specie di strumento hardcore che gira sotto il sistema operativo (e arresta l'intero sistema quando viene invocato). SoftICE è ancora utilizzato da molti professionisti, anche se potrebbe essere difficile da ottenere e potrebbe non funzionare su alcuni hardware (o software - vale a dire, non funzionerà su schede Vista o NVIDIA gfx).

disassemblatori:

  • IDA Pro (commerciale) - disassemblatore / debugger top di gamma. Utilizzato dalla maggior parte dei professionisti, come analisti di malware, ecc. Costa un bel po 'di soldi (esiste una versione gratuita , ma è abbastanza limitata)
  • W32Dasm (gratuito) - un po 'datato ma fa il lavoro. Credo che W32Dasm siaandonware in questi giorni e ci sono numerosi hack creati dagli utenti per aggiungere alcune funzionalità molto utili. Dovrai guardarti intorno per trovare la versione migliore.

decompilatori:

  • Visual Basic: VB Decompiler , commerciale, produce un bytecode in qualche modo identificabile.
  • Delphi: DeDe , gratuito, produce codice sorgente di buona qualità.
  • C: HexRays , commerciale, un plugin per IDA Pro della stessa azienda. Produce grandi risultati ma costa un sacco di soldi e non sarà venduto a nessuno (o almeno così ho sentito).
  • .NET (C #): dotPeek , gratuito, decompila gli assembly .NET 1.0-4.5 in C #. Supporto per file .dll, .exe, .zip, .vsix, .nupkg e .winmd.

Alcuni strumenti correlati che potrebbero tornare utili in qualsiasi cosa tu stia facendo sono editor di risorse come ResourceHacker (gratuito) e un buon editor esadecimale come Hex Workshop (commerciale).

Inoltre, se stai eseguendo l'analisi del malware (o usi SICE) , suggerisco vivamente di eseguire tutto all'interno di una macchina virtuale, vale a dire VMware Workstation . Nel caso di SICE, proteggerà il tuo sistema reale dai BSOD e, nel caso di malware, proteggerà il tuo sistema reale dal programma di destinazione. Puoi leggere informazioni sull'analisi del malware con VMware qui .

Personalmente, lancio con Olly, WinDbg e W32Dasm e alcuni strumenti di utilità più piccoli.

Inoltre, ricorda che il disassemblaggio o il debug del software di altre persone è di solito contro l'EULA almeno :)


16
Apprezzo l'ultimo paragrafo nella sua generalità, un buon consiglio, ma è divertente nel contesto della domanda: dubito che un virus abbia un EULA! ;-)
PhiLho,

4
In realtà, alcuni malware e persino trojan di recente hanno avuto EULA in loro (oh, quei russi ..) Naturalmente, possono essere (e sono) ignorati dalle ricerche, perché si può presumere che nessuno si farà avanti per denunciarli. .. Inoltre, di solito sono scritti troppo male per significare qualcosa in tribunale in ogni caso.
anon6439

2
La versione precedente di IDA Pro è gratuita per uso non commerciale.
Simon Buchan,

6
Si noti che la maggior parte dei malware in questi giorni (almeno malware compilati) può facilmente rilevare se è in esecuzione in VMWare, Virtual PC, WINE, VirtualBox, ecc.
Mick,

Se stai eseguendo una VM, fai attenzione all'attacco Blue Pill.
Siqi Lin,

44

L'eccellente post di psoul risponde alla tua domanda in modo da non replicare il suo buon lavoro, ma ritengo che possa aiutare a spiegare perché questa è al tempo stesso una domanda perfettamente valida ma anche terribilmente sciocca. Dopotutto, questo è un posto dove imparare, giusto?

I moderni programmi per computer sono prodotti attraverso una serie di conversioni, iniziando con l'inserimento di un corpo di istruzioni di testo leggibili dall'uomo (chiamato "codice sorgente") e terminando con un corpo di istruzioni leggibili dal computer (chiamato in alternativa "binario" o "macchina codice").

Il modo in cui un computer esegue una serie di istruzioni sul codice macchina è in definitiva molto semplice. Ogni azione che un processore può eseguire (ad esempio, leggere dalla memoria, aggiungere due valori) è rappresentata da un codice numerico. Se ti dicessi che il numero 1 significava urlo e il numero 2 significa risatina, e poi ho alzato le carte con 1 o 2 in attesa di urlare o ridacchiare di conseguenza, userei quello che è essenzialmente lo stesso sistema utilizzato da un computer operare.

Un file binario è solo un insieme di quei codici (di solito chiamano "codici op") e le informazioni ("argomenti") su cui agiscono i codici op.

Ora, il linguaggio assembly è un linguaggio informatico in cui ogni parola di comando nella lingua rappresenta esattamente un codice operativo sul processore. Esiste una traduzione diretta 1: 1 tra un comando di linguaggio assembly e un codice operativo del processore. Questo è il motivo per cui il gruppo di codifica per un processore x386 è diverso dal gruppo di codifica per un processore ARM.

Lo smontaggio è semplicemente questo: un programma legge attraverso il binario (il codice macchina), sostituendo i codici operativi con i loro comandi equivalenti in linguaggio assembly e genera il risultato come un file di testo. È importante capirlo; se il tuo computer è in grado di leggere il binario, puoi leggere anche il binario, manualmente con una tabella di codici operativi in ​​mano (ick) o tramite un disassemblatore.

I disassemblatori hanno alcuni nuovi trucchi e tutti, ma è importante capire che un disassemblatore è in definitiva un meccanismo di ricerca e sostituzione. Questo è il motivo per cui qualsiasi EULA che gli proibisce di soffiare aria calda. Non è possibile consentire immediatamente al computer di leggere i dati del programma e vietare anche al computer di leggere i dati del programma.

(Non fraintendetemi, ci sono stati tentativi di farlo. Funzionano così come DRM sui file dei brani.)

Tuttavia, ci sono avvertimenti nell'approccio allo smontaggio. I nomi delle variabili sono inesistenti; una cosa del genere non esiste per la tua CPU. Le chiamate in biblioteca sono confuse e spesso richiedono lo smontaggio di ulteriori binari. E il montaggio è difficile da leggere nelle migliori condizioni.

La maggior parte dei programmatori professionisti non può sedersi e leggere il linguaggio assembly senza avere mal di testa. Per un dilettante non accadrà.

Ad ogni modo, questa è una spiegazione un po 'opaca, ma spero che sia di aiuto. Tutti possono sentirsi liberi di correggere eventuali errori da parte mia; è passato un po 'di tempo. ;)


1
Questo elabora lo smontaggio, ma mi piacerebbe sentire un'elaborazione sul decompilare. È probabile che sia altrettanto infruttuoso? Quali sono gli avvertimenti?
Prometeo,

@has: Decompilare il codice nativo è una sfida piuttosto difficile, spesso del tutto impossibile. Gli ottimizzatori sono estremamente aggressivi, traducendo spesso il codice sorgente in nulla. Non puoi decompilare nulla.
Indispensabile il


11

Qualsiasi debugger decente può farlo. Prova OllyDbg . (modifica: che ha un grande disassemblatore che decodifica anche i parametri per le chiamate WinAPI!)




6

Se stai solo cercando di capire cosa fa un malware, potrebbe essere molto più semplice eseguirlo sotto qualcosa come lo strumento gratuito Process Monitor che segnalerà ogni volta che tenta di accedere al filesystem, al registro, alle porte, ecc ...

Inoltre, l'utilizzo di una macchina virtuale come il server VMWare gratuito è molto utile per questo tipo di lavoro. Puoi creare un'immagine "pulita", quindi tornare a quella ogni volta che esegui il malware.


4

Potresti ottenere alcune informazioni visualizzandole in assembly, ma penso che la cosa più semplice da fare sia avviare una macchina virtuale e vedere cosa fa. Assicurati di non avere condivisioni aperte o qualcosa del genere che può passare attraverso;)


Sì, ci ho pensato, ma preferirei non dover affrontare la seccatura di creare una VM solo per ucciderla :)
Swilliams,

1
È vero, è una seccatura per questo caso, ma trovo sempre utile tenere una VM in giro per testare nuovi software o cose del genere. Posso quindi fare quello che mi piace e semplicemente scegliere di non salvare lo stato alla fine e tornare alla VM pulita per la prossima esecuzione.
Rob Prouse,

4

Vale la pena dare un'occhiata anche a Boomerang .


Non proprio. si blocca e brucia per qualcosa di più complicato degli eseguibili più banali.
shoosh


3

Non riesco a credere che nessuno abbia ancora detto nulla sull'immunità Debugger .

Immunity Debugger è un potente strumento per scrivere exploit, analizzare malware e decodificare file binari. Inizialmente era basato sul codice sorgente di Ollydbg 1.0, ma con bug di resoution dei nomi corretto. Ha un'API Python ben supportata per una facile estensibilità, quindi puoi scrivere i tuoi script Python per aiutarti nell'analisi.

Inoltre, ce n'è uno che Peter del team di Corelan ha scritto, chiamato mona.py , eccellente strumento tra l'altro.


2

Se si desidera eseguire il programma per vedere cosa fa senza infettare il computer, utilizzare con una macchina virtuale come VMWare o Microsoft VPC o un programma in grado di eseguire il sandbox del programma come SandboxIE




2

Direi che nel 2019, Ghidra ( https://ghidra-sre.org/ ) vale la pena dare un'occhiata. È open source (e gratuito) e ha fenomenali capacità di analisi del codice, inclusa la possibilità di decompilare fino a un codice C abbastanza leggibile.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.