Ho codice java compilato in un file .class. Cè una funzione che ottiene pochi parametri e fa qualche azione (es. Get int x e int y e do x + y)
Voglio aggiungere a questo file .class il codice che controlla se x = 1 e chiamare unaltra funzione (es. chiamata a xy e non fare x + y)
Come posso modificare un file .class compilato e aggiungere il mio codice?
Commenti
- Ho modificato la domanda, spero che questo sia ciò che volevi davvero chiedere; in caso contrario, chiariscilo in un commento o modificalo tu stesso.
Risposta
Ci sono diversi modi per ottenere questo risultato:
-
Decompilare .class nel sorgente .java ( non necessariamente fonte originale, ma equivalente), apporta le tue modifiche, compila di nuovo. Ci sono molti decompilatori Java là fuori, non li elencherò tutti.
-
Disassembla .class in “assembly” (di solito sintassi Jasmin), modificalo, assembla nuovamente. Krakatau è un buon strumento che dovrebbe essere in grado di farlo.
-
Utilizza uno strumento in grado di modificare / applicare la patch al bytecode direttamente nel file .class. Non lho provato, ma Recaf afferma di essere in grado di farlo.
-
Hook the Java interprete di runtime per cogliere il momento in cui inizia a eseguire la funzione di destinazione e far sì che esegua qualcosaltro. Questo è un po specifico per limplementazione, ma ecco un esempio che conosco che utilizza il protocollo di debug Java (JWDP): https://github.com/CrowdStrike/pyspresso
Risposta
Puoi usare JByteMod per modificare il bytecode della tua classe. Puoi anche creare nuovi metodi, eliminare metodi, campi e modificare gli accessi.
È abbastanza facile da usare, basta caricare il jar e selezionare la classe che desideri modificare.
JByteMod: https://github.com/GraxCode/JByteMod-Beta/releases
Commenti
- JByteMod ' non ha avuto un aggiornamento in due anni purtroppo. Lautore è saltato su diversi progetti sebbene in natura simile.