Jeg har java-kode, der er samlet til en .class-fil. Der er en funktion, der får få parametre og foretager sig noget (f.eks. Får int x og int y og gør x + y)
Jeg vil føje til denne .class-filkode, der kontrollerer, om x = 1 og kald til en anden funktion (f.eks. ring til xy og ikke gør x + y)
Hvordan kan jeg redigere en kompileret .class-fil og tilføje min egen kode?
Kommentarer
- Jeg redigerede spørgsmålet, forhåbentlig er det, hvad du faktisk ville stille; hvis ikke, bedes du redegøre for det i en kommentar eller redigere det selv.
Svar
Der er flere måder at opnå dette på:
-
Decompile .class til .java source ( ikke nødvendigvis original kilde, men ækvivalent), foretag dine ændringer, kompilér igen. Der er mange Java-dekompilere derude, jeg vil ikke liste dem alle.
-
Skil .klasse til “samling” (normalt Jasmin-syntaks), modificer den, saml tilbage. Krakatau er et godt værktøj, der skal være i stand til at gøre det.
-
Brug et værktøj, der kan ændre / patch bytekoden direkte i .class-filen. Jeg har ikke prøvet det, men Recaf hævder at være i stand til at gøre det.
-
Hook Java runtime-tolk for at fange det øjeblik det begynder at udføre målfunktionen og få den til at udføre noget andet i stedet. Dette er noget implementeringsspecifikt, men her er et eksempel, jeg kender til, der bruger Java debugging protocol (JWDP): https://github.com/CrowdStrike/pyspresso
Svar
Du kan bruge JByteMod til at redigere din klasse-bytecode. Du kan også oprette nye metoder, slette metoder, felter og ændre adgang.
Det er ret nemt at bruge, bare ilæg krukken og vælg den klasse, du vil redigere.
JByteMod: https://github.com/GraxCode/JByteMod-Beta/releases
Kommentarer
- JByteMod har ' ikke haft en opdatering om to år nu desværre. Forfatteren er sprunget på forskellige projekter, men i lignende natur.