Mam kod Java, który jest skompilowany do pliku .class. Jest funkcja, która pobiera kilka parametrów i wykonuje jakąś akcję (np. Pobierz int x i int y oraz wykonaj x + y)
Chcę dodać do tego pliku .class kod, który sprawdza, czy x = 1 i wywołanie innej funkcji (np. wywołanie xy i nie robienie x + y)
Jak mogę edytować skompilowany plik .class i dodać własny kod?
Komentarze
- Zmieniłem pytanie, mam nadzieję, że właśnie o to chciałeś zapytać; jeśli nie, wyjaśnij to w komentarzu lub edytuj samodzielnie.
Odpowiedź
Jest na to kilka sposobów:
-
Zdekompiluj .class do źródła .java ( niekoniecznie oryginalne źródło, ale równoważne), wprowadź zmiany, skompiluj ponownie. Istnieje wiele dekompilatorów Javy, nie wymienię ich wszystkich.
-
Zdemontuj .class na „Assembly” (zwykle składnia Jasmin), zmodyfikuj ją, złóż ponownie. Krakatau to dobre narzędzie, które powinno to robić.
-
Użyj narzędzia, które może modyfikować / załataj kod bajtowy bezpośrednio w pliku .class. Nie próbowałem tego, ale Recaf twierdzi, że jestem w stanie to zrobić.
-
Podłącz Javę interpreter czasu wykonywania, aby przechwycić moment, w którym zaczyna wykonywać funkcję docelową i zamiast tego wykonać coś innego. Jest to nieco specyficzne dla implementacji, ale oto jeden przykład, który znam, który używa protokołu debugowania Java (JWDP): https://github.com/CrowdStrike/pyspresso
Odpowiedź
Możesz użyć JByteMod do edycji kodu bajtowego swojej klasy. Możesz także tworzyć nowe metody, usuwać metody, pola i zmieniać dostęp.
Jest całkiem łatwy w użyciu, po prostu załaduj jar i wybierz klasę, którą chcesz edytować.
JByteMod: https://github.com/GraxCode/JByteMod-Beta/releases
Komentarze
- JByteMod nie ' nie miał aktualizacji niestety od dwóch lat. Autor brał udział w różnych projektach, choć w podobnej naturze.