2009-03-08 7 views
8

Ich habe ein kleines Dienstprogramm, das ursprünglich in VS2005 geschrieben wurde.Reverse engineer C++ DLL

Ich muss eine kleine Änderung vornehmen, aber der Quellcode für eine der DLLs wurde irgendwo verloren.

Gibt es ein kostenloses oder kostengünstiges Tool, um die DLL zurück in C++ - Code umzuwandeln.

Antwort

12

Hex-Rays decompiler ist ein großartiges Werkzeug, aber der Code wird ziemlich schwer zu lesen sein und Sie werden viel Zeit aufwenden müssen, um die gesamte DLL zurückzuentwickeln.

+3

Hex-Strahlen ist wahrscheinlich das beste, aber der Code wird Ihnen nur nützlich sein, herauszufinden, wie bestimmte Teile davon funktionieren und kann nicht kompilieren es. +1 –

+0

Wenn die Änderung klein genug ist, können Sie die Ausgabe des Decompiler verwenden, um die DLL zum Beispiel in der Assembly OllyDbg zu patchen. – shoosh

+1

Ja, OllyDbg war immer mein Favorit, um DLLs zu patchen, aber nur nach SoftICE. Wie kann jemand die legendäre "SoftICe" vergessen? – abhilash

-3

Sie kann nicht Fleisch drehen zurück in ein Tier und selbst wenn Sie könnten Sie ein totes Tier haben würde: P

+2

Vielleicht außer, wenn das Tier Java ist .. –

+10

Ja können Sie. Das Tier wird abscheulich aussehen, aber es wird genauso gehen und funktionieren wie das Original! –

+0

zugestimmt, auf diesem .. –

0

Wenn Ihre kleine Änderung ist etwas Text zu bearbeiten oder einige Routinen überspringen, könnten Sie einen Hex-Editor verwenden Oder ein Disassembler, aber Sie werden nicht in der Lage sein, den ursprünglichen C++ - Code zu sehen, und selbst wenn Sie ein Werkzeug finden, das die DLL zurück in Code verwandelt, wären alle Variablennamen weg und es wäre ein großes Durcheinander.

3

Ich weiß nicht die genaue Situation, die Sie haben, und wie viel die Funktionalität der DLL für Ihre Anwendung implementiert. Aber ich würde argumentieren, dass es in den meisten Fällen besser wäre, die fehlende DLL basierend auf der bekannten Funktionalität neu zu schreiben.

Dies gilt insbesondere, wenn Sie eine Dokumentation dafür haben.

Der Versuch, den binären Code zu Assembler umzukehren, dann zu C++ und dann zu versuchen, ihn zu modifizieren, um die vorhandene Funktionalität zu liefern, wird in den meisten Fällen zeitaufwendig und vielleicht sogar unmöglich sein.

0

Sie müssen es tun, wie Spiel-und App-Cracker tun: Verwenden Sie einen Disassembler und hacken Sie den Assembler-Code.

6

Sie könnten auch einen Blick auf OllyDbg, die ein 32-Bit-Assembler-Ebene ist haben wollen analysieren Debugger. Es wird verwendet, um Binärcode in Szenarien zu analysieren, in denen Sie keinen Quellcode haben. Es ist ein leichter Debugger. OllyDbg ist eine Shareware, so können Sie & kostenlos herunterladen .. !!

Besuchen OllyDbg ist Startseite here

PS: Zurück in den Cracker Tag SoftICE von NuMega für das Debuggen in eine ausführbare & greifen einen Schnappschuss an den Werten von Registern verwendet. SoftICE war ein fortgeschrittener Debugger. Es war definitiv das Lieblingswerkzeug für die Cracker. Ich weiß nicht über den gegenwärtigen Status des Produkts. NuMegas Website hatte keine Informationen darüber. Ich habe es vielleicht übersehen, aber ich konnte es nicht finden. Ich empfehle, dass Sie eine Legacy-Version (4.0x) von SoftICE & bekommen, die den WindowsXP-Patch für SoftICE anwendet. Die Arbeit mit SoftICE ist eine Art "Erfahrung". Lesen

Weitere:Reversing: Secrets of Reverse Engineering by Eldad Eilam

1

Ein wenig abhängig von Ihrer Situation würde ich das Erbe/binary DLL halten, wie sie ist und eine Wrapper-DLL schreiben, ändern und/oder fügen Sie zusätzliche Verhalten.

Die Idee ist, die alte Funktionalität in einer neuen DLL zu aggregieren, die die alte importiert.

-2

Wenn es in .NET gemacht wurde, dann warum nicht den dotNet Reflektor verwenden.

+0

Es ist C++, wie in der Frage angegeben. – Brad