Decompiler
-
schrankwand schrieb:
Aha, das würde ja heissen das MaSTaH, der hier so auf schlau gemacht hat, selber nicht weiß was Windows PE ist.
nicht gerade der richtige weg, sich hier im forum freunde zu schaffen.
also ich kann leider nicht nachvollziehen wie du auf diesen rückschluss kommst...
aber ich bin mir SEHR sicher dass er das durchaus weis.
-
schrankwand schrieb:
Aha, das würde ja heissen das MaSTaH, der hier so auf schlau gemacht hat, selber nicht weiß was Windows PE ist.
Entweder DU wolltest gerade witzig sein, oder du hast meinen Witz nicht verstanden (und dazu noch den Clown-Smiley übersehen
).
-
hmm..
soll ich jetzt Boxhandschuhe ausgeben ?
-
fyi: http://de.wikipedia.org/wiki/Ironie
(damits jetzt jeder versteht
-
irgendwie ist der Boomerang garnicht so schlecht
-
btw. ist reversing von kommerziellen applikationen afaik eher halblegal.
-
schrankwand schrieb:
Ich will einfach nur irgendwelchen funktionierenden C-Quellcode aus einer exe und ggf. aus dlls generieren. Das kann doch nicht so scher sein. Durch den so erhaltenen Quellcode noch durchblicken zu können ist was anderes.
OK. Nimm dir 1,5 Tonnen Gehacktes halb und halb. Was du jetzt versuchst zu machen, ist das Rind und das Schwein wieder herzustellen.
Das höchste der Gefühle ist hoch optimierter Assembler Code. Code einer Hochsürache wirst du nie wieder zu sehen bekommen, wenn der Sourcecode erstmal compiliert ist.
-
Luckie schrieb:
schrankwand schrieb:
Ich will einfach nur irgendwelchen funktionierenden C-Quellcode aus einer exe und ggf. aus dlls generieren. Das kann doch nicht so scher sein. Durch den so erhaltenen Quellcode noch durchblicken zu können ist was anderes.
OK. Nimm dir 1,5 Tonnen Gehacktes halb und halb. Was du jetzt versuchst zu machen, ist das Rind und das Schwein wieder herzustellen.
Das höchste der Gefühle ist hoch optimierter Assembler Code. Code einer Hochsürache wirst du nie wieder zu sehen bekommen, wenn der Sourcecode erstmal compiliert ist.
Das würde bedeuten, dass man aus einem Assembler niemals C code erstellen könnte...
nur ist es immer möglich dies auch in einer höheren Sprache abzubilden.
Wenn du dir Boomerang angesehn hättest würdest du das auch teilweise bejaen.
das es nicht der oginäre Quelltext wird ist sicher klar.
Aber die Möglichkeit besteht.
-
Betrachten wir uns mal folgenden Delphi Code:
for i := 0 to 9 do s := IntToStr(i);
und
for i := 9 downto 0 do s := IntToStr(i);
Für beide Schleifen erzeugt der Compiler identischen Code, nämlich
cmp ebx,$0a jnz -$10
Und warum? Weil er optimiert. Wie willst du nun den original Quellcode wieder rausbekommen? Wurde im Original nun die Schleife hoch oder runtergezählt? OK, hier spielt es keine Rolle. Aber es soll zeigen, dass es weitgehen unmöglich ist den original Quellcode wieder zu bekommen, bei komplexen Operationen, da heutige Compiler der maßen gut optimieren, das man den Quellcode kaum noch wieder erkennt, geschweige denn den Quellcode in der Hochsprache wieder bekommt.
Ich kenne Boomerang nicht, aber das was man da als Quellcode sieht, mag ja für einfache Programme brauchbar sein. Aber dafür brauche ich keinen Decompiler. Ich vage zu bezweifeln, dass es bei komplexeren Routinen funktioniert. Und die Frage ist auch, ob beim original Quellcode die Compiler Optimierung aktiviert wurde.
Ich darf da noch mal eine Stelle zitieren, die auf der Boomerang Seite verlinkt wird:
Further, even if a certain degree of success is achieved, the automatically generated program will lack meaningful variable and function names as these are not normally stored in an executable file (except when stored for debugging purposes).
-
man geh zur Uni mach was theo info und dann ist dir klar das es so etwas wie Äquivalenz zwischen Algos gib.
der Copiler sollte sicher nicht falschen Code erstellen.
und solange der erhaltene Code das gleiche macht wie der original Code ist der Decompiler auf der richtigen Spur. ... auch wenn der alles in while() Schleifen packt.
was für mich schon schwieriger zu verstehen ist, ist wie die Sachen mit OutOfOrder Execution in unterschiedliche Funktionalitäten aufgeteilt werden...
-
b7f7 schrieb:
man geh zur Uni mach was theo info und dann ist dir klar das es so etwas wie Äquivalenz zwischen Algos gib.
Wenn die Argumente ausgehen wird man persönlich, zumindest ist das so bei Leuten, die nicht diskutieren können. Aber ich kann dich beruhigen, ich habe Informatik studiert. Logisch gibt es Äquivalenz zwischen Algorithmen. Ein Klumpen Schrott aus der Schrottpresse kann auch mal ein 3'er BMW gewesen sein oder ein kleiner Polo. Und mit beiden Autos komme ich von A nach B.
Da ich es aber nicht nötig habe, mich auf so ein niedriges Niveau herabzulassen, klicke ich mich hier aus. Ich wünsche noch einen schönen Tag.
-
man kann sowas auch zu persönlich nehmen...naja
-
Man kann ja noch nichtmal rausfinden, welche Sprache benutzt wurde...
-
b7f7 schrieb:
man geh zur Uni mach was theo info und dann ist dir klar das es so etwas wie Äquivalenz zwischen Algos gib.
viele hier haben das bereits hinter sich. deshalb solltest du nochmal hingehen, und die vorlesungen compilerbau, optimierung und vielleicht noch techInf (bzw halt wo's asm gibt) hören. schnell wirst du feststellen, dass du auf folgende probleme stößt:
- funktions und variablennamen fehlen (ok, damit hast du dich abgefunden)
- teilweise _komplett_ anderer code aufgrund von optimierungen und uglyfiernals ergebnis bekommst du einen haufen unzusammenhängender funktionen, von denen du keinenfalls mehr den algorithmus rausbekommst, der dahinter steckt. wir reden hier nicht vom GGT oder anderen 0815 beispielen (wieso sollte ich für so n zeug nen decompiler verwenden?!?) sondern vielleicht um irgendwelche grafikfilteralgorithmen (decompilen interessiert mich ja nur, wenn ich keine ahnung hab, wie derjenige ein problem lösst). das beispiel mit dem gehackten halb und halb war richtig gut.
in der theorie ist das halb und halb einfach zur hälfte schwein und rind, und entsprechend wieder aufteilbar. in der praxis wirst du festtellen, dass theoretische modelle fast nie 1:1 umgesetzt werden
-
es geht doch garnicht darum das wieder in den orginal Algo zurückzuransformieren.
es geht nur darum das wieder in C/C++ abzubilden.
auch wenn der Decompiler das alles in eine funktion packen würde, solange der source immer noch die gleichen Ergebnisse liefer ist er genauso korrekt wie der source den man damals kompiliert hat.BTW ein klumpen Schroot ist nicht Äquivalent zu einem Auto, das war ein schlechtes beispiel, genau wie das Schwein.
Besser würd sein man nehme legos
man baue ein Haus aus einzelsteinen
und man baue das gleiche haus aus Legosteinen die in Baugruppen zusammengeklebt sind (Wand mit Fenster, Wand mit tür)
nun es gibt ne menge möglichkeiten die einzelsteine zu "Wand mit Fenster" zusammenzusetzen aber man kann sagen
Wenn ich 100Steine Habe die in einer Bestimmten form zusammengesetzt sind kann ich die mit dem Element "Wand mit Fenster" ersetzen und habe das äquvalente Teil.
-
b7f7 schrieb:
es geht doch garnicht darum das wieder in den orginal Algo zurückzuransformieren.
es geht nur darum das wieder in C/C++ abzubilden.
auch wenn der Decompiler das alles in eine funktion packen würde, solange der source immer noch die gleichen Ergebnisse liefer ist er genauso korrekt wie der source den man damals kompiliert hat.Aber was hättest du davon?
Denn klar: sowas ist einfach. Ich nehm den ASM Code und übersetze ihn nach C - das ist recht simpel.Aber damit kann ja niemand etwas anfangen - ist höchstens zum rumzeigen witzig.
Besser würd sein man nehme legos
man baue ein Haus aus einzelsteinen
und man baue das gleiche haus aus Legosteinen die in Baugruppen zusammengeklebt sind (Wand mit Fenster, Wand mit tür)
nun es gibt ne menge möglichkeiten die einzelsteine zu "Wand mit Fenster" zusammenzusetzen aber man kann sagen
Wenn ich 100Steine Habe die in einer Bestimmten form zusammengesetzt sind kann ich die mit dem Element "Wand mit Fenster" ersetzen und habe das äquvalente Teil.Nur dass du bei einem Decompiler einfach etwas bekommst, was funktional ein Haus ist - aber rein garnichts mit dem Haus zu tun hat, dass du gebaut hast.
Probiers doch einfach mal aus. Schnapp dir ein kleineres Programm, zB md5sum oder so - wo ein schöner Algorithmus drin steckt und dann Decompilen. Dann zeig den Code jemanden, und der soll sagen, welcher Algo das ist. Mal sehen ob er es schafft...
-
Genau sowas in der Richtung hatte ich vor, als ich hier nach einem Decompiler gefragt habe. Nicht mehr und nicht weniger.