Kann man "zurückcompilieren" [was: Frage]
-
(komisch, alle anderen auch ;))
Also Decompiler haben, wie elise schon meinte, das Problem, daß beim Kompilieren sämtliche Namen weg sind.
Wenn ein Decompiler es denn schafft, ein Programm zu erstellen, würdest ungefähr sowas erhalten:
int main (int variable1, char **variable2) { char variable3[32]; cout << "Wie heißen Sie?"; cin >> variable3; cout << "Hallo " << variable3 << "\n"; return 0; }
Möglicherweise nichtmal das.
Ich hatte mal einen C-Decompiler und der hatte dann aus dem "printf ()" nen "function_call("string"); " gemacht. seeehr aussagekräftig das.Wenn du Software lesen willst, lern Assembler. Das ist deine einzige Chance..
-
Nen guter Decompiler (generiert C-Code) ist Boomerang, aber ich weiß nicht wie C++ Code mit dem dann aussieht (wegen Konstruktoren usw.).
-
elise schrieb:
in java ja, in c++ ... na ja, alles ist realtiv.
die namen sind aufgelöst, heißt: du hast nach dem decompilieren im grunde nur adressen.. sprich: zahlen.. (mal ganz grob gesprochen)
also erwarte nicht, dass der quellcode in reinform wieder hergestellt wird.
ps: du fragst nach einem programm.. hmm hier die richtung, weiter googlen
http://de.wikipedia.org/wiki/Disassemblerhi wieso kann man für die adressen nicht einfach wieder namen generieren??
-
Der Disassembler kann ja nicht wissen wie die einzelnen Adressen vor der Compilierung benannt waren. Er muß den Adressen dann selber Namen übergeben und die werden nicht sehr aussagekräftig sein können.
-
ja aber ist doch übersichtlicher wenn man im source code ein namen a hat als 0x12345678 ß??
-
aber kann man aus so einem disassembler code überhaupt wieder c machen?? das geht doch bestimmt ned so gut???
-
Einen Namen kann man zuweisen. Es ist halt keiner der Dir was über den Zweck der Adresse sagt.
Prinzipiell kann man wieder C daraus machen. Nur halt ein sehr kompliziert zu lesendes Programm. Der Decompiler kann nichts über den Zweck des Programmes wissen und übersetzt es deshalb so wie er es vorfindet. Also so wie es der Compiler umgesetzt hat.
Vieles dazu findest Du hier:
http://www.program-transformation.org/Transform/DeCompilation
-
console33 schrieb:
ja aber ist doch übersichtlicher wenn man im source code ein namen a hat als 0x12345678 ß??
Aber nicht aussagekräftiger.
aber kann man aus so einem disassembler code überhaupt wieder c machen?? das geht doch bestimmt ned so gut???
Ding ding, du hast das Problem erkannt. Schon alleine die Tatsache, dass aus jeder Schleife gotos gemacht werden macht eine rückcompilirung schwer bis unmöglich.
Eine Ausnahme gibt es aber : Wenn ein Program mit Debuginformationen übersetzt wurde dann können die sehr helfen. Zum Beispiel werden sie wahrscheinlich die original Namen enthalten und weggeinlined ist auch nichts.
-
Aloha,
Du kannst alle Disassemblierer vergessen. Das ist mehr oder minder alles Schrott, was Du geliefert bekommst und zwecks weiterverarbeitung absolut unnütz.
Ist auch völlig egal ob Debug oder Release.Wozu benötigst Du denn eine Decompilation ???
Grüße
BOA
-
Wozu benötigst Du denn eine Decompilation ???
*lol*
"Da kommen immer so doofe Aufforderungen wie: Geben Sie Ihren Reg Code ein! Das Feature brauche ich aber nicht und wollte es entfernen;-) "greetz
Gaunt
-
Das Thema hatten wir schon so oft, daher gibt es ja den FAQ Eintrag.
-
Gaunt schrieb:
Wozu benötigst Du denn eine Decompilation ???
*lol*
"Da kommen immer so doofe Aufforderungen wie: Geben Sie Ihren Reg Code ein! Das Feature brauche ich aber nicht und wollte es entfernen;-) "greetz
GauntDafuer brauchst du doch nicht gleich Disassemblieren
das schaffst du im Normalfall mit Bankkonto & e-banking
-
BOA schrieb:
Aloha,
Du kannst alle Disassemblierer vergessen. Das ist mehr oder minder alles Schrott, was Du geliefert bekommst und zwecks weiterverarbeitung absolut unnütz.
Ist auch völlig egal ob Debug oder Release.Wozu benötigst Du denn eine Decompilation ???
Grüße
BOA
Schau dir mal die Disassemblys von Softice an, dann sagst du so etwas nicht mehr :p
Naja also die heutigen Disassembler können schon viele Standardfunktionen identifizieren und haben oft auch die Möglichkeit, dass man sie mit Debugsymbolen füttert.
Selbst dumpbin das bei meinem VC mitgeliefert ist produziert sehr gute Disassemblys die man auch noch wirklich verstehen kann.
-
@User---
Wenn die Funktionen nicht statisch gelinkt sind, kannst du sie ja auch identifizieren, da eine dynamische Library ja eh die Symbole (Namen) der Funktionen exportieren mussMit einem Debugger, der einen Disassembler integriert hat, kann man definitiv gut reverse engineern. Zumindest um sich bestimmte Code stellen gefügig zu machen