Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - MeCraniDOS

#111
Cita de: Eleкtro en 25 Febrero 2014, 06:39 AM
Si devuelve Falso es porque no eres Admin, quizás sólamente eres usuario con privilegios elevados, pero no Administrador.

PD: Yo uso Windows 8.

Saludos

Estoy probando tu script, y ejecutandolo en Windows XP, desde la cuenta de administrador me devuelve Falso...  :-\

Cita de: mDrinky en 25 Febrero 2014, 09:56 AM
La función IsUserAnAdmin solo funciona desde XP a vista. Te recomiendo que uses CheckTokenMembership, que funciona desde XP hasta 8.

He encontrado esta función, pero veo mucho código y no se muy bien que es lo que hace la función en sí  (Utiliza la función que me has dicho) :rolleyes:

Código (vbnet) [Seleccionar]
Option Explicit

Private Const TOKEN_DUPLICATE = &H2&
Private Const TOKEN_QUERY = &H8&
Private Const ERROR_NO_TOKEN = 1008

Private Const SECURITY_BUILTIN_DOMAIN_RID = &H20&
Private Const DOMAIN_ALIAS_RID_ADMINS = &H220&
Private Const SECURITY_NT_AUTHORITY = &H5&

Private Type SID_IDENTIFIER_AUTHORITY
Value(6) As Byte
End Type

Private Enum SECURITY_IMPERSONATION_LEVEL
SecurityAnonymous
SecurityIdentification
SecurityImpersonation
SecurityDelegation
End Enum

Private Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, ByRef TokenHandle As Long) As Long
Private Declare Function OpenThreadToken Lib "advapi32" (ByVal ThreadHandle As Long, ByVal DesiredAccess As Long, ByVal OpenAsSelf As Long, ByRef TokenHandle As Long) As Long
Private Declare Function AllocateAndInitializeSid Lib "advapi32" (ByRef pIdentifierAuthority As SID_IDENTIFIER_AUTHORITY, ByVal nSubAuthorityCount As Byte, ByVal nSubAuthority0 As Long, ByVal nSubAuthority1 As Long, ByVal nSubAuthority2 As Long, ByVal nSubAuthority3 As Long, ByVal nSubAuthority4 As Long, ByVal nSubAuthority5 As Long, ByVal nSubAuthority6 As Long, ByVal nSubAuthority7 As Long, ByRef lpPSid As Long) As Long
Private Declare Function CheckTokenMembership Lib "advapi32" (ByVal TokenHandle As Long, ByVal SidToCheck As Long, ByRef IsMember As Long) As Long
Private Declare Function DuplicateToken Lib "advapi32" (ByVal ExistingTokenHandle As Long, ByVal ImpersonationLevel As Long, ByRef DuplicateTokenHandle As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function GetCurrentThread Lib "kernel32" () As Long
Private Declare Sub FreeSid Lib "advapi32.dll" (ByVal pSid As Long)

Public Function IsInRoleAdmin() As Boolean

    Dim NtAuthority As SID_IDENTIFIER_AUTHORITY
    Dim AdminGroup As Long
    Dim Success As Long
    Dim hToken As Long
    Dim hTokenDup As Long

    If OpenThreadToken(GetCurrentThread, TOKEN_DUPLICATE Or TOKEN_QUERY, True, hToken) = 0 Then
        OpenProcessToken GetCurrentProcess, TOKEN_DUPLICATE Or TOKEN_QUERY, hToken
    End If
   
    If DuplicateToken(hToken, SecurityImpersonation, hTokenDup) Then
        ' Well-known SIDs
        NtAuthority.Value(5) = SECURITY_NT_AUTHORITY
        ' allocates and initializes a security identifier (SID)
        Success = AllocateAndInitializeSid(NtAuthority, 2, _
            SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, AdminGroup)
        If Success Then
            If CheckTokenMembership(hTokenDup, AdminGroup, Success) = 0 Then
                Success = 0
            End If
        FreeSid AdminGroup
        End If
    End If
   
    IsInRoleAdmin = Success
   
    CloseHandle hToken
    CloseHandle hTokenDup
   
End Function


Es decir, por ejemplo este trozo:

Código (vbnet) [Seleccionar]
Private Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, ByRef TokenHandle As Long) As Long
Private Declare Function OpenThreadToken Lib "advapi32" (ByVal ThreadHandle As Long, ByVal DesiredAccess As Long, ByVal OpenAsSelf As Long, ByRef TokenHandle As Long) As Long
Private Declare Function AllocateAndInitializeSid Lib "advapi32" (ByRef pIdentifierAuthority As SID_IDENTIFIER_AUTHORITY, ByVal nSubAuthorityCount As Byte, ByVal nSubAuthority0 As Long, ByVal nSubAuthority1 As Long, ByVal nSubAuthority2 As Long, ByVal nSubAuthority3 As Long, ByVal nSubAuthority4 As Long, ByVal nSubAuthority5 As Long, ByVal nSubAuthority6 As Long, ByVal nSubAuthority7 As Long, ByRef lpPSid As Long) As Long
Private Declare Function CheckTokenMembership Lib "advapi32" (ByVal TokenHandle As Long, ByVal SidToCheck As Long, ByRef IsMember As Long) As Long
Private Declare Function DuplicateToken Lib "advapi32" (ByVal ExistingTokenHandle As Long, ByVal ImpersonationLevel As Long, ByRef DuplicateTokenHandle As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function GetCurrentThread Lib "kernel32" () As Long


Para que necesita esas declaraciones? OpenProccess, OpenThread...  :huh:

Saludos
#112
Cita de: Vaagish en 24 Febrero 2014, 04:44 AM
Quizás un libro le ayude mas... no sabe que es C++  :silbar:

Quizás  :laugh:
#113
En Windows 8 siempre devuelve Falso..  :rolleyes:

Muchas gracias por la info y por el ejemplo en vbs, investigaré el método y te digo que tal  ;D

Saludos
#114
Hola a todos,

Estoy intentando saber si eres administrador desde vbs, he publicado este post en Visual Basic, con unos trozos de código, pero quizas con vbs es más fácil, a ver si me pueden dar ideas...  :huh: :huh:

Visual Basic: http://foro.elhacker.net/programacion_visual_basic/saber_si_eres_administrador_vb6-t409096.0.html

Saludos
#115
Cita de: pancracio1 en 20 Febrero 2014, 14:28 PM
0x0058477

#include <windows.h>
#include <stdio.h>

int main()
{

   DWORD hPid;
   HWND hVentana;
   HANDLE hProcess;

   DWORD Buffer;
   DWORD BytesT;

   float Valor= 1000;

   if (!(hVentana = FindWindow(NULL,"Nombre_de_la_ventana")))
   {
MessageBox(NULL,"No se pudo encontrar la ventana","Error",MB_OK);
       return -1;
   }
   if (!(GetWindowThreadProcessId(hVentana,&hPid)))
   {
       MessageBox(NULL,"No se pudo encontrar el ID del proceso","Error",MB_OK);
       return -1;
   }
   if (!(hProcess=OpenProcess(PROCESS_ALL_ACCESS,false,hPid)))
   {
       MessageBox(NULL,"No se pudo obtener el handle del proceso","Error",MB_OK);
       return -1;
   }
   if (!(ReadProcessMemory(hProcess,(LPCVOID)0x0058477,&Buffer,sizeof(Buffer),&BytesT)))
   {
       MessageBox(NULL,"No se pudo leer la direccion de memoria","Error",MB_OK);
       return -1;
   }

   Valor = Buffer + Valor;

   if (!(WriteProcessMemory(hProcess,(LPVOID)0x0058477,&Valor,sizeof(Valor),&BytesT)))
   {
       MessageBox(NULL,"No se pudo escribir la direccion de memoria","Error",MB_OK);
       return -1;
   }

   CloseHandle(hProcess);

}


El código está en C, lo unico que hace es buscar el nombre de la ventana, encontrar el PID, leer la posicion de memoria que tu pones, y sumar 1000 a ese valor que esta en la posicion de memoria, y luego escribes en ella

Quizás este código te ayuda

Saludos
#116
Cita de: xaps en 21 Febrero 2014, 00:22 AM
Si lo has compilado en un sistema 32bits te agradeceria que me enviaras un enlace con el archivo, ya que me gustaria analizarlo con Ollydbg.

https://mega.co.nz/#!IR80GTzR!4w1tzCiYBuXj94xw8rCNU-RN0g7xCtcYpJtSd8W9y4c

Saludos  ;)
#117
Cita de: xaps en 20 Febrero 2014, 09:15 AM
Paga.

Hahaha como os pasais  :laugh:

¿Que necesitas exactamente? Es que solo has pedido códigos sin decir que quieres que hagan...  :¬¬

Saludos
#118
Cita de: xaps en 19 Febrero 2014, 11:09 AM
Os adjunto el código por si alguien se anima a intentar compilarlo bajo un sistema de 32 bits y a ver si alguien se le ocurre que puede estar pasando.

A mi me compila perfecto con Code::Blocks  :rolleyes:

Windows XP x86




Saludos  :silbar:
#119
Buenas!  ;D

He estado buscando como saber si eres administrador o no con vb6, he encontrado estas dos funciones, y en Windows XP, funcionan perfectas, pero en Windows 8 siempre me devuelve false  :-[

(En Windows 7 y Windows Vista no lo he probado)


Código (vbnet) [Seleccionar]
Option Explicit 
 
' constantes 
'''''''''''''''''''''''''''''' 
 
'Constantes para usar con OpenSCManager 
Private Const GENERIC_READ = &H80000000 
Private Const GENERIC_WRITE = &H40000000 
Private Const GENERIC_EXECUTE = &H20000000 
 
' declaraciones Api 
'''''''''''''''''''''''''''''' 
 
'Función Api OpenSCManager 
Private Declare Function OpenSCManager Lib "advapi32.dll" Alias "OpenSCManagerA" ( _ 
    ByVal lpMachineName As String, _ 
    ByVal lpDatabaseName As String, _ 
    ByVal dwDesiredAccess As Long) As Long 
 
'Función Api CloseServiceHandle 
Private Declare Function CloseServiceHandle Lib "advapi32.dll" ( _ 
    ByVal hSCObject As Long) As Long 
 
Private Sub Form_Load() 
Dim Admin As Long 
 
    Admin = OpenSCManager(vbNullString, _ 
                               vbNullString, _ 
                               GENERIC_READ Or GENERIC_WRITE Or GENERIC_EXECUTE) 
 
    'Si la función retorna 0 no es Administrador 
    If Admin = 0 Then 
        MsgBox "No es un Administrador", vbInformation 
    Else 
        CloseServiceHandle Admin 
        MsgBox "Es un administrador", vbInformation 
    End If 
 
End Sub


Código (vbnet) [Seleccionar]
Option Explicit 
 
 
'Función Api IsNTAdmin 
Private Declare Function IsNTAdmin Lib "advpack.dll" ( _ 
    ByVal dwReserved As Long, _ 
    ByRef lpdwReserved As Long) As Long 
 
Private Sub Form_Load() 
    MsgBox "Administrador de este equipo: ? " & _ 
            CBool(IsNTAdmin(ByVal 0&, ByVal 0&)), vbInformation 
End Sub


Se puede mirar de otra manera? Es decir, alguna clave en el registro o con alguna otra funcion?  :-\ :-\

Espero que puedan ayudarme  :(

Saludos
#120
Cita de: amchacon en 19 Enero 2014, 15:52 PM
Pues esa no era la solución xD.

El código original funciona perfectamente, lo que pasa esque el último elemento es el caracter nulo. Por eso te sale -48.

En un principio habia pensado lo del caracter nulo, pero al pasarlo por el debugger tampoco me ponia el '\0', asi que lo he descartado  :-[

De todas formas ya he modificado un par de cosas y funciona bien  :laugh:

Gracias  ;-)