Internet4you.ch: Wie kann ich eine *.class Datei öffnen?

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.

  1. 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!

    1. 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

      1. 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!

        1. 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

        2. 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!

          1. 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

      2. 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

  2. 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

  3. 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