Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Detourner les appels systemes

8 réponses
Avatar
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.

8 réponses

Avatar
Thierry
Bonjour,

Vincent Hiribarren a écrit :

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 ?



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
Mon blog RSS : http://yarglah.free.fr/monblog_rss.php <<




Avatar
Vincent Hiribarren
Thierry wrote:

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 ?



http://research.microsoft.com/sn/detours/



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.
Avatar
David MAREC
D'après Vincent Hiribarren:

http://research.microsoft.com/sn/detours/



Merci.

Cependant, il n'y a pas quelque chose de plus simple ? Genre forcer à
utiliser une bibliothèque plutôt qu'une autre ?



J'ai du mal à saisir ce que vous recherchez, un genre de «libmap.conf» ?
Avatar
Thierry
Vincent Hiribarren écrivait
news::

Cependant, il n'y a pas quelque chose de plus simple ? Genre forcer à
utiliser une bibliothèque plutôt qu'une autre ?



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.
Avatar
Thierry
Bonjour,

Thierry a écrit :

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),



#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
Mon blog RSS : http://yarglah.free.fr/monblog_rss.php <<




Avatar
Vincent Hiribarren
David MAREC wrote:

Cependant, il n'y a pas quelque chose de plus simple ? Genre forcer à
utiliser une bibliothèque plutôt qu'une autre ?



J'ai du mal à saisir ce que vous recherchez, un genre de «libmap.conf» ?



C'est génial, ça, je ne connaissais pas. Mais ça a l'air d'être plutôt
pour FreeBSD, et en terme de programmation j'ai plutôt touché à Linux.

J'avais en fait en tête plutôt des choses du type la variable
d'environnement LD_PRELOAD, ou /etc/ld.so.preload (man ld.so sur
système unix), mais libmap.conf s'y rapproche aussi, en mieux même.

Par exemple, ce que j'aimerai faire, lors d'un connect() sur un
socket, pour n'importe quel programme executé, je veux détourner cet
appel pour que ce soit mon connect() qui soit appelé et faire un
pré-traitement. Puis, si j'ai envie d'appeler le connect() original,
le faire.

Voilà, pour tout ce genre de chose je souhaite savoir s'il y a un
moyen aussi simple que d'éditer un fichier, comme sur système unix.
L'approche de "detours" est très intéressante, mais un peu lourde avec
son travail au niveau assembleur :-) (et puis c'est pour architecture
x386 seulement, ma question est générale, mais le but finale serait de
voir si je peux reproduire ça sur Windows Mobile avec architecture
autre que x386).
Avatar
Thierry
Bonjour,

Vincent Hiribarren a écrit :

Par exemple, ce que j'aimerai faire, lors d'un connect() sur un
socket, pour n'importe quel programme executé, je veux détourner cet
appel pour que ce soit mon connect() qui soit appelé et faire un
pré-traitement. Puis, si j'ai envie d'appeler le connect() original,
le faire.



Dans ce cas les LSP sont tes amies.
Ca marcge même sous CE.
http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/wcewinsk/html/ceconlayeredserviceprovider.asp

--
« 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
Mon blog RSS : http://yarglah.free.fr/monblog_rss.php <<




Avatar
Aurelien Regat-Barrel
Petit article sur le sujet:
http://www.internals.com/articles/apispy/apispy.htm
Avec une partie consacrée à Winsock justement:
http://www.microsoft.com/msj/0599/LayeredService/LayeredService.aspx
Sinon dans la MSDN au niveau des API de debugging y'a des articles sympas:
http://msdn.microsoft.com/msdnmag/issues/1000/vtrace/toc.asp

--
Aurélien Regat-Barrel