begin process at 2008 05 12 02:47:02
1 170 129 membres
34 nouveaux aujourd'hui
13 956 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SNIFFER MSN MESSENGER GRACE AU HOOK DES FONCTIONS WINSOCK


Information sur la source

Catégorie :Réseaux & Internet Classé sous : msn, messenger, sniff, sniffer, hook Niveau : Expert Date de création : 27/06/2005 Date de mise à jour : 11/08/2007 02:21:22 Vu / téléchargé: 49 201 / 11 004

Note :
9,47 / 10 - par 17 personnes
9,47 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (89)
Ajouter un commentaire et/ou une note


Description

ce code effectue un hook des fonctions de la DLL winsock, et permet ainsi de sniffer la connexion internet de MSN 7.
En fait, il permet de sniffer n'importe quel programme qui utilise ws2_32.dll ou wsock32.dll, et j'ai par exemple réussi à sniffer aussi la connexion d'un programme comme mIRC.

Amusez vous bien ;)

Conclusion

testé sous vc6, vs7 et dev-cpp

la très legère IHM a été reprise d'une source de ce site, je remercie l'auteur qui se reconnaitra (je me rappelle plus de qui il s'agit :)
L'injection de la DLL dans le processus cible (msnmsgr.exe par exemple) se fait un réalisant un hook système WH_CBT, méthode reprise de Arnotic.
Enfin, le hook des apis winsock se fait en suivant ce que raconte Richter.
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

25 juin 2006 16:49:04 :
Pour sniffer le dernier MSN (windows live messenger): hooker la DLL wsock32.dll (pour la version precedente, c'etait ws2_32.dll)
25 juin 2006 18:39:47 :
MAJ titre
11 août 2007 02:21:22 :
update pour compiler sans problème avec vc2005
  • signaler à un administrateur
    Commentaire de cosmobob le 27/06/2005 23:43:24

    ha au fait, le log du 'sniffage' est stocké dans 'C:\LogFileSniff.txt'
    sinon, seules les fonctions recv, send et connect sont détournées, allez voir le fichier wsock32Hook.cpp pour en rajouter d'autres.
    cf le dllmain.cpp pour sniffer un autre prog que msn.

    merci de poster vos remarques ;)

  • signaler à un administrateur
    Commentaire de vecchio56 le 28/06/2005 13:23:49 administrateur CS

    Il vaut mieux savoir ce que signifie sniffer ici... Ca m'étonne que Joky n'en ai pas profité pour nous sortir une de ses boutades

  • signaler à un administrateur
    Commentaire de cosmobob le 28/06/2005 14:02:14

    oui ici sniffer = logger les donnees envoyées ou recues par MSN, pas se mettre de la poudre blanche sous le nez et l'aspirer.

  • signaler à un administrateur
    Commentaire de Kirua le 28/06/2005 14:26:28

    Superbe:

    (send) (SOCKET = 440, size = 31) - ret = 31
    PRIVMSG #Coder-Studio :bonjour

    (recv) (SOCKET = 440, size = 998) - ret = 82
    :funto!~funto@EpiK-60E55C9B.w80-13.abo.wanadoo.fr PRIVMSG #Coder-Studio :bonjour

    :D ça marche impeccablement. C'est excellent comme programme pour essayer de comprendre les protocoles des applications :) Et avec ça, on comprend aussi pourquoi il faut VRMNT crypter les communications sensibles genre mots de passe ... et le protocol FTP ne le fait pas en standard il me semble -> moyen de récupérer des mots de passe méchament :-/.

    Merci aussi d'avoir pris la peine de citer tes sources (ça fait vrmnt plaisir l'honnêteté!) et d'avoir, fait exceptionnel, fourni des fichiers de projets pour Dev-C++ ET VC++, sans compter que sous Dev ça compile du premier coup sans aucune erreur ... je ne sais pas pq, mais ça m'épate chaque fois que ça marche du premeir coup :D.

    Mci pr le code :) Je regrette juste que le log soit dans un fichier qu'on ne peut ouvrir qu'à la fin du sniffage, j'aurais préféré une boîte de texte dans le GUI (ou IHM comme tu dis) qui se met à jour automatiquement.

  • signaler à un administrateur
    Commentaire de cosmobob le 28/06/2005 14:36:39

    salut,
    merci pour ton commentaire.
    effectivement le pb est que le fichier est écrit depuis le processus cible (mIRC ou MSN) et que pour l'afficher dans une boite de texte du processus de base (le wsock32_hook.exe), il faut jouer un peu sur la communication inter processus ce qui m'a paru fastidieux, donc le choix simple c'etait de tout mettre dans un fichier sur le disque ...

  • signaler à un administrateur
    Commentaire de Zootella le 28/06/2005 15:03:31

    Salut, juste une petite question, si on n'a pas les paramétres des fonctions, comment faut-il procéder alors pour récupérer les données de ces paramétres ?

  • signaler à un administrateur
    Commentaire de Zootella le 28/06/2005 15:07:18

    Pourquoi afficher la boite de dialog depuis wsock32_hook.exe ? Tu peux le faire depuis la dll.

  • signaler à un administrateur
    Commentaire de krust le 28/06/2005 15:11:19

    Pour sniffer un programme, faire un hook n'est pas indispensable et est certainement plus long que d'utiliser un sniffer à part entière telque ethereal qui a lui un protocol analyser intégrée et d'autres outils tout aussi utiles.
    Ceci dit, l'intéret du hook est qu'on peut détourner ou modifier le streaming d'une application ce qui peut être utile (Dans les cheats par exemple :D).


    Krust.

  • signaler à un administrateur
    Commentaire de Kirua le 28/06/2005 15:13:42

    Krust, j'utilisais déjà ethereal, mais il me semblait intéressant de voir un exemple sur cppfrance :) Sans compter que j'aime assez bien la mise en forme du log ^^. Mais je te concède que dès que tu sniffes du HTTP ça doti faire mal les 54 Ko de la page d'un coup ... comprends plus rien ^^.

  • signaler à un administrateur
    Commentaire de krust le 28/06/2005 15:24:20

    Je ne critique pas la source du tout ! Loin de moi l'idée,..
    Je mettais juste en évidence qu'elle aurait été plus appropriée dans d'autres domaines :). Car quand t'as un flux de données désassemblées c'est galère,... De plus quand tu as des applications utilisants plusieurs socks tu t'en sorts encore moins.


    Krust.

  • signaler à un administrateur
    Commentaire de cosmobob le 28/06/2005 15:47:15

    Zootella> Une boite de dialogue depuis le processus cible ne persiste pas une fois que as fermé ce processus (ce que je voulais au début éviter).

    La dans ce cas, tu peux détourner ce que font les fonctions de winsock, dans ce code elles sont loggées pour montrer l'utilisation. De plus il s'agit ici d'un code autonome qui n'a pas besoin de driver pour être capable de sniffer ce qui - par exemple - sort...

    sinon je comprends pas ta premiere question:
    "si on n'a pas les paramétres des fonctions, comment faut-il procéder alors pour récupérer les données de ces paramétres"

    qu'est ce que tu veux dire? les données d'un paramètre me parait assez flou, comme le fait de ne pas avoir les paramètres d'une fonction ...

  • signaler à un administrateur
    Commentaire de BruNews le 28/06/2005 15:47:18 administrateur CS

    Salut,

    pas le temps de tout voir pour l'instant mais parait fort intéressant et tout le monde semble d'accord, y a pas de fumée sans feu.
    Juste un truc:
    dans void HookWSock32::OuvrirLog: hFile = CreateFile(filename,...);
    void HookWSock32::FermerLog()
    {
    if(hFile) CloseHandle(hFile);
    si hFile invalide en sortie de CreateFile vaut -1 donc ira sur CloseHandle, faut comparer à INVALID_HANDLE_VALUE.

    ciao...

  • signaler à un administrateur
    Commentaire de cosmobob le 28/06/2005 16:15:44

    ok merci j'update ce petit pb ce soir

  • signaler à un administrateur
    Commentaire de krust le 28/06/2005 16:20:41

    Je pense qu'il veut dire : "Comment faire pour utiliser une fonction quand on a pas son prototype?"
    Et bien tu sais pas l'utiliser puisque tu ne sais pas quoi envoyer,... Par contre, si tu connais une application utilisant cette fonction, tu peux désasembler le programme et finir par trouver quels arguements sont envoyés ;).
    Ceci dit, presque toutes les apis sont documentées (apparts quelques-une).

  • signaler à un administrateur
    Commentaire de cosmobob le 28/06/2005 16:39:31

    ha ok, oui ben dans ce cas les fonctions de winsock sont effectivement bien connues. Si tu ne connais pas le prototype de ta fonction, le problème est inextricable.

  • signaler à un administrateur
    Commentaire de Joky le 28/06/2005 17:59:26

    Mdr Vecchio voyons
    Sniffer, c'est vrai que c'est ambigue comme terme
    enfin dans la vie de tout les jours :)
    Mais en prog non j'pense pas :)

    Et juste comme ça :) J'ai les sinus sensibles, donc moi c'est plus la seringue vois tu :)
    J'ai voler le Pousse Sering à mon lycée, et tous les soirs j'suis sous perfusion :) J'menvois des tutoriaux C++ dans le sang :)
    Hum c'est kré bon :)
    Sinon pour le prog quand même j'lé testé, et une fois il a planter, il a mis une autre adresse que le gars que j'ai été voir, fin bref ça s'est résolu après mais bon c'est quand même cool :)

  • signaler à un administrateur
    Commentaire de Zootella le 28/06/2005 19:53:48

    Ok merci krust, sinon sur certains programmes ça ne marche pas, j'obtiens juste la ligne "(connect) (SOCKET = 260, sockaddr = 25688556) - ret = -1" mais pas de recv ou de send, pourtant il envoie et reçoit des données.

  • signaler à un administrateur
    Commentaire de BruNews le 28/06/2005 20:09:47 administrateur CS

    Veut dire qu'ils n'emploient pas recv ni send.

  • signaler à un administrateur
    Commentaire de Zootella le 28/06/2005 20:25:00

    j'ai compris pourquoi je pense : il les emplois indirectement, c'est à dire qu'il charge une dll qui elle envoie et reçoit des données, est-ce possible de hooker la dll plutôt que l'exe ?

  • signaler à un administrateur
    Commentaire de BruNews le 28/06/2005 20:33:33 administrateur CS

    pas obligé, le prog peut employer WSASend() par exemple et son point d'entrée est différent de send().

  • signaler à un administrateur
    Commentaire de Halo2 le 01/07/2005 13:33:42

    Bonjours,

    je n'arive pas a compiller l'exe pour pouvoire tester...

  • signaler à un administrateur
    Commentaire de cosmobob le 01/07/2005 13:50:34

    salut,
    quel compilateur utilises-tu, quels sont les messages d'erreur ?

  • signaler à un administrateur
    Commentaire de Halo2 le 01/07/2005 17:06:01

    Avec Dev-c++ ou Visual C++ j'ai toujours une erreur:

    [DEV-C++]
    C:\Documents and Settings\****\Mes documents\Mes Application\cppfrance_source_32374\Makefile.win [Build Error]  [Release/wsock32_hook.exe] Error 1

    [Visual C++]
    --------------------Configuration: Exe - Win32 Debug--------------------
    Linking...
    LINK : fatal error LNK1104: cannot open file "wsock32_hook.lib"
    Error executing link.exe.

    wsock32_hook.exe - 1 error(s), 0 warning(s)

  • signaler à un administrateur
    Commentaire de cosmobob le 01/07/2005 21:33:50

    salut,
    compile la DLL avant de compiler l'exe ...

  • signaler à un administrateur
    Commentaire de srtg1 le 01/07/2005 22:11:50

    Une version exe sans dll est elle complique a faire ?
    Car moi j'y arrive pas ...
    Pas d'erreur de compile l'exe est cree mais il plante mon explorer et ca log rien

    #include <windows.h>
    #include <ImageHlp.h>
    #include <string>
    #include "tokenizer.h"
    #include "wsock32Hook.h"

    using namespace std;

    HINSTANCE thismod = 0;

    const char* ProgramName = "msnmsgr.exe";

    const char* WSockDll = "ws2_32.dll";

    HookWSock32* wsockhook = NULL;

    HHOOK hhk = 0;

    LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
      return CallNextHookEx( hhk, nCode, wParam, lParam);
    }

    HHOOK DLLInjectedAdd()
    {
      if (!hhk) hhk  = SetWindowsHookEx(WH_CBT,(HOOKPROC) HookProc, thismod, 0);
      return ( hhk);
    }

    DLLRemove()
    {
       UnhookWindowsHookEx(hhk);
       hhk = 0;
    }

    int WINAPI WinMain (HINSTANCE hDll, HINSTANCE hPrevInstance,
                        PSTR szCmdLine, int iCmdShow)
    {
            HWND         hwnd;
            MSG          msg;

             thismod = hDll;
             char buffer[MAX_PATH];
             GetModuleFileName(0, buffer, sizeof(buffer));
             tokenizer tfullpath(string(buffer), '\\');
            
             // si on est dans le programme dans lequel la DLL doit lancer le hook winsock
             if (tfullpath.gettok(-1) == ProgramName) // gettok(-1) : dernier token
             {
                // On lance le hook winsock
                wsockhook = new HookWSock32(WSockDll);
                if (wsockhook)
                   wsockhook->InstallAllHooks();
             }

    hhk = DLLInjectedAdd();

    while (GetMessage (&msg, NULL, 0, 0))
    {
    TranslateMessage (&msg) ;
    DispatchMessage (&msg) ;
    }
    return msg.wParam ;

    }

  • signaler à un administrateur
    Commentaire de BruNews le 01/07/2005 22:25:39 administrateur CS

    Dixit MSDN:
    This hook procedure must be in a dynamic-link library (DLL).

  • signaler à un administrateur
    Commentaire de srtg1 le 01/07/2005 22:44:19

    OK Je pensai qu'on pouvait contourner le probleme
    comme ici
    http://www.cppfrance.com/code.aspx?ID=27169

  • signaler à un administrateur
    Commentaire de cosmobob le 01/07/2005 23:07:15

    dans ce que tu as mis, HookProc n'est pas déclaré __declspec(dllexport) (ce qui etait l'astuce principale); donc ca risque pas de marcher ...
    et la il faudrait charger ou non le hook winsock au sein de la fonction de hook (avec un flag pour pas le mettre deux fois) et pas au sein du WinMain.

  • signaler à un administrateur
    Commentaire de cosmobob le 01/07/2005 23:33:27

    le pb est que de cette maniere tu ne seras pas averti du déchargement de l'exe dans le processus cible (l'équivalent du DLL_PROCESS_DETACH); or si tu ne remets pas les choses en place (avec un delete wsockhook) qd tu as quitté le sniffer, l'application cible va planter !! (car ses fonctions recv etc ... pointeront vers une adresse mémoire qui n'existe plus)

  • signaler à un administrateur
    Commentaire de srtg1 le 01/07/2005 23:39:36

    Ca devrait etre Ok avec ca
    Mais je log rien

    J'ai l'impression de ne jamais passer par HookProc(int nCode, WPARAM wParam, LPARAM lParam) meme en validant le bouton

    ...
    __declspec(dllexport) LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
             // Ouverture du fichier log. Le créer s'il n'existe pas.

    return CallNextHookEx( hHook, nCode, wParam, lParam);
    }

    __declspec (dllexport) void __stdcall DLLRemove()
    {
       UnhookWindowsHookEx(hhk);
       hhk = 0;
    }




    //Fonction de la boite de dialogue
    BOOL CALLBACK  MainDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam )
    {
       static HWND hBouton;//Handle du bouton
       static int etat;// Flag d'état du hook

       switch( msg )
       {  
          case WM_CLOSE: // Clic sur la croix de fermeture
          {
             // Fermeture de la boite de dialogue
             EndDialog( hDlg, TRUE );
             return 1;
          }
          case WM_INITDIALOG: //Initialisation de la boite de dialogue
          {

               wsockhook = new HookWSock32(WSockDll);
                if (wsockhook)
                   wsockhook->InstallAllHooks();

             // Création du bouton Activer/Désactiver
             hBouton = CreateWindow("BUTTON", "Commencer à sniffer", WS_CHILD | WS_VISIBLE , 40, 35,160, 30, hDlg, 0, 0, 0);  
             // Obtenir le HANDLE de l'exécutable en cours
             hExe = GetModuleHandle(NULL);
             // Mettre le flag d'état à 0= Hook inactif
             etat=0;
             // Fin d'initialisation
             return 1;
          }
          case WM_COMMAND: // Appui sur le bouton
          {
             if( lParam == (long) hBouton)
             {
                if (!etat)//Si hook inactif alors
                {
                   // Activer le hook
                   //hHook = DLLInjectedAdd();
                   hHook = SetWindowsHookEx( WH_CBT, (HOOKPROC) HookProc, hExe, NULL);
                   //Mettre le flag d'etat à 1 (actif)
                   etat=1;
                   // Changer le texte du bouton
                   SetWindowText(hBouton,"Arrêter de sniffer");
                }
                else //Si hook actif alors
                {
                   // Désactiver le hook
                   DLLRemove();
                   // Mettre le flag d'état à 0 (inactif)
                   etat=0;
                   // Changer le texte du bouton
                   SetWindowText(hBouton,"Commencer à sniffer");
                }
             }
             break;
          }
    }
       return 0;
    }

    //Fonction principale: Création d'une boite de dialogue sans ressources
    int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmd,int nShow )
    {
       // Allouer de la mem pour notre dialog template
       LPDLGTEMPLATE lpdt = ( LPDLGTEMPLATE) GlobalAlloc(GPTR, 512);
       if (!lpdt)
          return 1;

       // Définir les propriétés de la boite de dialogue
       lpdt->style = WS_POPUP | WS_BORDER |WS_MINIMIZEBOX| WS_SYSMENU | DS_MODALFRAME | WS_CAPTION;
       lpdt->x  = 100; lpdt->y  = 100; lpdt->cx = 120; lpdt->cy = 50;
      
       // Obtenir pointeur sur la zone du nom de la boite de dialogue
       LPWSTR lpnom = (LPWSTR) (lpdt+1)+2;

       // Convertir le nom en UNICODE et le mettre dans la zone nom
       MultiByteToWideChar (CP_ACP, 0, "WinSock Sniffing", -1, lpnom, 128);
        
       // Lancer la boite de dialogue
       DialogBoxIndirect(hInstance,lpdt,NULL,(DLGPROC)MainDlgProc);

       // Libérer la mémoire allouée puis quitter
       GlobalFree((HGLOBAL) lpdt);
       return FALSE;
    }

  • signaler à un administrateur
    Commentaire de cosmobob le 02/07/2005 00:24:27

    tu as pas pigé que avec cette astuce, la seule fonction qui est appelée dans le processus cible est HookProc.
    Si tu initialises le hookwinsock dans la dialogbox
    (en faisant:
    wsockhook = new HookWSock32(WSockDll);
    if (wsockhook)
       wsockhook->InstallAllHooks();
    )
    qui elle n'est appelée que par hookwsock32.exe, tu n'obtiendras evidemment rien !!!!

    tu dois avoir plutot:

    bool dejalance = false;

    __declspec(dllexport) LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
       char buffer[MAX_PATH];
       GetModuleFileName(0, buffer, sizeof(buffer));
       tokenizer tfullpath(string(buffer), '\\');
            
       if (tfullpath.gettok(-1) == ProgramName)
       {
          if (!dejalance)
          {
             // On lance le hook winsock
             wsockhook = new HookWSock32(WSockDll);
             if (wsockhook)
                wsockhook->InstallAllHooks();
             dejalance = true;
          }
       }
       return CallNextHookEx( hHook, nCode, wParam, lParam);
    }


    la fonction dans le hook etant censée etre la plus rapide possible, il faudrait eviter de faire un GetModuleFileName a chaque appel de hookproc (ce qui est possible avec un autre flag genre bool premierappel = true)
    Comme j'ai dit précedemment, comme le processus cible n'est pas averti du déchargement dans sa mémoire de hookwsock32.exe qd tu arretes le sniffer, les fonctions recv, etc. du processus cible vont pointer vers une zone mémoire non valide et il y aura plantage. Cette méthode ne sera donc jamais correcte, sauf a trouver un moyen de connaitre qd l'exe se décharge de la mémoire du processus cible, comme on peut le connaitre avec les DLL et le DLL_PROCESS_DETACH.

  • signaler à un administrateur
    Commentaire de cosmobob le 02/07/2005 00:30:27

    voici plutot un code efficace pour le hookproc:

    bool dejalance = false;

    __declspec(dllexport) LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
       if (!dejalance)
       {
          dejalance = true;
          char buffer[MAX_PATH];
          GetModuleFileName(0, buffer, sizeof(buffer));
          tokenizer tfullpath(string(buffer), '\\');
              
          if (tfullpath.gettok(-1) == ProgramName)
          {
             // On lance le hook winsock
             wsockhook = new HookWSock32(WSockDll);
             if (wsockhook)
                wsockhook->InstallAllHooks();
             dejalance = true;
          }
       }
       return CallNextHookEx( hHook, nCode, wParam, lParam);
    }

  • signaler à un administrateur
    Commentaire de cosmobob le 02/07/2005 00:42:36

    si tu veux lancer le hookwinsock sans passer par une DLL, injecte du code dans le processus cible avec CreateRemoteThread, mais ca n'est possible que sous les os récents (NT)

  • signaler à un administrateur
    Commentaire de krust le 03/01/2006 20:51:08

    La bonne question^^
    Le plus simple : hook hook and hook :)
    Hook les api qui permettent de lister les process' et enlève le tien quand il passe, il sera plus visible dans la tasklist standart. Maintenant, y a des manières plus évolués de le faire mais c'est une autre histoire. Même idée pour cacher les fichiers,...

    Krust.

  • signaler à un administrateur
    Commentaire de AnOnYmOuSs le 04/01/2006 09:02:17

    haha salut tout le monde bonne année en retard =D quelqun ici si connait avec wpe (winsock packet editor) si quelqu1 peut me repondre...merci davance =P

  • signaler à un administrateur
    Commentaire de hijakhakker le 04/01/2006 16:54:20

    d'abord bonne année
    je ne vois pas ma question parmis les commentaire ?peut etre qu'elle contient un virus..
    KRUST> je voulais dire que pour exploiter la dll il faut passer par un winmain et utiliser boite de dialogue sans resource ..et si je veut exploiter les fonction de la dll depuis une autre source ?car ça fait des moment que je veut cacher le processus mais ça marche pas avec ce sw_hide ..
    merci d avance
    administrateur> si les comentaires se perdent chez vous ça veut dire que vous avez pas un forum php

  • signaler à un administrateur
    Commentaire de krust le 04/01/2006 17:44:31

    Quand tu fais apparaître le Task Manager sur windows, t'as plusieurs onglets.
    Le premier fait une liste des fenêtre affichées sur le desktop
    Le second affiche tout les process chargés.

    Donc pour cacher dans la première liste -> SW_HIDE
    Pour cacher dans la seconde y a pas de process(hide); il faut hooker la fonction NtQuerySystemInformation qui permet (entre autre) de lister les process chargés. C'est cette fonction qui est utilisée par le taskmanage (si je me rappel bien).

    Voilà ;)

  • signaler à un administrateur
    Commentaire de krust le 04/01/2006 18:12:29

    ARggh, ça l'a refait...
    Ca fait mine de ne pas avoir fonctionné puis hop on se retrouve avec un double post, encore désolé.

  • signaler à un administrateur
    Commentaire de hijakhakker le 04/01/2006 19:33:17

    concernant cette source j'ai essayé de la faire disparaitre du desktop mais sans resultat avec (sw_hide)
    (mon but est de la faire disparaitre ,tout simplement du desktop)
    j'ai changé de moidfier les paramettre sans resultat
    quelqu'un a une idée?
    merci

  • signaler à un administrateur
    Commentaire de Mamoutt le 08/02/2006 17:52:45

    Bonjour bonjour tout le monde!

    Je suis nouveaux sur ce forum (qui mas l'air trés interressant!)
    Voila, je vien de dl le sniffer msn mais je ne comprend pas trés bien comment l'utiliser :s faut-il utiliser un éditeur C ou autres?

    Merci d'avance les gens!

  • signaler à un administrateur
    Commentaire de zibo3 le 20/02/2006 18:08:17

    Bonjour,

    J'ai essayé ton code qui est exellent mais je me suis permis de le tester sur une application plus simple : notepad.exe et de hokker les fonctions de texte : TextOutW, ExtTextOutW, DrawTextW, DrawTextExW dans les dll gdi32.dll et user32.dll.
    Et quand je cherhce les pointeurs de fonctions je n'ai pas de probleme mais par contre le parcours de la table de l'import descriptor, il ne trouve que les fonctions dont notepad ne fait pas appel comme : TextOutW par contre pour les autres rien du tout. Je sais pas si ca peut aider mais j'ai un Windows XP avec le SP2. Est-il possible que Windows protege les adresses d'appel au fonctions externe de ses applications?
    Merci pour ta solution qui est très importante pour moi.

  • signaler à un administrateur
    Commentaire de supergrey le 10/03/2006 14:10:44

    J'ai essayé ta source, pour msnmsgr ca marche mais pas avec IEXPLORE pourquoi donc?

  • signaler à un administrateur
    Commentaire de supergrey le 10/03/2006 14:11:40

    Avec Iexplore ca marche po , pourquoi donc?

  • signaler à un administrateur
    Commentaire de krust le 10/03/2006 19:18:29

    Il suffit de regarder l'IAT de iexplorer.exe, il n'y a aucune référence à winsock(WS2_32.dll), on ne peut donc pas utiliser un hook IAT,...

    MsnMessenger Importe directement (via l'IAT) WS2_32.DLL, donc elle peut être hooké par cette technique.

    Si tu veux hooker Internet explorer, je te conseil de hooker les fonctions WININET.dll !

    voilà voilà

    Krust.

  • signaler à un administrateur
    Commentaire de supergrey le 11/03/2006 10:38:41

    Je demandais car j'ai une autre source qui hook n'importe quel navigateur et qui remplace les fonction send(), sendto(), WSAsend(), et WSAsendto() qui je crois sont des fonctions winsock.
    Cete source se sert de ces dll: ws2_32.dll  et  wsock32.dll
    Donc je sais pas moi j'y conais pas grand chose j'avait besoin de la fonction recv() c'est pour ca que ta source m'interresse.

  • signaler à un administrateur
    Commentaire de cosmobob le 25/06/2006 16:49:59

    updaté, pour que ca marche avec windows live messenger

  • signaler à un administrateur
    Commentaire de krust le 25/06/2006 18:52:52

    Une méthode alternative qui fonctionne de manière plus générale  (J'ai utiliser dans l'exemple, le hook de CreateToolhelp32Snapshot).
    Il faut mettre ce code dans une dll et l'injecter dans le processus que l'on veut hooker.


    void *DetourFunc(BYTE *src, const BYTE *dst, const int len)
    {
    BYTE *jmp = (BYTE*)malloc(len+5);
    DWORD dwback;

    VirtualProtect(src, len, PAGE_READWRITE, &dwback);

    memcpy(jmp, src, len); jmp += len;

    jmp[0] = 0xE9;
    *(DWORD*)(jmp+1) = (DWORD)(src+len - jmp) - 5;

    src[0] = 0xE9;
    *(DWORD*)(src+1) = (DWORD)(dst - src) - 5;

    VirtualProtect(src, len, dwback, &dwback);

    return (jmp-len);
    }
    typedef HANDLE (__stdcall* pCreateToolhelp32Snapshot)(DWORD,DWORD);
    pCreateToolhelp32Snapshot fCreateToolhelp32Snapshot=NULL;

    hmod = LoadLibrary("KERNEL32.DLL");

    fCreateToolhelp32Snapshot = (pCreateToolhelp32Snapshot)DetourFunc((BYTE*)GetProcAddress(hmod,"CreateToolhelp32Snapshot"),(BYTE*)hkCreateToolhelp32Snapshot,5);

    HANDLE WINAPI hkCreateToolhelp32Snapshot(
      DWORD dwFlags,
      DWORD th32ProcessID
      ){
    [TON HOOK ICI]
    }




  • signaler à un administrateur
    Commentaire de samana le 01/08/2006 21:18:38

    inline std::string toString(T a)
    {
       std::ostringstream oss;
       oss << a;
       return oss.str();
    }

  • signaler à un administrateur
    Commentaire de hzocm le 01/12/2006 16:41:54

    C'est super ton code, merci beaucoup!!!

    Sinon, j'ai une petite question. Dans ta méthode _recv, c'est possible de moddifer le "imcomming data"?

    Par example : je vérifie si dans le message je reçoie s'il contient une chaine : "salut". Si c'est le cas, je remplace la chaine par "Bonjour" avant de l'afficher dans la fenêntre de chat.

    J'ai essayé de changer le contenu de variable "buf", mais ça ne change rien. J'ai l'impression qu'une fois on appelle la vraie fonction ORecv, on ne peut plus changer le contenu.

    Merci

    Hzocm

  • signaler à un administrateur
    Commentaire de supergrey le 01/12/2006 18:53:04

    D'apres mais souvenir j'avais réussi donc oui c'est possible , mais je ne peux pas t'en dire plus.

  • signaler à un administrateur
    Commentaire de hzocm le 05/12/2006 10:14:50

    oui, si possible. Je me suis trompé au fait. Je suis en train de travailler dessus.

    Merci auteur d'avoir partager le source code et d'avoir répondu à ma question.

    Merci Supergry aussi :)

  • signaler à un administrateur
    Commentaire de hzocm le 28/05/2007 11:45:14

    Est_ce que savez vous comment je peux créer un message et l'envoyer en utilisant la méthode _send?

    Exemple de mon message : "MSG 5 ...." ou simplement un PING : "PNG"

    Merci,

  • signaler à un administrateur
    Commentaire de open le 09/06/2007 23:50:44

    Aucun idée pour ta question HZOCM.

    Sinon je n'ai pas réussis à compiler cette source, même avec DEV-C++. Voilà ce que ça me met :

    4 D:\C\Sniffer\Source_DLL\dllmain.cpp In file included from Source_DLL/dllmain.cpp
    D:\C\Sniffer\Source_DLL\tokenizer.h In function `std::string toString(T)':
    14 D:\C\Sniffer\Source_DLL\tokenizer.h `ostringstream' undeclared (first use this function)
      (Each undeclared identifier is reported only once for each function it appears in.)
    14 D:\C\Sniffer\Source_DLL\tokenizer.h expected `;' before "oss"
    15 D:\C\Sniffer\Source_DLL\tokenizer.h `oss' undeclared (first use this function)
    D:\C\Sniffer\Makefile.win [Build Error]  [Source_DLL/dllmain.o] Error 1

    Me manque quelque chose  ?

  • signaler à un administrateur
    Commentaire de cosmobob le 12/08/2007 03:23:51

    il te manquait std:: à l'intérieur d'une fonction template qui n'était appelée nul part.
    la source updatée devrait compiler sans soucis..

  • signaler à un administrateur
    Commentaire de maaxobelixyeye le 20/08/2007 16:10:35

    j'ai essayé de faire la même chose avec des fonctions wininet, juste la fonction internetconnect, mais dans log rien s'est passé, est ce que vous aviez une idée??? merci

  • signaler à un administrateur
    Commentaire de Cendra le 04/09/2007 22:28:16

    moi j'ai essayer sur ma machine avec msn et divers programmes, le fichier de log reste vide,

    il y aurai t'il la possibilité d'ajouter des messages d'erreur pour identifier la fonction en defaut?

    merci d'avance

  • signaler à un administrateur
    Commentaire de Booster le 04/09/2007 22:36:53

    Salut,

    Depuis quelque temps je travaille sur ta source et j'ai un petit problème que je n'arrive pas à régler alors si tu pouvais me filer un petit cou de pouce ça serait sympa ;)

    Je voudrais hook un jeu pour voir ce qu'il en sort.

    J'ai essayé ton application avec "Tony Hawks Pro Skater 4" et ça marche parfaitement ...
    Mais ça ne marche pas pour tous les jeux, exemple : warcraft 3 ou encore age of empire 2.

    Lorsque je démarre le jeu tous se passe bien, le hook à bien fonctionné et les fonctions parfaitement remplacé, MAIS lorsque mon jeu envoi une donnée je n'attrape rien ! Fort dommage :D puisque c'est le but...

    Je n'arrive pas à savoir d'où peu venir le problème.

    Si vous pouviez me donner une piste ? Dans quel sens il faut chercher ? (Je n'attends pas de code, mais plutôt des idées qui pourraient m'aider à résoudre ce problème !)

    Merci d'avance ! Et 10/10 pour ta source ;)

  • signaler à un administrateur
    Commentaire de