Jeg har Java-kode som er samlet til en .class-fil. Det er en funksjon som får få parametere og gjør noe (f.eks. Får int x og int y og gjør x + y)
Jeg vil legge til i denne .class-filkoden som sjekker om x = 1 og ring til en annen funksjon (f.eks. ring til xy og ikke gjør x + y)
Hvordan kan jeg redigere en kompilert .class-fil og legge til min egen kode?
Kommentarer
- Jeg redigerte spørsmålet, forhåpentligvis er det dette du faktisk ønsket å stille. Hvis ikke, vennligst avklar i en kommentar eller rediger det selv.
Svar
Det er flere måter å oppnå dette på:
-
Dekompiler .klasse til .java-kilde ( ikke nødvendigvis original kilde, men ekvivalent), gjør endringene dine, kompiler igjen. Det er mange Java-dekompilatorer der ute, jeg vil ikke liste dem alle.
-
Demonter .klasse til «forsamling» (vanligvis Jasmin-syntaks), modifiser den, monter tilbake. Krakatau er et godt verktøy som burde være i stand til å gjøre det.
-
Bruk et verktøy som kan endre / lapp bytekoden direkte i .class-filen. Jeg har ikke prøvd det, men Recaf hevder å være i stand til å gjøre det.
-
Hekt på Java runtime tolk for å fange øyeblikket den begynner å utføre målfunksjonen og få den til å utføre noe annet i stedet. Dette er noe implementeringsspesifikt, men her er et eksempel jeg vet om som bruker Java debugging protocol (JWDP): https://github.com/CrowdStrike/pyspresso
Svar
Du kan bruke JByteMod til å redigere klassens bykode. Du kan også opprette nye metoder, slette metoder, felt og endre tilgang.
Det er ganske enkelt å bruke, bare last glasset og velg klassen du vil redigere.
JByteMod: https://github.com/GraxCode/JByteMod-Beta/releases
Kommentarer
- JByteMod har ikke ' t hatt en oppdatering om to år nå dessverre. Forfatteren har hoppet på forskjellige prosjekter, men i lignende natur.