Tengo un código java compilado en un archivo .class. Hay una función que obtiene pocos parámetros y realiza alguna acción (por ejemplo, obtener int x e int y y hacer x + y)
Quiero agregar a este archivo .class código que verifica si x = 1 y llamar a otra función (por ejemplo, llamar a xy y no hacer x + y)
¿Cómo puedo editar un archivo .class compilado y agregar mi propio código?
Comentarios
- Edité la pregunta, espero que esto sea lo que realmente quería preguntar; si no, aclare en un comentario o edítelo usted mismo.
Respuesta
Hay varias formas de lograr esto:
-
Descompilar .class en .java fuente ( no necesariamente la fuente original, pero equivalente), haga sus cambios, compile nuevamente. Hay muchos descompiladores de Java, no los enumeraré todos.
-
Desensamble .class para «ensamblaje» (generalmente sintaxis Jasmin), modificarlo, ensamblar de nuevo. Krakatau es una buena herramienta que debería poder hacerlo.
-
Utilice una herramienta que pueda modificar / parche el código de bytes directamente en el archivo .class. No lo he probado, pero Recaf afirma poder hacerlo.
-
Enganche Java intérprete de tiempo de ejecución para detectar el momento en que comienza a ejecutar la función de destino y hacer que ejecute otra cosa en su lugar. Esto es algo específico de la implementación, pero aquí hay un ejemplo que conozco que usa el protocolo de depuración de Java (JWDP): https://github.com/CrowdStrike/pyspresso
Responder
Puede utilizar JByteMod para editar el código de bytes de su clase. También puede crear nuevos métodos, eliminar métodos, campos y cambiar accesos.
Es bastante fácil de usar, solo cargue el archivo jar y seleccione la clase que desea editar.
JByteMod: https://github.com/GraxCode/JByteMod-Beta/releases
Comentarios
- JByteMod no ha ' t tuvo una actualización en dos años, lamentablemente. El autor ha saltado a diferentes proyectos aunque en naturalezas similares.