Detourner les appels systemes
Le
Vincent Hiribarren
Bonjour,
je souhaite détourner les appels systèmes de quelques applications.
De ce que je comprends (et par analogie avec les systèmes unix que je
connais mieux), je vois deux possibilités :
- lors de l'exécution d'un programme, il faudrait que je précharge
certaines bibliothèques avant les bibliothèques systèmes pour qu'un
appel système passe par ma bibliothèque avant de faire suivre l'appel
vers l'appel système classique.
- lors du lancement du système d'exploitation, je déclare que ma
bibliothèque est prioritaire devant celle du système pour faire le
linkage dynamique.
Comment dois-je m'y prendre ?
Avez-vous des exemples concrets (et simples) de détournement d'appels
systèmes, peut-être un didacticiel sur le web avec des bouts de codes
d'exemple et la méthode à suivre ?
En vous remerciant d'avance.
je souhaite détourner les appels systèmes de quelques applications.
De ce que je comprends (et par analogie avec les systèmes unix que je
connais mieux), je vois deux possibilités :
- lors de l'exécution d'un programme, il faudrait que je précharge
certaines bibliothèques avant les bibliothèques systèmes pour qu'un
appel système passe par ma bibliothèque avant de faire suivre l'appel
vers l'appel système classique.
- lors du lancement du système d'exploitation, je déclare que ma
bibliothèque est prioritaire devant celle du système pour faire le
linkage dynamique.
Comment dois-je m'y prendre ?
Avez-vous des exemples concrets (et simples) de détournement d'appels
systèmes, peut-être un didacticiel sur le web avec des bouts de codes
d'exemple et la méthode à suivre ?
En vous remerciant d'avance.

Poser une question


Vincent Hiribarren a écrit :
http://research.microsoft.com/sn/detours/
--
« Le travail est probablement ce qu'il y a sur cette terre de plus bas et
de plus ignoble. Il n'est pas possible de regarder un travailleur sans
maudire ce qui a fait que cet homme travaille, alors qu'il pourrait nager,
dormir dans l'herbe ou simplement lire ou faire l'amour avec sa femme. »
Boris VIAN
Merci.
Cependant, il n'y a pas quelque chose de plus simple ? Genre forcer à
utiliser une bibliothèque plutôt qu'une autre ?
Typiquement, sur systèmes Linux, je crois qu'il suffit de mettre des
bibliothèques "prioritaires" dans un fichier ou une variable
d'environnement. Comme ça si une fonction particulière est appelée, le
linker prendra d'abord celle de la bibliothèque prioritaire.
J'ai du mal à saisir ce que vous recherchez, un genre de «libmap.conf» ?
Faire une DLL "stub".
Par exemple pour tracer iprenewaddress : renommer la DLL standard
IPHLPAPI.DLL, faire une DLL qui va exporter tous les points d'entrees de
IPHLPAPI. Pour toutes les fonctions hors iprenewaaddress utiliser un
#pragma special pour aller chercher la fonction dans la DLL renommée
(je ne me rappelle plus la syntaxe exacte), implementer iprenewaddress :
logger ce que l'on veut, appeler la fonction de la DLL originale.
Cette methode peut marcher pour les "petites" DLL, sinon ca devient vite
laborieux pour les grosses DLL systemes avec quelqes centaines de fonctions
exportées. A moins d'automatiser la generation du code des pragma.
Mais ça depend ce que tu veux faire, soit espionner tous les programmes
soit un programme en particulier.
Thierry a écrit :
#pragma comment(linker, "/export:IpRenewAddress=IPHLPAPI.IpRenewAddress")
--
« Le travail est probablement ce qu'il y a sur cette terre de plus bas et
de plus ignoble. Il n'est pas possible de regarder un travailleur sans
maudire ce qui a fait que cet homme travaille, alors qu'il pourrait nager,
dormir dans l'herbe ou simplement lire ou faire l'amour avec sa femme. »
Boris VIAN