[m][SNIPPET] IsUserAnAdmin?

Iniciado por Karcrack, 30 Julio 2010, 16:19 PM

0 Miembros y 1 Visitante están viendo este tema.

Karcrack

Código (vb) [Seleccionar]
'ADVAPI32
Private Declare Function CheckTokenMembership Lib "ADVAPI32" (ByVal TokenHandle As Long, ByVal pSidToCheck As Long, ByRef IsMember As Boolean) As Long

'---------------------------------------------------------------------------------------
' Procedure : IsUserAnAdmin
' Author    : Karcrack
' Date      : 300710
' Purpose   : Check wether the user is in the Administrator Group
' TestedOn  : Windows XP SP3
'---------------------------------------------------------------------------------------
'
Private Function IsUserAnAdmin() As Boolean
   Dim SID(1)  As Currency
   'Hardcoded SID
   SID(0) = 36028797018964.0193@: SID(1) = 233646220.9056@
   Call CheckTokenMembership(0, VarPtr(SID(0)), IsUserAnAdmin)
End Function


Es un pequeño codigo minimalista (como a mi me gusta ::)) que reemplaza a la funcion IsUserAnAdmin@SHELL32, que es simplemente un wrapper a CheckTokenMembership@ADVAPI32

Como podeis comprobar el SID (Security IDentifier) esta hardcodeado... asi que me gustaria que lo probaseis en vuestros PCs, no deberia fallar, pero nunca se sabe :laugh:

Originalmente posteado en:
http://cobein.com/wp/?p=559

Saludos :D

Psyke1

#1
Si me funciona¡! :D
Tengo Win XP...
Muy buena Kar! :-* :laugh:
Aunque no entiendo esto  :-[ :
Citar
Código (vb) [Seleccionar]
   'Hardcoded SID
   SID(0) = 36028797018964.0193@: SID(1) = 233646220.9056@
Me podrias explicar un poco¿?  :huh:

DoEvents¡! :P

Karcrack

Claro, con mucho gusto :D

Primero, Que es un SID?
http://msdn.microsoft.com/en-us/library/aa379594(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa379597(VS.85).aspx

En este caso el SID que utilizamos es el de: "Esta en el grupo Administradores?" :xD

Para utilizar el API CheckTokenMembership has de preparar el SID con (por ejemplo) el API ConvertStringSidToSid, estas conversiones son siempre constantes, es decir, tu podrias establecer directamente la estructura sin valerte de estas API de ayuda, a pesar de que Windows no lo recomienda....

El tamaño de la estructura SID es variable, pero en este caso ocuparia 16bytes (Es decir 2x8) cada Currency ocupa 8 bytes, asi que lo que he hecho ha sido definir la estructura en Currencies en vez de con Bytes,Integers y Longs, que es como deberia estar... Al API le da igual como lo haga, porque accede exactamente igual a la informacion, simplemente lo hago para acortar :D

Espero haber sido claro, no se me da muy eso de redactar a mi :laugh: :laugh:

Saludos ;)

raul338

Cita de: *PsYkE1* en 30 Julio 2010, 16:31 PM
Aunque no entiendo esto  :-[ :
Citar
Código (vb) [Seleccionar]
   'Hardcoded SID
   SID(0) = 36028797018964.0193@: SID(1) = 233646220.9056@
Me podrias explicar un poco¿?  :huh:

Es la variable en memoria donde esta el flag si es admin o no?:..... .FAIL! :xD



Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.
:¬¬

Psyke1

Cita de: Karcrack en 30 Julio 2010, 16:40 PM
Claro, con mucho gusto :D

Primero, Que es un SID?
http://msdn.microsoft.com/en-us/library/aa379594(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa379597(VS.85).aspx

En este caso el SID que utilizamos es el de: "Esta en el grupo Administradores?" :xD

Para utilizar el API CheckTokenMembership has de preparar el SID con (por ejemplo) el API ConvertStringSidToSid, estas conversiones son siempre constantes, es decir, tu podrias establecer directamente la estructura sin valerte de estas API de ayuda, a pesar de que Windows no lo recomienda....

El tamaño de la estructura SID es variable, pero en este caso ocuparia 16bytes (Es decir 2x8) cada Currency ocupa 8 bytes, asi que lo que he hecho ha sido definir la estructura en Currencies en vez de con Bytes,Integers y Longs, que es como deberia estar... Al API le da igual como lo haga, porque accede exactamente igual a la informacion, simplemente lo hago para acortar :D

Espero haber sido claro, no se me da muy eso de redactar a mi :laugh: :laugh:

Saludos ;)
Gracias tio! ;-)
Lo voy a mirar! ;)

DoEvents¡!
:P

Karcrack

Ya ha sido probado en W$ 7 x86/x64

Resultado: Va de lujo :P