Hallo miteinander,
Gibt es eigentlich sowas wie einen Decompiler, der z.B.: den ursprünglichen Quellcode von Compilierten C-Programmen wiederanzeigen kann?
LG Kilian
Anmeldungsdatum: 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 |
![]() Anmeldungsdatum: Beiträge: 4534 |
|
Lokalisierungsteam
Anmeldungsdatum: Beiträge: 419 |
Ich empfehle dir, das hier durchzulesen. |
Anmeldungsdatum: 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. |
![]() Anmeldungsdatum: 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...). |
![]() Anmeldungsdatum: Beiträge: 404 |
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. |
![]() Anmeldungsdatum: Beiträge: 4534 |
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. 😉 |
![]() Anmeldungsdatum: Beiträge: 404 |
Stimmt auch wieder. Sorry ☺ |