API HOOKING

Oeil_de_taupe Messages postés 150 Date d'inscription samedi 31 janvier 2004 Statut Membre Dernière intervention 16 février 2009 - 7 avril 2005 à 18:00
cs_tigzy Messages postés 2 Date d'inscription vendredi 22 octobre 2010 Statut Membre Dernière intervention 4 novembre 2010 - 4 nov. 2010 à 16:41
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/30610-api-hooking

cs_tigzy Messages postés 2 Date d'inscription vendredi 22 octobre 2010 Statut Membre Dernière intervention 4 novembre 2010
4 nov. 2010 à 16:41
Super, mais ça aurait été bien de commenter le code...
hzocm Messages postés 8 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 28 mai 2007
28 mai 2007 à 14:40
salut,

Super ton code, merci bc.

Sinon, sais tu pourquoi si je compile le programme en mode DEBUG, Notepad crash lorsque la boite de dialog affiche?

Est_ce qu'on peut utiliser le meme code pour remplacer la méthode LoadResource, FindResource? Sinon, il y a quoi à modifier? Peux tu commenter un peu ton code s'il te plait?

Merci beaucoup

HeoU

Merci
thunderx Messages postés 13 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 21 septembre 2006
12 mai 2006 à 14:49
Merci.
En tout cas je viens de faire pas mal de test, je n'ai pas eu de plantage.

Demarche tres interessante en tout cas.
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
12 mai 2006 à 11:27
C'est tout simplement celle de ma DLL.
thunderx Messages postés 13 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 21 septembre 2006
12 mai 2006 à 11:26
Et la lib incluse , elle contient quoi ?
Msgbox Messages postés 67 Date d'inscription lundi 1 juillet 2002 Statut Membre Dernière intervention 1 septembre 2006
2 juin 2005 à 20:35
Ah oui c'est vrai !
Vachement astucieux de se passer de CreateRemoteThread :-D. 10/10
Dommage qu'on peut pas exploiter cette methode sans dll.

++
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
31 mai 2005 à 22:32
SetWindowsHookEx sert à s'injecter dans les process mémoire des programmes que Windows a.
Msgbox Messages postés 67 Date d'inscription lundi 1 juillet 2002 Statut Membre Dernière intervention 1 septembre 2006
31 mai 2005 à 22:06
Ta source est vachement interessante, bien trouve le coup du JMP, n'empeche j'aurais qqs questions la dessus :S

A quoi servent les fonctions SetWindowsHookEx, CallNextHook ?
J'ai remarque qu'en les enlevant (et en enlevant le if(!...) du Lanceur, le programme ne fonctionne plus, la meme chose quand on quitte le programme (ca crash).
Bon pour le le crash j'ai compri en debuggant, c'est assez logique vu que le notepad fait des "pop" alors que la pile est vide ou un truc du genre, mais comment ces deux fonctions font pour empecher ce bug ????? C'est de la magie haut nivo ? lol

Personellement j'ai essaye de faire sans, c'est a dire un WriteProcessMemory qui insere un JMP vers une DLL chargee sur le notepad. Ca marche mais, juste apres le detournement de l'API, ca crash (pile en vrac).

QQun pourrait m'eclairer la-dessus ?

++
mirlaine Messages postés 32 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 24 août 2005
14 avril 2005 à 19:31
salut ymca2003 a raison:

1 lister toute les thread du process avec ntquerysysteminformation
2 metre toute les thread en suspen
3 injecter le code
4 puis tout resume

a+
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
13 avril 2005 à 10:40
LordBob> j'ai regardé, on peut effectivement enlever le header winsock, ca compile et ca tourne sans problemes... il doit s'agir d'un résidu d'un autre projet
a+
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
13 avril 2005 à 09:48
ha ben j'ai trouvé pour mon problème, il faut pas oublier de dire que MyMessageBoxW est __stdcall (ca y est partout sauf a cet endroit ...)

a+
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
12 avril 2005 à 18:33
dite j'ai une question j'ai regarder le code de la dll, je constaste que on inclut le header winsock ?
ce header est-il vraiment nécessaire et si oui pourquoi?
Dihangel Messages postés 6 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 5 juin 2005
12 avril 2005 à 18:02
<quote>
Pas mal,
mais quand je lance le programme puis le notepad, puis je ferme le programme ça quitte le notepad quand je veux revenir à une boîte de dialogue de base (c'est normal?, on peut éviter ça?)...
</quote>
J'avais ce même probléme quand je m'amusais avec les hooks, je crois que ca vient du fait que l'adresse hooker en mémoire n'est pas correctement remplacé quand tu decharge la dll. Donc le programme ne trouve plus l'adresse de la fonction, donc ca plante...

Un article qui mérite d'être cité, tout y est expliqué avec même du code a l'appui:
http://www.codeproject.com/system/hooksys.asp
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
11 avril 2005 à 15:23
salut,
perso en ayant recompilé ce code, ca detourne bien le MessageBoxW du notepad, mais celui plante en fermant, alors que pas de pb avec l'exe qui etait direct dans la source.
il faut compiler avec certaines options??
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
9 avril 2005 à 16:08
le reverse engineering concerne plutot la transformation de l'exe en code assembleur.

par contre, le but final pour l'API hook et le reverse code est quand meme de comprendre le fonctionnement du programme.
Utilisateur anonyme
9 avril 2005 à 15:41
Mais alors ca c'est formidable; vraiment formidable.
Ca ouvre un immense champ de possibilités...


Sinon y'avait un rapport avec le reverse code ?
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
9 avril 2005 à 13:49
salut,

les programmeurs assembleur se sont pas mal interessés aux api hook et autres méthodes de reverse code, il y a d'autres techniques d'API Hook expliquées sur le site de Elicz. ( recherche google )

si le sujet t'interresse, j'ai déposé une source du nom de tracelog ( sur www.asmfr.com )

il permet le log des api en temps réel par traçage de l'application a l'aide des exceptions.

il y a aussi un exemple de hook de la fonction SendMessage afin de logger ses paramètres.

@++
Utilisateur anonyme
8 avril 2005 à 15:39
J'ha-lu-ci-ne !!!!!
Je savais pas du tout qu'on pouvait hooker des applications. Je considérais le hook comme un truc permettant seulement la capture d'évenements (clavier, souris, etc...).

Bravo, bien joué !

A part ça, c'est un peu du piratage ca ! :-)
Ta fonction peut ne connaitre aucune limite dans le code ?
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
7 avril 2005 à 19:41
LoOl le screen, t'aurais quand meme pu nous faire un jolie cercle (:
Sinon le code est vraiment pas mal.
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
7 avril 2005 à 18:38
Dans le bouquin de richter il ya un exemple similaire qui utilise une autre technique (modification de la table d'import):
http://brunews.free.fr/brunews/download/JR4.zip
http://brunews.free.fr/brunews/download/JR4Sources.zip

En ce qui concerne ta technique elle est assez risquée car la modification des premiers octets en jmp ne se fait pas en 1 instruction ASM mais en plusieurs => le thread qui fait ça peut être interrompu au milieu et un autre thread peut faire un appel à la fct hookée et boom.

Sinon en utilisant WriteProcessmemory, il n'y a pas besoin de modifier les protections des pages.
Oeil_de_taupe Messages postés 150 Date d'inscription samedi 31 janvier 2004 Statut Membre Dernière intervention 16 février 2009
7 avril 2005 à 18:00
Pas mal,

mais quand je lance le programme puis le notepad, puis je ferme le programme ça quitte le notepad quand je veux revenir à une boîte de dialogue de base (c'est normal?, on peut éviter ça?)...
Rejoignez-nous