Mám kód Java, který je kompilován do souboru .class. Existuje funkce, která získá několik parametrů a provede nějakou akci (např. Get int x a int y a do x + y).

Chci přidat k tomuto souboru .class kód, který kontroluje, zda x = 1 a volání na jinou funkci (např. volání na xy a nedělat x + y)

Jak lze upravit kompilovaný soubor .class a přidat vlastní kód?

Komentáře

  • Otázku jsem upravil, doufejme, že právě na toto jste se chtěli zeptat; pokud ne, upřesněte v komentáři nebo jej upravte sami.

Odpověď

Existuje několik způsobů, jak toho dosáhnout:

  1. Dekompilovat .class na zdroj .java ( ne nutně původní zdroj, ale ekvivalent), proveďte změny, znovu zkompilujte. Existuje mnoho Java dekompilátorů, všechny je nevypsám.

  2. Rozebrat .class na „shromáždění“ (obvykle syntaxe Jasminu), upravit jej, sestavit zpět. Krakatau je dobrý nástroj, který by měl být schopen to udělat.

  3. Použijte nástroj, který může upravit / opravte bytecode přímo v souboru .class. Nezkoušel jsem to, ale Recaf tvrdí, že to dokážu.

  4. Zahákněte Javu běhový tlumočník, který zachytí okamžik, kdy začne vykonávat cílovou funkci, a přimět ji, aby místo toho provedla něco jiného. Toto je poněkud specifické pro implementaci, ale tady je jeden příklad, o kterém vím, který používá protokol ladění Java (JWDP): „>

https://github.com/CrowdStrike/pyspresso

odpověď

Pomocí JByteMod můžete upravit svůj bajtkód třídy. Můžete také vytvářet nové metody, mazat metody, pole a měnit přístupy.

Je to docela snadné, stačí načíst nádobu a vybrat třídu, kterou chcete upravit.

JByteMod: https://github.com/GraxCode/JByteMod-Beta/releases

Komentáře

  • JByteMod nemá ' bohužel aktualizaci za dva roky. Autor skočil na různé projekty, i když v podobné povaze.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *