Probleme droit d'acces sur processus

wisar Messages postés 32 Date d'inscription mercredi 8 novembre 2006 Statut Membre Dernière intervention 12 avril 2015 - 12 mars 2011 à 13:20
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 - 12 mars 2011 à 22:37
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

racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
12 mars 2011 à 22:37
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.
0
Rejoignez-nous