Ich habe Java-Code, der in eine .class-Datei kompiliert wird. Es gibt eine Funktion, die nur wenige Parameter abruft und eine Aktion ausführt (z. B. int x und int y abrufen und x + y ausführen).
Ich möchte diesem .class-Dateicode hinzufügen, der prüft, ob x = 1 und Aufruf einer anderen Funktion (z. B. Aufruf von xy und keine Ausführung von x + y)
Wie kann eine kompilierte .class-Datei bearbeitet und mein eigener Code hinzugefügt werden?
Kommentare
- Ich habe die Frage bearbeitet, hoffentlich wollten Sie sie tatsächlich stellen. Wenn nicht, klären Sie dies bitte in einem Kommentar oder bearbeiten Sie ihn selbst.
Antwort
Es gibt verschiedene Möglichkeiten, dies zu erreichen:
-
Deklassieren Sie .class in .java source ( nicht unbedingt Originalquelle, aber gleichwertig), nehmen Sie Ihre Änderungen vor, kompilieren Sie erneut. Es gibt viele Java-Dekompilierer, ich werde sie nicht alle auflisten.
-
Zerlegen Sie .class to „Assembly“ (normalerweise Jasmin-Syntax), modifizieren, wieder zusammenbauen. Krakatau ist ein gutes Werkzeug, das dazu in der Lage sein sollte.
-
Verwenden Sie ein Werkzeug, das / ändern kann Patchen Sie den Bytecode direkt in die .class-Datei. Ich habe es nicht versucht, aber Recaf behauptet, dies tun zu können.
-
Haken Sie Java ein Laufzeitinterpreter, um den Moment zu erfassen, in dem die Zielfunktion ausgeführt wird, und stattdessen etwas anderes auszuführen. Dies ist etwas implementierungsspezifisch, aber hier ist ein Beispiel, das ich kenne, das das Java-Debugging-Protokoll (JWDP) verwendet: https://github.com/CrowdStrike/pyspresso
Antwort
Mit JByteMod können Sie Ihren Klassenbytecode bearbeiten. Sie können auch neue Methoden erstellen, Methoden, Felder löschen und Zugriffe ändern.
Es ist ziemlich einfach zu verwenden. Laden Sie einfach das JAR und wählen Sie die Klasse aus, die Sie bearbeiten möchten.
JByteMod: https://github.com/GraxCode/JByteMod-Beta/releases
Kommentare
- JByteMod hat ' seit zwei Jahren leider kein Update mehr. Der Autor hat verschiedene Projekte auf ähnliche Weise durchgeführt.