Probleme droit d'acces sur processus

Signaler
Messages postés
32
Date d'inscription
mercredi 8 novembre 2006
Statut
Membre
Dernière intervention
12 avril 2015
-
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
-
bonjours

voila je suis en train de programmer une petite application sur l'injection de dll.
Hors j'ai remarqué que j'ai un problème de droit d'accès sur les processus système malgré une élévation du privilège en DEBUG.
D'après mes souvenirs je n'avais aucun soucis avec mon ancien pc mais qui était en win XP.
J'ai donc créer un petit bout de code pour vérifier accessibilité de tout mes processus en cours,voila le bout de code:

#include <windows.h>
#include 
#include <tlhelp32.h>
HANDLE process;



BOOL SetDebugPrivileges(VOID)
{

    DWORD dwPID;
    HANDLE hProcess;
    HANDLE hToken;
    LUID Luid;
    TOKEN_PRIVILEGES tpDebug;
    dwPID = GetCurrentProcessId();
    if ((hProcess OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID)) NULL) return FALSE;
    if (OpenProcessToken(hProcess, TOKEN_ALL_ACCESS, &hToken) == 0) return FALSE;
    if ((LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &Luid)) == 0) return FALSE;
    tpDebug.PrivilegeCount = 1;
    tpDebug.Privileges[0].Luid = Luid;
    tpDebug.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    if ((AdjustTokenPrivileges(hToken, FALSE, &tpDebug, sizeof(tpDebug), NULL, NULL)) == 0) return FALSE;
    if (GetLastError() != ERROR_SUCCESS) return FALSE;
    CloseHandle(hToken);
    CloseHandle(hProcess);
    return TRUE;
}




int main()
{
    HANDLE SnapShot;
    PROCESSENTRY32 Process;
    int Ok=0;
    int Echec=0;
    bool I;

    if (SetDebugPrivileges)
    {
        printf("Elevation privilege ok\n\n");
    }
    else
    {
        printf("Elevation privilege erreur\n");
    }


    SnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
    Process.dwSize = (DWORD) sizeof(PROCESSENTRY32);

    I = Process32First(SnapShot, &Process);
    do 
    {
        printf("%s:",Process.szExeFile );
        process=OpenProcess(PROCESS_ALL_ACCESS,false,(DWORD)Process.th32ProcessID );
        if (process!=NULL)
        {
            printf("\tOK\n");
            Ok++;
        }
        else
        {
            printf("\tECHEC\n");
            Echec++;
        }


        I = Process32Next(SnapShot, &Process);
    }
    while ( I );

    CloseHandle(SnapShot);
    printf("Nombre de processus exploitable:%d\n",Ok);
    printf("Nombre de processus avec acces refuser: %d\n",Echec);
    system("pause");
    return 0;
}

Avec se bout de code, il n'y a aucune différence de résultat avec l'élévation de privilège ou sans donc se qui me fait penser a une erreur dans la fonction SetDebugPrivilege malgré que celle si me revoie true.
Ma question est la suivante es que quelqu'un sait si le niveau de sécurité des processus system tel que csrss.exe ont été augmenter depuis vista ou seven par rapport a windows xp
ou es qu'il y a une erreur dans mon code.

merci d'avance pour vos reponce.
bonne journée a tous

1 réponse

Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Salut,
Je pense que tu as besoin d'inclure le manifest permettant d'élever les privilèges de ton exécutable sous Vista/7. La boite UAC apparaitra et en cliquant sur "Oui" ton exécutable obtiendra les privilèges requis. Il ne s'agit pas d'ajouter du code mais plutot d'inclure un fichier XML dont le contenu est bien défini en tant que ressource à ton exécutable. Si tu n'arrives pas à trouver d'exemple sur le net, je pourrais faire un petit code source et le déposer sur le site demain.