2013-03-01 20 views
6

So che è impossibile invertire una dll in un codice C++, quindi vorrei raccogliere il maggior numero possibile di dettagli da esso. Non è la mia DLL, quindi non ho il codice sorgente ovviamente. Quale programma dovrei usare?Come invertire una DLL nel codice C++?

+1

Un popolare strumento di reverse engineering binario è IDA Pro - c'è una versione gratuita, che soddisfa le esigenze di base. – datenwolf

+2

Avete una certa comprensione di cosa fa la DLL? Quanto è grande? Sai in che lingua è stato scritto originariamente? Cosa stai cercando di ottenere? –

+1

Ho aggiunto alcune "frasi chiave" come tag. Guardali. –

risposta

12

Bene, se sei esperto puoi smontare la DLL e capire tutte le sue funzioni. Questo richiede una notevole quantità di tempo, ma se lo fai puoi tornare indietro alla fonte a mano.

Altrimenti, è possibile iniziare utilizzando uno strumento come Dependency Walker per ottenere le DLL e le funzioni da cui dipende e le funzioni che esporta. Da lì puoi trovare le funzioni che ti interessano e utilizzare un disassemblatore come IDA per vedere cosa fanno.

+3

Nessuno, tranne le persone sciocche che hanno troppo tempo a disposizione, annullerebbero * tutto *. Andresti sempre con qualcosa come IDA e segui i percorsi di chiamata che ti interessano. Inoltre, è possibile visualizzare le esportazioni in IDA stessa. Non c'è bisogno di un intermediario. +1 ancora – 0xC0000022L

+2

Non tutti hanno IDA, o vogliono impararlo. Quindi, suggerisco Dependency Walker come un modo molto semplice per ottenere informazioni utili. (Ovviamente, se sei bravo in IDA, puoi ovviamente fare tutto lì :)) – nneonneo

1

È necessario un visualizzatore di file PE. Questo ti dirà le esportazioni dalla DLL e potrai ottenere i dati nella sezione .text per vedere il codice della macchina.

2

È possibile visualizzare l'elenco delle funzioni esportate utilizzando lo strumento dumpbin. Se le funzioni C++ vengono esportate, potresti essere in grado di dedurre i parametri dal nome mangling.

È possibile estrarre tutte le risorse dalla DLL semplicemente "aprendola" come file per la visualizzazione delle risorse in Visual Studio. Se la DLL è una DLL basata su COM, c'è una piccola possibilità che la libreria dei tipi sia incorporata come risorsa al suo interno. E se hai la libreria dei tipi, puoi # importarla per ricostruire i file di intestazione per le interfacce pubbliche.

Questo è quasi il massimo.

+1

Non sono d'accordo sul fatto che questo è quanto di meglio si possa ottenere - tutto dipende da quanto tempo/abilità/impegno hai a disposizione. Vedi la risposta di nneonneo. – JBentley