Änderung in .jar bzw. .class vornehmen ?

  • Themenstarter Themenstarter Fragesteller
  • Beginndatum Beginndatum
F

Fragesteller

Gast
Hallo,

ich möchte einen Wert einer .class Datei in einem .jar Archiv abändern.
Ist soetwas ohne großen Aufwand möglich ?

Gruß
 
Du kannst meines Wissens nach keine Datei innerhalb eines Jars manipulieren, ohne dieses zu entpacken, dann die Änderung vorzunehmen, und es wieder zu verpacken.

Was ist an der Frage unkonkret. Es ging doch mehr um die generelle Frage ob sowas geht oder nicht. Ob man sich den Aufwand macht oder nicht, bleibt ihm dann selbst überlassen ...
 
"Unkonret" bzw. nicht näher bestimmt ist der Begriff "ohne großen Aufwand", "unkonkret" ist auch, ob die jar zu dem Zeitpunkt ausgeführt wird.
 
gehen tut es. leicht ist es nicht...
bester fall, sourcen sind im jar vorhanden, ändern neu compilieren...
schlechter fall, class files müssen decompiliert werden und wieder compiliert werden, das kann bei einfachen sachen, theoretisch einfach sein, könnte aber auch sein, dass du keine chance hast...

decompilieren... JAD

Als Anfänger... wahrscheinlich zu schwer...
 
Danke erst einmal für eure Antworten.

Sorry, wenns etwas global ausgedrückt wurde.

Die .jar hat ungefähr 300 Klassen.
Mit "ohne großen Aufwand" mein ich jetzt wirklich, dass nur diese eine .class geändert werden könnte.

Aber anscheind ist das wirklich nicht möglich, ohne alle Klassen zu decompilieren und neu zu compilieren. (wegen den Abhängigkeiten)

Gibts keine Möglichkeit dem Compiler zu sagen, dass er mit Errors compilieren soll ?! 🙂
 
Die Abhängigkeiten zu den anderen Klassen im Jar dürften kein Problem sein, da man dem Compiler ja das Jar-File im Classpath vorgeben kann - dann findet er die abhängigen Klassen, ohne sie selbst übersetzen zu müssen.
Hast Du denn den Quelltext der zu ändernden Klasse?
 
@ XHelp: Eine Ausgabe: Meinetwegen System.out.println("Hallo Welt"); in System.out.println("Hallo Welt 2");

praktisch den String ergänzen.

@ Murray: Den Quelltext hab ich, ja. Hab mir die entsprechende .class ja aus dem .jar rauskopiert und mit DJ Java Decompiler eine .java erstellt.

Kannst du mir vielleicht auch noch sagen, wie nun die Befehlszeile für den Compiler ist, damit er die Abhängigkeiten findet?

Ausgangssituation:
Ich habe auf C:\Java\ meine java.jar und daneben die HalloWelt.java (die ich nun geändert habe)
 
Wenn es wirklich nur darum geht ein String zu ändern, dann kannst du es einfach mit nem Hexeditor versuchen. Du solltest aber auch die Längenangaben dementsprechend anpassen
 
@ XHelp: das nur im äußersten Nofall. Weil ich davon eigentlich kaum Ahnung hab 😀

@ Murray: Also meckern tut er nicht, aber geupdatet wird die .class im .jar auch nicht.
Ich hab die .class auch mal testweise aus der .jar entfernt.
Danach nochmal dein Befehl ausgeführt (ohne Fehler) und nochmal in die .jar reingeguckt.
Die .class fehlt jedoch ?!
 
Mit dem Befehl ersetz du ja auch nicht irgendwie irgendwo eine .class in irgendeiner jar, sondern kompilierst die angegebene .java Datei. Da sollte dann eine HalloWelt.class erstellt werden
 
Entschuldigung, ja.
Ich war wieder zu voreilig 😀

Hätte erstmal gucken sollen.

Haut jedenfalls so erstmal hin, danke.

Allerdings verwurstet mir der DJ die .class ziemlich. Also er ändert einfach irgendwelche Sachen und schiebt den Quelltext auch bissel hin und her.
Kann man das noch irgendwie unterbinden ?
Oder gibts vielleicht eine Alternative zum DJ ?
 
DJ Java Decompiler ist doch nur ein GUI-Aufsatz für JAD, oder? Und JAD ist nicht mehr so ganz aktuell.

Vielleicht ist JD | Java Decompiler ja eine Alternative.

Trotzdem kann i.A. kein Decompiler den kompletten Sourcecode mit Kommentaren, Formatierungen und allen Variablen- und Parameternamen wiederherstellen, weil diese Informationen im Bytecode schlichtweg nicht mehr vorhanden sind.
 
Danke.

Recht lustig. Beide Decompiler machen aus ein und der selber .class 2 komplett unterschiedliche .java Files.

Da glaub da muss ich jetzt rumspielen.
Threadthema sollte denk ich aber schon erledigt sein.

Danke @ all.
 
ich werds wohl nicht so schnell/leicht compiliert bekommen.

Wie du schon sagtest, kann nicht der komplette Source wiederhergestellt werden.
d.h für mich, ich hab eigentlich schon verloren, weil ich ja nicht weiß wie es richtig im Source auszusehen hat.

Und ich bezweifel, dass ich anhand der Errors das Ding wie das Orignal herstellen kann.
 
Ein Decompiler muss aber in der Lage sein, den Code so zu rekonstruieren, dass das Ergebnis insofern äquivalent zum ursprünglichen Sourcecode ist, als dass sich a) dieser übersetzen lässt und b) das daraus entstehende Kompilat der ursprünglichen Klassen entspricht.

Was kommen beim Übersetzen denn für Fehler?
 

Zurück
Oben