ubuntuusers.de

Decompiler ?

Status: Ungelöst | Ubuntu-Version: Ubuntu 10.04 (Lucid Lynx)
Antworten |

Kilian_Göller

Anmeldungsdatum:
17. April 2010

Beiträge: Zähle...

Hallo miteinander,

Gibt es eigentlich sowas wie einen Decompiler, der z.B.: den ursprünglichen Quellcode von Compilierten C-Programmen wiederanzeigen kann?

LG Kilian

Antiqua Team-Icon

Avatar von Antiqua

Anmeldungsdatum:
30. Dezember 2008

Beiträge: 4534

jakon Team-Icon

Lokalisierungsteam

Anmeldungsdatum:
16. November 2009

Beiträge: 419

Kilian Göller schrieb:

Hallo miteinander,

Gibt es eigentlich sowas wie einen Decompiler, der z.B.: den ursprünglichen Quellcode von Compilierten C-Programmen wiederanzeigen kann?

LG Kilian

Ich empfehle dir, das hier durchzulesen.

fabian31

Anmeldungsdatum:
29. November 2010

Beiträge: 25

Wohnort: Köln

Soweit ich weiss geht das nur von Programm ->Assembler und von Java-Programm zu → Javacode eindeutig, sonst wirst du nie den wirklichen Quelltest bekommen.

TraumFlug

Avatar von TraumFlug

Anmeldungsdatum:
16. Juli 2009

Beiträge: 999

Wohnort: zwischen den ohren

Die wichtigsten Kandidaten für sowas wurden schon genannt: Disassembler & die bescheidenen "Decompiler"-Ansätze die's so frei verfügbar gibt...

Wofür brauchst du das ganze eigentlich? Dir ist hoffentlich schon bewusst, dass bei'm kompilieren von, z.B., C-Code in ausführbare Maschinensprache und den Prozessen, die sonst so Auf das "Binary" angewendet werden vitale Informationen in's Nirvana gehen? "Eindeutig" ist eine konversation von C zu Assembler (kompilieren), genau wie andersrum (dekompilieren) nie. bei'm kompilieren wird alles menschenlesbare weggekürzt und auf Maschienenbefehle eingedampft, bei'm dekompilieren wird versucht, nach ein paar eher dürftigen Mustern, das Eingedampfte wenigstens ein bisschen lesbarer zu machen,

Den ursprünglichen C-Quelltext wird man nie aus einem Binary rekonstruieren können. Höchstens einen angenäherten, der aus dem Maschinencode/Assembler zu etwas C-ähnlichem rückrechnet, was man dann mit viel Handarbeit versuchen muss zu verstehen, weil Optimierungen das Original aufgeblasen oder verstümmelt haben, und sowieso alle Bezeichner wie Variablennamen Fehlen (die werden im Maschinencode auch nicht gebraucht, da wird mit Addressen/Registern hantiert).

Es hat nicht umsonst ein paar Gründe, dass in der Opensource-Szene die Quelltexte gehandelt werden, und nicht nur die Binaries, weil "Reverse Engineering" ein Wahnsinnsaufwand für Spezialisten ist, je Grösser das Programm und schlechter die benutzen Tools, desto härter der Prozess des Nachvollziehens. Wär's so einfach, hätten wir unter Linux schon für jede Hardware einen Treiber kurz nachdem der unter Windows erscheint.

Bedenke auch, dass viele Anbieter von kommerzieller Software in ihren Lizenzen "Reverse Engineering" explizit verbieten. Wenn's dich trotzdem reizt, zieh' dir die Tools, die oben verlinkt sind 'rein, lern' wie Assembler funktioniert, und phrackel dich durch. Ist sicher mühselige Arbeit, koch' schonmal 3 Kannen Kaffee vorher, aber manchmal unerlässlich (z.B. um verbreitete Binaries nach Schadcode zu scannen und dergleichen...).

tischbein

Avatar von tischbein

Anmeldungsdatum:
21. Juli 2008

Beiträge: 404

Antiqua schrieb:

Guck mal hier:
http://en.wikibooks.org/wiki/X86_Disassembly/Disassemblers_and_Decompilers#Linux_Disassemblers

Der link zeigt nur Disassembler. Für die, die es nicht wissen: Ein disassembler stellt lediglich die assembler instruktionen (Sprich, die textform dessen, was man maschinensprache nennt) wieder her. Soetwas is relativ trivial; Die meisten assembler kommen meist mit disassembler (nasm kommt mit ndisasm, zum beispiel).

Allerdings ist 'disassembled assembly' meist nutzlos, da die struktur gänzlich fehlt (soetwas geht beim kompilieren verloren), und man kann den code nichtmehr verändern, da es ja schliesslich nur ein abbild des maschinencode image ist.

*Gute* decompiler gibt es sehr wenige, und noch weniger opensource varianten. Ein guter decompiler allerdings, ist IDA Pro, welchen ich selber schon ein paar mal erfolgreich verwendet habe. Dieser ist allerdings nicht kostenlos (Auch nicht ganz günstig mit minimum 500 €). Lohnt sich aber.

Antiqua Team-Icon

Avatar von Antiqua

Anmeldungsdatum:
30. Dezember 2008

Beiträge: 4534

tischbein schrieb:

Antiqua schrieb:

Guck mal hier:
http://en.wikibooks.org/wiki/X86_Disassembly/Disassemblers_and_Decompilers#Linux_Disassemblers

Der link zeigt nur Disassembler. (...)

Ich dachte nur, ab der Stelle wirds für Linuxer interessant. Wenn man weiter runter scrollt, landet man bei http://en.wikibooks.org/wiki/X86_Disassembly/Disassemblers_and_Decompilers#A_brief_list_of_disassemblers. Unter anderem wird da auch IDA genannt. 😉

tischbein

Avatar von tischbein

Anmeldungsdatum:
21. Juli 2008

Beiträge: 404

Antiqua schrieb:

tischbein schrieb:

Antiqua schrieb:

Guck mal hier:
http://en.wikibooks.org/wiki/X86_Disassembly/Disassemblers_and_Decompilers#Linux_Disassemblers

Der link zeigt nur Disassembler. (...)

Ich dachte nur, ab der Stelle wirds für Linuxer interessant. Wenn man weiter runter scrollt, landet man bei http://en.wikibooks.org/wiki/X86_Disassembly/Disassemblers_and_Decompilers#A_brief_list_of_disassemblers. Unter anderem wird da auch IDA genannt. 😉

Stimmt auch wieder. Sorry ☺

Antworten |