Partage
  • Partager sur Facebook
  • Partager sur Twitter

Patcher une fonction pendant l'exécution

    1 mars 2015 à 12:51:25

    Je cherche les différentes méthodes pour pouvoir patcher une partie d'un exécutable qui tourne déjà, dont je ne possède pas le code source, que je ne peux pas arrêter, ou alors pas pendant très longtemps. Je ne peux pas le relancer, au pire je peux le pause pendant quelques secondes, mais c'est tout.

    En d'autres termes, j'ai plus ou moins ceci:

    while(1) {

    f1();

    f2();

    f3();

    }

    Le code n'est pas toujours dans f1, il passe aussi par d'autres fonctions.

    Je souhaite avoir ceci:

    while(1) {

    f1_patched();

    f2();

    f3();

    }

    Donc, comment puis-je injecter du code exécutable dans l'application, et faire pointer f1 vers ce code ?

    Sous Linux, voire Unix en général si une solution existe aussi pour d'autres Unix tels que OS/X.

    • Partager sur Facebook
    • Partager sur Twitter
      4 mars 2015 à 14:24:35

      Ce n'est pas évident de le faire à l'exécution (c'est même normalement impossible pour ce protégé des virus) mais tu peux le faire facilement juste avant de lancer le binaire sans le modifier.

      L'idée c'est de faire une bibliothèques dynamique qui possède le même nom de symbole que la fonction à remplacer de venir après charger la bibliothèque avec le binaire en modifiant la variable d'environnement LD_PRELOAD.

      Par exemple :

      LD_PRELOAD="/tmp/libfake.so" ./binaire



      • Partager sur Facebook
      • Partager sur Twitter

      Patcher une fonction pendant l'exécution

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown