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 ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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 <<
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 <<
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 <<
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.
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.
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.
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» ?
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» ?
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» ?
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.
Vincent Hiribarren <vynce@alea.invalid> écrivait
news:1126539357.253045@slbhw0:
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.
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.
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),
-- « 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 <<
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),
--
« 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 <<
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),
-- « 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 <<
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).
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).
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).
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 <<
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 <<
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 <<
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
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
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