Intercepter l'appel d'un API

sebastienbro Messages postés 246 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 5 août 2004 - 18 juil. 2003 à 01:17
sebastienbro Messages postés 246 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 5 août 2004 - 18 juil. 2003 à 19:05
Bonjour,

j'aurais voulus savoir s'il était possible d'intercepter l'appel d'un api, un peu comme un breakpoint dans softice, ou dans n'importe quel débuggueur. Ca doit etre possible, vu qu'ils le font, mais comment dois-je faire ?

Merci d'avance pour ceux qui m'aideront ou me guideront dans la bonne direction

\* -- Seb [[mailto:sebastienbro@aol.com Mail]] [Web] -- */

12 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 juil. 2003 à 01:35
GetProcAdress ne t'inspire rien ?
BruNews, ciao...
0
sebastienbro Messages postés 246 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 5 août 2004 2
18 juil. 2003 à 12:13
Merci, et après, comment je peux faire pour savoir quand un programme appel un api en particulier ?
\* -- Seb [[mailto:sebastienbro@aol.com Mail]] [Web] -- */
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 juil. 2003 à 12:31
si tu as l'adresse de api, tu peux faire en sorte qu'elle finisse dans un module a toi (dll injectee).
BruNews, ciao...
0
sebastienbro Messages postés 246 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 5 août 2004 2
18 juil. 2003 à 16:58
Merci, mais j'aimerais quand même un peu plus de détail !

Imaginons que je veuille intercepter MessageBox, pour par exemple, changer le texte qui y est affiché. Est ce que tout cela est possible ?

\* -- Seb [[mailto:sebastienbro@aol.com Mail]] [Web] -- */
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 juil. 2003 à 17:17
ben oui, tout cela est possible. Sur win 32 on peut quasi tout faire mais c'est pas toujoours evident au 1er abord.
Pour ton exemple un simple hook systeme sysmsgproc suffirait presque. Si c'est plus general, recupere le code a l'adresse de la func API, colle lui l'equivalent ASM qui renverra a l'adresse de la tienne(pour cela qu'il faut injecter une dll dans le processus) de func dans dll, tu traites et tu vois ensuite. Y a encore d'autres facteurs, params possibles a depiler etc...
BruNews, ciao...
0
sebastienbro Messages postés 246 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 5 août 2004 2
18 juil. 2003 à 17:59
Je crois avoir compris, merci beaucoup de ton aide, je vais faire des recherche, par exemple, pour injecter une dll dans un processus.

Si j'ai bien tout compris, if 'suffit' de détourner l'appel de la fonction dans le programme principal, vers la fonction que j'aurais créé. Est ce bien cela ?

\* -- Seb [[mailto:sebastienbro@aol.com Mail]] [Web] -- */
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 juil. 2003 à 18:11
On reprend:
tu fais une dll dans laquelle tu exportes une fonction pour hook qui te permettra de lui faire un mappage interprocessus.
Quand cette dll se charge, DLL_PROCESS_ATTACH, c'est la que tu dois calculer les adresses et changer le code qui te renvoyer vers une fonction de CETTE dll car le code ne sera accessible que s'il se trouve dans le processus appelant l'API surveillee.
BruNews, ciao...
0
sebastienbro Messages postés 246 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 5 août 2004 2
18 juil. 2003 à 18:31
Je devien surement énervant, mais bon. Je comprend pas tout. Tu pourrais faire simple stp.

Quand ma dll se charge, j'envoie mon code dans le programme principal, pour que dès que celui ci appel l'api, il appel en faite ma fonction exporté. Est ce bien cela ?

\* -- Seb [[mailto:sebastienbro@aol.com Mail]] [Web] -- */
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 juil. 2003 à 18:39
quand ta dll se charge, et cela se produit une fois pour CHAQUE processus, dans le DllMain tu dois calculer les adresses et proceder au detournement vers une adresse de d'une fonction de cette dll("C" __stdcall ira mieux).
Bien entendu c'est ton prog qui declenche ce mappage mais c'est ensuite le systeme qui ira en loger une copie dans l'espace memoire de chaque processus concerne par le hook.
OK ?
BruNews, ciao...
0
sebastienbro Messages postés 246 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 5 août 2004 2
18 juil. 2003 à 18:49
Mouais, pas trop, mais c'est pas grave ! Y'aurait pas moyen que tu me fasse un exemple tout simple, ou mm un début, histoire que je vois un peu comment ca marche

Merci d'avance

\* -- Seb [[mailto:sebastienbro@aol.com Mail]] [Web] -- */
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 juil. 2003 à 19:01
j'ai mis un source sur limitation de fenetres IE, tu auras le mode de lancement de la dll. Pour ce qui est du code interne de la dll va voir si tu peux trouver sur des sites de hacker ou autre mais je ne le mettrai pas ici. Dans tous les cas, enregistre bien ce que tu as en cours quand tu procedes aux essais car va tres vite a mettre un systeme en l'air, XP compris.
Tu devrais aussi lire Richter pour la prog systeme sur win32:
http://perso.wanadoo.fr/persans-brunews/
tu prends JR4.zip et JR4Sources.zip
le chapitre 22 devrait t'interesser.
BruNews, ciao...
0
sebastienbro Messages postés 246 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 5 août 2004 2
18 juil. 2003 à 19:05
Merci beaucoup !

\* -- Seb [[mailto:sebastienbro@aol.com Mail]] [Web] -- */
0
Rejoignez-nous