Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Karcrack en 30 Julio 2010, 16:19 pm



Título: [m][SNIPPET] IsUserAnAdmin?
Publicado por: Karcrack en 30 Julio 2010, 16:19 pm
Código
  1. 'ADVAPI32
  2. Private Declare Function CheckTokenMembership Lib "ADVAPI32" (ByVal TokenHandle As Long, ByVal pSidToCheck As Long, ByRef IsMember As Boolean) As Long
  3.  
  4. '---------------------------------------------------------------------------------------
  5. ' Procedure : IsUserAnAdmin
  6. ' Author    : Karcrack
  7. ' Date      : 300710
  8. ' Purpose   : Check wether the user is in the Administrator Group
  9. ' TestedOn  : Windows XP SP3
  10. '---------------------------------------------------------------------------------------
  11. '
  12. Private Function IsUserAnAdmin() As Boolean
  13.    Dim SID(1)  As Currency
  14.    'Hardcoded SID
  15.    SID(0) = 36028797018964.0193@: SID(1) = 233646220.9056@
  16.    Call CheckTokenMembership(0, VarPtr(SID(0)), IsUserAnAdmin)
  17. 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:
Código:
http://cobein.com/wp/?p=559

Saludos :D


Título: Re: [m][SNIPPET] IsUserAnAdmin?
Publicado por: Psyke1 en 30 Julio 2010, 16:31 pm
Si me funciona¡! :D
Tengo Win XP...
Muy buena Kar! :-* :laugh:
Aunque no entiendo esto  :-[ :
Citar
Código
  1.    'Hardcoded SID
  2.    SID(0) = 36028797018964.0193@: SID(1) = 233646220.9056@
Me podrias explicar un poco¿?  :huh:

DoEvents¡! :P


Título: Re: [m][SNIPPET] IsUserAnAdmin?
Publicado por: Karcrack en 30 Julio 2010, 16:40 pm
Claro, con mucho gusto :D

Primero, Que es un SID?
Código:
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 ;)


Título: Re: [m][SNIPPET] IsUserAnAdmin?
Publicado por: raul338 en 30 Julio 2010, 16:42 pm
Aunque no entiendo esto  :-[ :
Citar
Código
  1.    'Hardcoded SID
  2.    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.
:¬¬


Título: Re: [m][SNIPPET] IsUserAnAdmin?
Publicado por: Psyke1 en 30 Julio 2010, 16:44 pm
Claro, con mucho gusto :D

Primero, Que es un SID?
Código:
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


Título: Re: [m][SNIPPET] IsUserAnAdmin?
Publicado por: Karcrack en 30 Julio 2010, 17:38 pm
Ya ha sido probado en W$ 7 x86/x64

Resultado: Va de lujo :P