IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Intercepter un processus windows avant son execution


Sujet :

Delphi

  1. #1
    Membre régulier Avatar de ALEX77
    Profil pro
    Inscrit en
    juillet 2002
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2002
    Messages : 138
    Points : 76
    Points
    76
    Par défaut Intercepter un processus windows avant son execution
    Bonjour,

    Je me demandais depuis pas mal de temps s'il était possible de réaliser ça en Delphi (ou dans un autre langage) : un moyen simple de détecter lorsqu'un utilisateur lance un processus et décider si on le laisse s'exécuter on si on l'annule.

    Je sais lister les processus 32bits (pas les 64 bits) mais l'idée est d'intercepter un processus avant qu'il puisse s’exécuter.

    Avez-vous eu des expériences sur ce sujet ?

    Merci pour votre retour

  2. #2
    Membre émérite Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    juin 2013
    Messages
    1 423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2013
    Messages : 1 423
    Points : 2 725
    Points
    2 725
    Par défaut
    Tu voudrais te greffer sur les mêmes points d'entrée que les antivirus ? Il y a forcément une API Windows pour ça quelque part.

    La réponse est probablement quelque part dans la doc de Microsoft (si tu arrives à formuler la bonne demande) sur MSDN (bon courage ).

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2002
    Messages
    3 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : mai 2002
    Messages : 3 197
    Points : 5 353
    Points
    5 353
    Par défaut
    salut

    de mémoire il existé plusieurs possibilité selon la dérivation que l'on voulez faire

    le plus connue est sans nulle doute SetWindowsHookEx

    il y a aussi l'injection dll InjectDLL on en parle ici

    sinon directement en mémoire avec VirtualAlloc et autres joyeuseté
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  4. #4
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    décembre 2003
    Messages
    1 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : décembre 2003
    Messages : 1 885
    Points : 2 710
    Points
    2 710
    Par défaut
    voir ici
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  5. #5
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    8 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2002
    Messages : 8 487
    Points : 27 477
    Points
    27 477
    Par défaut
    Citation Envoyé par pprem Voir le message
    Tu voudrais te greffer sur les mêmes points d'entrée que les antivirus ? Il y a forcément une API Windows pour ça quelque part.

    La réponse est probablement quelque part dans la doc de Microsoft (si tu arrives à formuler la bonne demande) sur MSDN (bon courage ).
    j'avais vaguement regardé cela, histoire de me débarrasser de l'antivirus en mettant un appli qui accepte tout...sauf qu'il faut que le programme soit signé et répertorié chez MS si je me souviens bien...donc c'est juste pas possible
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Membre régulier Avatar de ALEX77
    Profil pro
    Inscrit en
    juillet 2002
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2002
    Messages : 138
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par pprem Voir le message
    Tu voudrais te greffer sur les mêmes points d'entrée que les antivirus ?
    Oui c'est un peu ça l'idée

  7. #7
    Membre régulier Avatar de ALEX77
    Profil pro
    Inscrit en
    juillet 2002
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2002
    Messages : 138
    Points : 76
    Points
    76
    Par défaut
    Merci à tous.

    Je vais jeter un oeil plus approfondi aux liens que vous m'avez passé au dessus et je ne manquerais pas de revenir. Je sens que la nuit va être longue!

  8. #8
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2002
    Messages
    3 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : mai 2002
    Messages : 3 197
    Points : 5 353
    Points
    5 353
    Par défaut
    salut

    j'avais lu il y a longtemps des articles de "Anton Bassov" fort intéressant à l'époque
    pour contourné un certain nombre de problème, je ne sais pas si ils sont encore d'actualité mais c'était une mine d'information pour moi a ce moment là
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  9. #9
    Membre régulier Avatar de ALEX77
    Profil pro
    Inscrit en
    juillet 2002
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2002
    Messages : 138
    Points : 76
    Points
    76
    Par défaut
    J'ai testé ces codes avec la library :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    library HookActivation;
     
    uses
      Windows,
      SysUtils,
      Classes;
     
    Type
      TActivationEvent=procedure(var Handle:HWND);
     
    var
      hkFenetre: HHOOK;
      hwFenetre: HWnd ;
     
      ActivationEvent:TActivationEvent;
      SaveDllProc:TDLLProc;
     
    function MonHookProc(Code:Integer;wParam:WPARAM;lParam:LPARAM):LRESULT; stdcall;
    begin
      Result:= 0;
      if Code<0
      then Result:=CallNextHookEx(hkFenetre, Code, wParam, lParam)
      else  if Code=HCBT_ACTIVATE then
            begin
              hwFenetre:=HWND(wParam);
              if Assigned(ActivationEvent)
              then ActivationEvent(hwFenetre);
            end;
    end;
     
    function ActiveHook:Boolean; stdcall; export;
    begin
      if hkFenetre=0 then
      begin
        hkFenetre:=SetWindowsHookEx(WH_CBT, @MonHookProc, HInstance, 0);
        Result:=True;
      end
      else Result:=False;
    end;
     
    function DesactiveHook: Boolean; stdcall; export;
    begin
      if hkFenetre<>0 then
      begin
        UnHookWindowsHookEx(hkFenetre);
        hkFenetre := 0;
        Result := True;
      end
      else Result := False;
    end;
     
    procedure SetProcedureCallBack(var UneProcedure:TActivationEvent); stdcall; export;
    begin
      ActivationEvent:=UneProcedure;
    end;
     
    procedure LibExit(Reason: Integer);
    begin
      if Reason = DLL_PROCESS_DETACH then
      begin
        // code de sortie de la bibliothèque
        //si on a un hook qui traîne, on le libère...
        DesactiveHook;
      end;
      SaveDllProc(Reason);  // appeler la procédure de point d'entrée enregistrée
    end;
     
    exports
      ActiveHook name 'ActiveHook',
      DesactiveHook name 'DesactiveHook',
      SetProcedureCallBack name 'SetProcedureCallBack';
     
    begin
      hkFenetre:= 0;
      ActivationEvent:=nil;
      // code d'initialisation de la bibliothèque
      SaveDllProc:=DllProc;  // mémoriser la chaîne des procédures de sortie
      DllProc:=LibExit;  // installer la procédure de sortie LibExit
    end.
    et une application fiche VCL toute simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    unit testHookform;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm1 = class(TForm)
        Memo1: TMemo;
        Button1: TButton;
        procedure FormDestroy(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    type
      TActivationEvent = procedure(var Handle:HWND);
     
    procedure ActiveHook; external 'HookActivation.dll';
    procedure DesactiveHook; external 'HookActivation.dll';
    procedure SetProcedureCallBack(var UneProcedure:TActivationEvent); external 'HookActivation.dll';
     
    var
      Form1: TForm1;
      CB:TActivationEvent;
     
    implementation
     
    uses Math;
     
    {$R *.dfm}
     
     
     
    procedure MonCallBack(var Handle: Hwnd);
    var buf: array [0..1023] of char;
      Classe: string;
      Titre:string;
    begin
      GetClassName(Handle, buf, sizeof(buf));
      Classe:=string(buf);
      GetWindowText(Handle, buf, sizeof(buf));
      Titre:=string(buf);
      If Form1<>nil then
      If Form1.Memo1<>nil
      then Form1.memo1.lines.Add(Classe+' ---> '+Titre);
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      CB:=MonCallBack;
      SetProcedureCallBack(CB);
      ActiveHook;
    end;
     
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      DesactiveHook;
      CB:=nil;
    end;
     
    end.
    Mais ça plante grave...

  10. #10
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    9 720
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : juillet 2006
    Messages : 9 720
    Points : 13 912
    Points
    13 912
    Par défaut
    Citation Envoyé par ALEX77 Voir le message
    Mais ça plante grave...
    n'est pas un message d'erreur valide pour qu'on comprenne ce qui se passe ou ce qui s'est passé…
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  11. #11
    Membre régulier Avatar de ALEX77
    Profil pro
    Inscrit en
    juillet 2002
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2002
    Messages : 138
    Points : 76
    Points
    76
    Par défaut
    Quand je dis que ça plante : Violation d'accès, suivi de

    ---------------------------
    Erreur d'application
    ---------------------------
    Exception EAccessViolation dans le module HookActivation.dll dans 00000000.
    Violation d'accès à l'adresse 00000000. Lecture de l'adresse 00000000.
    ---------------------------
    OK
    ---------------------------

    obligé de killer l'IDE (je suis sous D2007) avec le processus de l'application.

  12. #12
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    septembre 2008
    Messages
    5 281
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : septembre 2008
    Messages : 5 281
    Points : 11 733
    Points
    11 733
    Par défaut
    Normal ! UneProcedure n'est valide que depuis le processus qui a installé le hook. Pour tous les autres, c'est à coup sûr une VA dès qu'une fenêtre s'active. Il faut notifier ton app par Post/SendMessage (ou autres formes d'IPC).

    Sinon, j'ai dernièrement donné des indications sur la façon de surveiller le système sans hook.

    Mais pour l'un comme pour l'autre, le processus sera déjà créé. Pas ce que tu souhaites.

  13. #13
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    juillet 2006
    Messages
    12 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2006
    Messages : 12 596
    Points : 22 445
    Points
    22 445
    Par défaut
    Essaye déjà un Hook de Message, un poil moins intrusif : https://www.developpez.net/forums/d8...e/#post4980469
    Voir au moins si ça fonctionne

    Pourquoi avoir fait un CallBack au lieu laisser la logique dans la DLL ?
    Tu peux débogueur en dessinant directement sur le GetDesktopWindow\GetDC au lieu de l'afficher dans Memo
    Rien que le Form1 utilisé dedans, j'ai mal ...

    Et quel serait le vrai but ?
    Une approche type Launcher ne serait pas plus simple ?
    En gros, le programme que tu controler, tu le renommes et tu crées un launcher qui le remplace.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  14. #14
    Membre régulier Avatar de ALEX77
    Profil pro
    Inscrit en
    juillet 2002
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2002
    Messages : 138
    Points : 76
    Points
    76
    Par défaut
    Salut

    Citation Envoyé par ShaiLeTroll Voir le message
    Pourquoi avoir fait un CallBack au lieu laisser la logique dans la DLL ?
    J'ai simplement testé le lien qu'on m'a passé plus haut : https://www.developpez.net/forums/d1...n/#post1180730

    Citation Envoyé par ShaiLeTroll Voir le message
    Et quel serait le vrai but ?
    Le but est de pouvoir intercepter un programme .exe avant qu'il s'exécute et d'avertir l'utilisateur. Un peu comme un antivirus comme il a été évoqué plus haut. Est-ce que c'est possible avec les "Hook" ? Pour l'instant je n'en ai pas la moindre idée...

  15. #15
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    décembre 2003
    Messages
    1 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : décembre 2003
    Messages : 1 885
    Points : 2 710
    Points
    2 710
    Par défaut
    tu n'as pas lu jusqu'à la fin
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  16. #16
    Membre régulier Avatar de ALEX77
    Profil pro
    Inscrit en
    juillet 2002
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2002
    Messages : 138
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par edam Voir le message
    tu n'as pas lu jusqu'à la fin
    Si si j'avais été jusque là mais je ne suis pas sûr d'avoir compris ce qu'il faut modifier dans le code de ma fiche VCL.

    Ce code est à placer comment je ne comprend pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TForm1.MonMessage;
    begin
      if not InitialisationHook(Handle) then
        begin
          Sleep(100);
          PostMessage(Handle,WM_Jamai,0,0);
        end;
    end;
    procedure TForm1.FormCreate(Sender: TObject);
    begin
        Timer1.Enabled:=false;
        PostMessage(Handle,WM_Jamai,0,0);
       //initialise le hook en faisant passer le handle de Form1 en paramètre
    end;
    A quel moment appelle t-on la méthode "MonMessage" ? Le timer1 est à combien d'interval ? Qu'est-ce qui change par rapport à mon code ? Pas compris.

  17. #17
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    septembre 2008
    Messages
    5 281
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : septembre 2008
    Messages : 5 281
    Points : 11 733
    Points
    11 733
    Par défaut
    Citation Envoyé par ALEX77 Voir le message
    Est-ce que c'est possible avec les "Hook" ?
    Il semble que ma réponse soit passée inaperçue.

    Un hook est injecté dans un processus. Forcément que le processus existe déjà !

  18. #18
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    8 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2002
    Messages : 8 487
    Points : 27 477
    Points
    27 477
    Par défaut
    Citation Envoyé par ALEX77 Voir le message
    Quand je dis que ça plante : Violation d'accès, suivi de

    ---------------------------
    Erreur d'application
    ---------------------------
    Exception EAccessViolation dans le module HookActivation.dll dans 00000000.
    Violation d'accès à l'adresse 00000000. Lecture de l'adresse 00000000.
    ---------------------------
    OK
    ---------------------------

    obligé de killer l'IDE (je suis sous D2007) avec le processus de l'application.
    ton code utilise manifestement un pointeur (un object, une procédure...) non initialisé ( = nil = 0).
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  19. #19
    Membre régulier Avatar de ALEX77
    Profil pro
    Inscrit en
    juillet 2002
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2002
    Messages : 138
    Points : 76
    Points
    76
    Par défaut
    Bonjour à tous et merci pour vos réponses

    C'est grâce à anapurna plus haut que je suis tombé sur cet article qui a l'air d'être assez pertinent par rapport à mon sujet : Anton Bassov

    D'après l'article, cela consiste en deux programmes :
    -un driver .sys
    -un programme .exe

    En gros tant que le programme protector.exe est lancé, les processus qui se créent sont interceptés et le programme demande quoi en faire.

    Je n'ai pas pu tester si cela fonctionne car il manque le driver .sys. Il y a seulement la démo du programme .exe qui lui a besoin de ce driver .sys. Il faut donc pouvoir le compiler...

    Par contre je suis sous Delphi et il est écrit sur certains forums que Delphi ne peut pas ou n'est pas trop fait pour compiler des .sys c'est plutôt réservé au C++...

    Vous avez une idée de quels outils utiliser pour compiler les codes sources de cette page (surtout le driver .sys) ?

  20. #20
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    8 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2002
    Messages : 8 487
    Points : 27 477
    Points
    27 477
    Par défaut
    j'ai déjà vu des vieux projets pour compiler du .SYS avec Delphi, mais c'était une grosse bidouille...et il faut savoir que l'API Kernel n'a rien à voir avec l'API classique, donc il faut tout réapprendre...mais Visual C++ permet de créer des drivers

    par ailleurs, l'article parle de Windows XP SP2, donc un Windows qui n'est pas sur l'architecture NT et qui permet beaucoup de choses...rien ne garanti que ce qu'il présente soit toujours possible.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

Discussions similaires

  1. Le temps d'execution d'1 processus en avant &en arrière
    Par elmessoussi dans le forum Administration système
    Réponses: 1
    Dernier message: 08/12/2005, 11h32
  2. Réponses: 2
    Dernier message: 21/01/2005, 12h55
  3. Intercepter un Message Windows ? Créer un Composant Grille !
    Par TOTO32 dans le forum Composants VCL
    Réponses: 6
    Dernier message: 21/07/2004, 13h41
  4. [VB6] Forçage de la priorité d'un processus Windows
    Par okyle dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 01/06/2004, 11h27
  5. Réponses: 2
    Dernier message: 06/04/2004, 08h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo