Ingegnere inverso DLL C ++
-
05-07-2019 - |
Domanda
Ho una piccola utility originariamente scritta in VS2005.
Devo fare una piccola modifica, ma il codice sorgente di una delle DLL è stato perso da qualche parte.
Esiste uno strumento gratuito oa prezzi ragionevoli per decodificare la dll in codice C ++.
Soluzione
Decompiler Hex-Rays è un ottimo strumento, ma il codice sarà piuttosto difficile per leggere e dovrai dedicare molto tempo a decodificare l'intera DLL.
Altri suggerimenti
Potresti anche dare un'occhiata a OllyDbg che è un debugger che analizza a livello di 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 che puoi scaricare & amp; usalo gratuitamente .. !!
Visita OllyDbg è la home page qui
PS: in passato i cracker utilizzavano SoftICE da NuMega per il debug in un eseguibile & amp; acquisire un'istantanea dei valori dei registri. SoftICE era un debugger avanzato. Era sicuramente lo strumento preferito per i cracker. Non conosco lo stato attuale del prodotto. Il sito di NuMega non aveva informazioni al riguardo. Potrei averlo trascurato ma non sono riuscito a trovarlo. Ti consiglio di mettere le mani su una versione legacy (4.0x) di SoftICE & amp; applica la patch WindowsXP per SoftICE. Lavorare con SoftICE è qualcosa di "esperienza".
Ulteriori informazioni: Inversione: i segreti dell'ingegneria inversa di Eldad Eilam
Non conosco la situazione esatta che hai e quanto la funzionalità implementa la DLL per la tua applicazione. Ma direi che nella maggior parte dei casi sarebbe meglio riscrivere la DLL mancante in base alla funzionalità nota.
Questo è particolarmente vero se hai della documentazione per questo.
Cercare di decodificare il codice binario in assembler, quindi in C ++ e quindi provare a modificarlo per fornire la funzionalità esistente sarà nella maggior parte dei casi dispendioso in termini di tempo e forse addirittura impossibile.
Se la tua piccola modifica è modificare del testo o saltare alcune routine, potresti usare un editor esadecimale o un disassemblatore, ma non sarai in grado di vedere il codice C ++ originale e anche se trovi uno strumento che trasforma la DLL in codice, tutti i nomi delle variabili sparirebbero e sarebbe un gran casino.
A seconda della tua situazione, manterrei la DLL legacy / binaria così com'è e scriverei una DLL wrapper che cambierà e / o aggiungerà qualsiasi comportamento aggiuntivo.
L'idea è di aggregare la vecchia funzionalità in una nuova DLL che importa quella vecchia.
Devi farlo come fanno i cracker di giochi e app: usa un disassemblatore e modifica il codice dell'Assemblea.
Non puoi riportare la carne su un animale e anche se potessi avresti un animale morto: P
SE è stato fatto in .NET, allora perché non usare il DotNet Reflector.