Wie kann ich eine *.class Datei öffnen?
Internet4you.ch
- java
0 Frank Schönmann0 Martin Jung0 Frank Schönmann0 Daniel Thoma0 Martin Jung0 noob
0 Goofy
0 Onkel0 flo
hilfe...wer kann mir helfen. wie kann ich eine *.class datei öffnen damit ich sie abändern kann.
ich hoffe mir kann jemand weiter helfen, da ich absolut keine tool dafür finde.
besten dank im voraus.
hi!
hilfe...wer kann mir helfen. wie kann ich eine *.class datei öffnen
damit ich sie abändern kann.
.class-Dateien sind kompilierte Java-Programme und liegen nur noch im
Bytecode vor. Man kann sie genausowenig de-kompilieren und editieren
wie zu ausführbaren Dateien kompilierte C-Programme.
Insbesondere stehen in den .class-Dateien keine Variablen- oder auch
Funktionsnamen mehr drin, genauso wie evtl. Rekursionen beseitigt
wurden. Daher dürfte das anschließende Abändern des Codes alles andere
als ein Vergnügen werden.
bye, Frank!
Hi,
hi!
.class-Dateien sind kompilierte Java-Programme und liegen nur noch im
Bytecode vor. Man kann sie genausowenig de-kompilieren und editieren
wie zu ausführbaren Dateien kompilierte C-Programme.
Insbesondere stehen in den .class-Dateien keine Variablen- oder auch
Funktionsnamen mehr drin, genauso wie evtl. Rekursionen beseitigt
wurden. Daher dürfte das anschließende Abändern des Codes alles andere
als ein Vergnügen werden.
Wieso das? Dekompilieren ist natürlich möglich. Die Regeln, die zum Kompilieren verwendet werden, sind reversiv auch zur Rekonstruktion des Quellcodes anwendbar. Wenn mit "javac" kompiliert wurde, sind sogar noch alle Identifier, Funktionsnamen etc. vorhanden.
Viele Grüße,
Martin
hi!
Insbesondere stehen in den .class-Dateien keine Variablen- oder
auch Funktionsnamen mehr drin, genauso wie evtl. Rekursionen
beseitigt wurden. Daher dürfte das anschließende Abändern des
Codes alles andere als ein Vergnügen werden.
Wieso das? Dekompilieren ist natürlich möglich. Die Regeln, die zum
Kompilieren verwendet werden, sind reversiv auch zur Rekonstruktion
des Quellcodes anwendbar.
Nein, ist es nicht, wenn der Compiler Optimierungen am Code vornimmt,
bevor er diesen in Maschinensprache/Bytecode übersetzt, zb. indem er
rekursive Funktionsaufrufe erkennt und beseitigt.
Wenn mit "javac" kompiliert wurde, sind sogar noch alle Identifier,
Funktionsnamen etc. vorhanden.
Ich wusste nicht, dass der javac nichtmal das schafft, überflüssige
Daten über Bord zu werfen, wenn er ein Java-Programm kompiliert. Aber
ich hoffe, dass es auch vernünftige Java-Compiler gibt, die das machen.
bye, Frank!
Hallo Frank
ich hoffe, dass es auch vernünftige Java-Compiler gibt, die das machen.
Es ist möglich, über die Reflektion-Api jederzeit die Namen der Methoden und Eigenschaften einer Klasse heraus zu finden.
Daher muss der Name auch in *.class Dateien liegen.
Man kann den javac anweisen zu optimieren. Was genau er dann macht, weiß ich aber nicht. Vielleicht speichert er auch nur informationen für die VM oder so.
Grüße
Daniel
Hi,
Nein, ist es nicht, wenn der Compiler Optimierungen am Code vornimmt,
bevor er diesen in Maschinensprache/Bytecode übersetzt, zb. indem er
rekursive Funktionsaufrufe erkennt und beseitigt.
Kompromiss: Es ist nicht unbedingt möglich, den ursprünglichen Zustand des Quellcodes _exact_ wiederherzustellen (Stichpunkte: Inlining, loop unrolling etc.). Aber es ist prinzipiell möglich, den Ursprungscode semantisch zu rekonstruieren.
Wenn mit "javac" kompiliert wurde, sind sogar noch alle Identifier,
Funktionsnamen etc. vorhanden.
Ich wusste nicht, dass der javac nichtmal das schafft, überflüssige
Daten über Bord zu werfen, wenn er ein Java-Programm kompiliert.
Wie Daniel bereits sagte, das ist Teil des Konzeptes und kann sehr hilfreich sein (außer für Debugging).
Aber
ich hoffe, dass es auch vernünftige Java-Compiler gibt, die das machen.
Dafür gibt es "Code-Obfuscators", die dann den dekompilierten Code so unverständlich wie möglich machen.
Viel Grüße,
Martin
bye, Frank!
Kompromiss: Es ist nicht unbedingt möglich, den ursprünglichen Zustand des Quellcodes _exact_ wiederherzustellen (Stichpunkte: Inlining, loop unrolling etc.). Aber es ist prinzipiell möglich, den Ursprungscode semantisch zu rekonstruieren.
...dem schliesse ich mich an. Kleiner Tip noch, es gibt einen Microsoft Java Compiler(würg) und einen dazugehörigen Decompiler der kriegt das decompilieren ganz gut hin.
noob
mahlzeit, also decompilieren ist auf jeden Fall möglich. Ich hab erst im Netz ein Tool gefunden, welches meinen Java-Code bis auf die letzte for-Schleife richtig wieder herstellt. Ich habs eigentlich nicht für möglich gehalten, aber wie gesagt, es funktioniert. Sucht mal in Google nach "SourceAgain"
Ciao Goofy
hi schöner Frank,
hilfe...wer kann mir helfen. wie kann ich eine *.class datei öffnen damit ich sie abändern kann.
Am besten wär, wenn du die *.java -Datei, aus der die class-Datei generiert wurde, ausfindig machen könntest; falls das nicht möglich sein sollte, habe ich wenig Hoffnung.
Dein Onkel
Hallo !
Schau Dir mal den Link an !
http://kpdus.tripod.com/jad.html
Damit kannst Du .class-Dateien dekompilieren. Und das funktioniert.
Grüße
Flo