|
FONCTION
EstAdministrateur
()
HEAP_ZERO_MEMORY
est un entier=
0x00000008
ghProcessHeap
est un entier système =
AppelDLL32
(
"kernel32"
,
"GetProcessHeap"
)
gsMessageErreur
est une chaîne =
""
b
Admin
est un booléen =
Faux
// Message d'erreur éventuel
gsMessageErreur
=
""
SI PAS (
SysVersionWindows
(
sysVersionPlateForme
)=
"NT"
) ALORS
gsMessageErreur
=
"Le système n'est pas Windows..."
RENVOYER
b
Admin
FIN
// Ouverture du process
PROCESS_QUERY_INFORMATION
est un entier =
0x400
dwProcessId
est un entier système =
AppelDLL32
(
"kernel32"
,
"GetCurrentProcessId"
)
hProcess
est un entier système =
AppelDLL32
(
"kernel32"
,
"OpenProcess"
,
PROCESS_QUERY_INFORMATION
,
0
,
dwProcessId
)
// Ouverture du token du process
HToken
est un entier système
TOKEN_QUERY
est un entier système =
0x0008
b
Res
est un booléen =
AppelDLL32
(
"advapi32"
,
"OpenProcessToken"
,
hProcess
,
TOKEN_QUERY
,&
HToken
)
// Demande de la taille des infos de groupe
DwTailleGroups
est un entier système =
0
AppelDLL32
(
"advapi32"
,
"GetTokenInformation"
,
HToken
,
2
,Null,
0
,&
DwTailleGroups
)
// Allocation de la structure
pBuffer
est un entier système =
AppelDLL32
(
"kernel32"
,
"HeapAlloc"
,
ghProcessHeap
,
HEAP_ZERO_MEMORY
,
DwTailleGroups
+
16
)
// Récup de la liste des groupes
AppelDLL32
(
"advapi32"
,
"GetTokenInformation"
,
HToken
,
2
,
pBuffer
,
DwTailleGroups
,
DwTailleGroups
)
// Conversion du buffer "raw" en une structure
n
NbGroupes
est un entier système
Transfert
(&
n
NbGroupes
,
pBuffer
,
4
)
SID_AND_ATTRIBUTES
est une structure
pSID
est un entier système
dwAttribut
est un entier système
FIN
n
TailleAlloc
est un entier =
n
NbGroupes
+
1
tabInfoGroupe
est un tableau dynamique = allouer un tableau de
n
TailleAlloc
SID_AND_ATTRIBUTES
Transfert
(&
tabInfoGroupe
,
pBuffer
+
4
,
n
NbGroupes
*
8
)
//On récupère le SID administrateur
SIDAdmin
est composée de
byRev
est un entier sur
1
octet
bySubCount
est un entier sur
1
octet
byAuth1
est un entier sur
1
octet
byAuth2
est un entier sur
1
octet
byAuth3
est un entier sur
1
octet
byAuth4
est un entier sur
1
octet
byAuth5
est un entier sur
1
octet
byAuth6
est un entier sur
1
octet
dwFirstSubAuth
est un entier sur
4
octets
dwSecondSubAuth
est un entier sur
4
octets
FIN
SIDAdmin
.
byRev
=
1
SIDAdmin
.
bySubCount
=
2
SIDAdmin
.
byAuth1
=
0
SIDAdmin
.
byAuth2
=
0
SIDAdmin
.
byAuth3
=
0
SIDAdmin
.
byAuth4
=
0
SIDAdmin
.
byAuth5
=
0
SIDAdmin
.
byAuth6
=
5
SIDAdmin
.
dwFirstSubAuth
=
32
SIDAdmin
.
dwsecondSubAuth
=
544
n
SIDAdmin
est un entier système = &
SIDAdmin
SI
n
SIDAdmin
<>
0
ALORS
// Parcours de la liste des groupes
s
ListeGroupes
est une chaîne =
""
dwGroup
est un entier
n
SID1
est un entier système
POUR
dwGroup
=
1
A
n
NbGroupes
n
SID1
=
tabInfoGroupe
[
dwGroup
]:
pSID
SI
AppelDLL32
(
"advapi32"
,
"EqualSid"
,
n
SID1
,
n
SIDAdmin
) ALORS
b
Admin
=
Vrai
FIN
FIN
SINON
b
Admin
=
Faux
FIN
AppelDLL32
(
"kernel32"
,
"HeapFree"
,
ghProcessHeap
,
0
,
pBuffer
)
pBuffer
= Null
RENVOYER
b
Admin
| |
|