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

Windows Discussion :

Execution controler d'un processus


Sujet :

Windows

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    915
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 915
    Points : 85
    Points
    85
    Par défaut Execution controler d'un processus
    Bonjour,

    J'ai un processus "server" ,executant par Createprocess, le processus client.
    Ca marche ;

    Mais je voudrais que le processus client puisse detecter si il est executé par le processus "server" ;

    Quel méthode possible pour le détecter ?

    Merci ;

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Le serveur créé une socket sur un port donné

    Le client quand il est lancé se connecte sur ce socket donné et communique avec le serveur.

    S'il y a échec de la connexion, le serveur n'est pas lancé
    Si la communication est correcte, le serveur est lancé.

    C'est basique, cela ne protège pas de tout et il y a probablement d'autres moyens pour faire pareil

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 33
    Points : 48
    Points
    48
    Par défaut
    Bonjour,
    http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
    The CreateProcess function also returns an identifier that uniquely identifies the process throughout the system. A process can use the GetCurrentProcessId function to get its own process identifier (also known as the process ID or PID). The identifier is valid from the time the process is created until the process has been terminated. A process can use the Process32First function to obtain the process identifier of its parent process.
    Ca à l'air d'être une piste moins aléatoire ;-)

    edit: un petit code vite fait pouvant t'inspirer:
    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
    #undef UNICODE
    
    #include <stdio.h>
    #include <Windows.h>
    #include <TlHelp32.h>
    int main (int argc, char *argv[])
    {
    	DWORD myPid = GetCurrentProcessId();
    	HANDLE hsnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS,  0);
    	HANDLE hpProcess;
    	PROCESSENTRY32 pe = { 0 };
    	int found = 0;
        pe.dwSize = sizeof(PROCESSENTRY32);
        if( Process32First(hsnap, &pe))
    	{
        	do
    		{
        		if (pe.th32ProcessID == myPid)
    			{
        			printf("PID: %i; PPID: %i\n", myPid, pe.th32ParentProcessID);
    				found = !found;
        		}
        	} while(!found && Process32Next(hsnap, &pe));
    
    		if (found)
    		{
    			printf("parent pID : 0x%08X\n", pe.th32ParentProcessID);
    			if ( (hpProcess = OpenProcess( PROCESS_QUERY_LIMITED_INFORMATION | PROCESS_QUERY_INFORMATION, FALSE, pe.th32ParentProcessID ))==NULL)
    			{
    				printf("erreur: OpenProcess\n");
    			}
    			else
    			{
    				char parentname[MAX_PATH];
    				DWORD size = MAX_PATH;
    				if (QueryFullProcessImageName(  hpProcess,  0,  parentname,  &size)==0)
    					printf("erreur: QueryFullProcessImageName\n");
    				else
    					printf("chemin du parent: '%s' \n", parentname);
    
    				CloseHandle(hpProcess);
    			}
    		}
        }
    	else
    	{
    		printf("erreur: Process32First\n");
    	}
    
    	CloseHandle( hsnap );
    	printf ("appuyer sur ENTRER\n");
    	getchar();
    }
    (Il me semble avoir vu que rien que rien ne garantit que le pid parent soit encore valable au moment ou l'enfant vérifie)

  4. #4
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 226
    Points : 28 221
    Points
    28 221
    Par défaut
    Autre piste : le processus serveur lance le processus client en lui passant un argument (spécifique) dans la ligne de commande.
    LE processus client lisant cet argument (spécifique) sait qu'il est lancé par un serveur

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par sevyc64 Voir le message
    Autre piste : le processus serveur lance le processus client en lui passant un argument (spécifique) dans la ligne de commande.
    LE processus client lisant cet argument (spécifique) sait qu'il est lancé par un serveur
    Excellent, simple et facile

    Et même, le paramètre "spécifique" peut être le PID du parent (-parent_pid xxx par exemple) et ainsi le fils peut tester durant toute sa vie si son père est vivant.

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 33
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par sevyc64 Voir le message
    Autre piste : le processus serveur lance le processus client en lui passant un argument (spécifique) dans la ligne de commande.
    LE processus client lisant cet argument (spécifique) sait qu'il est lancé par un serveur
    Effectivement pas besoin de tout le temps sortir l'artillerie!
    Mais si c'est pour des raisons de sécurité que le client veux savoir qui le lance, il vaut mieux éviter cette méthode, car n'importe qui peut lancer un programme avec des arguments (d'ailleurs la ligne de commande utilisée pour lancer un programme est visible via le gestionnaire de tâches!)
    Donc bon, la solution idéale dépendra du contexte.

  7. #7
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 226
    Points : 28 221
    Points
    28 221
    Par défaut
    Petite précision : j'ai mis "spécifique" entre parenthèse car optionnel.

    La solution peut être simplement de passer un argument. La présence d'un argument, quel qu'il soit coté client, indique le lancement par un serveur. Mais cela peut avoir des effets de bords si le client est lancé avec argument mais hors serveur.
    monexe toto
    monexe bidule
    monexe vatefaire
    monexe ?

    La solution peut aussi être de passer un argument bien spécifique pour plus de sécurité. La présence de cet argument spécifique indique le lancement par un serveur, la présence d'autres arguments ne présume pas le lancement par un serveur. On peut, ici, imaginer plein de chose, un argument différent par type de serveur, par serveur, l'argument lui-même pouvant être l'identifiant du serveur comme indiqué au dessus.
    Et surtout cette solution, n'interdit pas l'utilisation d'arguments pour tout autres informations ou commandes à passer au client au lancement.
    monexe -serv:toto --> lancé par le serveur toto
    monexe -serv:pid --> lancé par le serveur d'id pid
    monexe -a delete --> commande Delete demandée, mais pas d'argument serv donc pas lancé par un serveur

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Controle d'un processus
    Par mad000 dans le forum Windows XP
    Réponses: 5
    Dernier message: 30/10/2008, 11h24
  2. Executer commande dans un processus fils !
    Par jérôme.D dans le forum POSIX
    Réponses: 6
    Dernier message: 23/11/2006, 22h14
  3. Contrôle d'exécution de processus
    Par TB38570 dans le forum Linux
    Réponses: 3
    Dernier message: 07/12/2004, 09h39

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