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:

  1. 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.

  2. Zdemontuj .class na „Assembly” (zwykle składnia Jasmin), zmodyfikuj ją, złóż ponownie. Krakatau to dobre narzędzie, które powinno to robić.

  3. 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ć.

  4. 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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *