2009-03-08 20 views
8

Ho una piccola utility che è stata originariamente scritta in VS2005.Reverse engineer C++ DLL

Ho bisogno di fare una piccola modifica, ma il codice sorgente di una delle DLL è stato perso da qualche parte.

Esiste uno strumento gratuito oa prezzo ragionevole per eseguire il reverse engineering della DLL sul codice C++.

risposta

12

Hex-Rays decompiler è un ottimo strumento, ma il codice sarà piuttosto difficile da leggere e sarà necessario dedicare molto tempo alla decodificazione dell'intera DLL.

+3

I raggi esadecimali sono probabilmente i migliori ma il codice che fornirà sarà utile solo per capire come alcune parti di esso funzionano e non riesco a compilarlo esso. +1 –

+0

Se la modifica è abbastanza piccola, è possibile utilizzare l'output del decompilatore per correggere la DLL nell'assembly, ad esempio con OllyDbg. – shoosh

+1

Sì, OllyDbg è sempre stato il mio preferito per le patch dlls, ma solo dopo SoftICE. Come si può dimenticare la leggendaria "SoftICe"? – abhilash

-3

Non puoi girare la carne di nuovo ad un animale e anche se si potesse si avrebbe un animale morto: P

+2

Forse tranne quando l'animale è Java .. –

+10

Sì, è possibile. L'animale sembrerà orribile ma camminerà e funzionerà allo stesso modo dell'originale! –

+0

concordato di intervenire su questo .. –

0

Se il vostro piccolo cambiamento è quello di modificare un testo o per saltare alcune routine, è possibile utilizzare un editor esadecimale o un disassemblatore, ma non sarai in grado di vedere il codice C++ originale, e anche se trovi uno strumento che riattiva la DLL in codice, tutti i nomi delle variabili sparirebbero e sarebbe un gran casino.

3

Non conosco la situazione esatta che si ha e la funzionalità che la DLL implementa per la propria applicazione. Ma direi che nella maggior parte dei casi sarebbe meglio riscrivere la DLL mancante in base alla funzionalità conosciuta.

Ciò è particolarmente vero se si dispone di documentazione per esso.

Provare a decodificare il codice binario all'assemblatore, quindi a C++ e quindi provare a modificarlo per fornire la funzionalità esistente sarà nella maggior parte dei casi a tempo, e forse addirittura impossibile.

0

Devi farlo come fanno i giochi e i cracker delle app: usa un disassemblatore e modifica il codice di Assembler.

6

Si potrebbe anche voler dare un'occhiata a OllyDbg che è un debugger di analisi di livello assemblatore a 32 bit. Viene utilizzato per analizzare il codice binario in scenari in cui non si dispone di un codice sorgente. È un debugger leggero. OllyDbg è uno shareware in modo da poter scaricare & usarlo gratuitamente .. !!

Visita OllyDbg è home page here

PS: Negli cracker giorno utilizzati da SoftICE NuMega per il debug in un file eseguibile & afferrare una fotografia ai valori dei registri. SoftICE era un debugger avanzato. Era sicuramente lo strumento preferito dai cracker. Non so sullo stato attuale del prodotto. Il sito di NuMega non aveva informazioni a riguardo. Potrei averlo trascurato ma non sono riuscito a trovarlo. Ti consiglio di mettere le mani su una versione legacy (4.0x) di SoftICE & applicare la patch WindowsXP per SoftICE. Lavorare con SoftICE è una sorta di "esperienza".

Ulteriore lettura:Reversing: Secrets of Reverse Engineering by Eldad Eilam

1

Un po 'a seconda della situazione vorrei mantenere l'eredità/DLL binario come-è e scrivere una DLL wrapper che cambierà e/o aggiungere qualsiasi comportamento aggiuntivo.

L'idea è di aggregare la vecchia funzionalità in una nuova DLL che importa quello vecchio.

-2

SE è stato eseguito in .NET, perché non utilizzare il dotNet Reflector.

+0

È C++, come indicato nella domanda. – Brad