lundi 2 novembre 2009

Injection de code en Delphi

Introduction
Une méthode connue sous le nom de détour (par Microsoft) permet d'injecter un code de quelques bytes en assembleur devant les appels de fonctions.
Il s'agit en gros 5 bytes (1 byte pour le JMP et 4 bytes pour l'adresse) permettant de faire un saut vers un tremplin (un bout de code situé plus loin).
Ce dernier effectuant des opérations complémentaires (le code injecté) avant d'appeler la fonction initialement appelée (le saut de tremplin lui-même).
En agissant de la sorte, il est possible d'intercepter tous les appels (si l'on en connais l'adresse de la fonction).
Il est également possible de monitorer les API windows.

Pour en savoir plus:

Pour en apprendre plus, aller lire l'article "API Hooking with MS Detours" sur CodeProject.
Cet article traite également des méthodes DLL injection.
Faire une recherche google sur "Api Détour".

AsmProfiler
Il y a quelques temps André Mussche a développé en Delphi un profiler nommé AsmProfiler . AsmProfiler est librement disponible sur Google Code.

AsmProfiler utilise méthode spéciale détournant les appels de fonctions pour insérer du code de monitoring avant l'appel réel de la fonction (méthode appelé "Détour"). Il est ainsi possible d'intercepter n'importe quel appel si l'adresse de la fonction est connue.
Il est par exemple possible d'utiliser cette méthode pour monitorer les appels à l'API WriteProcessMemory et par conséquent d'identifier les processus modifiant le code applicatif à la volée (comme les virus informatiques par exemple).

Le procédé de "detouring" du projet AsmProfiler est implémenté dans la unit KOLDetours.pas.

DLL injection
Voici deux autres méthodes/exemples (issues du projet AsmProfiler) démontrant la méthode de  "DLL Injection".

Aucun commentaire: