Jai du code java qui est compilé dans un fichier .class. Il y a une fonction qui obtient peu de paramètres et effectue une action (par exemple, obtenir int x et int y et faire x + y)

Je veux ajouter à ce fichier .class un code qui vérifie si x = 1 et appel à une autre fonction (par exemple, appeler xy et ne pas faire x + y)

Comment éditer un fichier .class compilé et ajouter mon propre code?

Commentaires

  • Jai édité la question, jespère que cest ce que vous vouliez vraiment demander; sinon, veuillez clarifier dans un commentaire ou le modifier vous-même.

Réponse

Il existe plusieurs façons dy parvenir:

  1. Décompilez .class en .java source ( pas forcément la source originale, mais équivalente), apportez vos modifications, compilez à nouveau. Il existe de nombreux décompilateurs Java, je ne les listerai pas tous.

  2. Démonter .class en « assembly » (généralement la syntaxe Jasmin), modifiez-le, réassemblez. Krakatau est un bon outil qui devrait pouvoir le faire.

  3. Utilisez un outil qui peut modifier / corrigez le bytecode directement dans le fichier .class. Je nai pas essayé, mais Recaf prétend pouvoir le faire.

  4. Hook the Java interpréteur dexécution pour saisir le moment où il commence à exécuter la fonction cible et lui faire exécuter autre chose à la place. Cest quelque peu spécifique à limplémentation mais voici un exemple que je connais qui utilise le protocole de débogage Java (JWDP): https://github.com/CrowdStrike/pyspresso

Réponse

Vous pouvez utiliser JByteMod pour éditer le bytecode de votre classe. Vous pouvez également créer de nouvelles méthodes, supprimer des méthodes, des champs et modifier les accès.

Cest assez facile à utiliser, il suffit de charger le fichier jar et de sélectionner la classe que vous souhaitez modifier.

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

Commentaires

  • JByteMod na pas ' mis à jour malheureusement depuis deux ans. Lauteur a sauté sur différents projets mais dans des natures similaires.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *