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 - Karcrack

#861
Creo que con este codigo lo veras mas claro:


Cita de: Karcrack en  1 Febrero 2010, 17:31 PM
Este es el ejemplo que te dije :xD
Código (vb) [Seleccionar]
Option Explicit
'KERNEL32
Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
Private Declare Function CallWindowProc Lib "USER32" Alias "CallWindowProcW" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Public Function Invoke(ByVal lpCode As Long, ParamArray vParams() As Variant) As Long
    Dim i           As Long
    Dim lPtr        As Long
    Dim bvASM(&HFF) As Long
   
    lPtr = VarPtr(bvASM(&H0))
   
    Call AddByte(&H58, lPtr)                    '//POP EAX
    Call AddLong(&H59595959, lPtr)              '//POP ECX (x4)
    Call AddByte(&H50, lPtr)                    '//PUSH EAX
   
    For i = UBound(vParams) To LBound(vParams) Step -1
        Call AddByte(&H68, lPtr)                '//PUSH ________
        Call AddLong(CLng(vParams(i)), lPtr)    '//____ XXXXXXXX
    Next i
   
    Call AddCall(lpCode, lPtr)                  '//CALL lpCode
    Call AddByte(&HC3, lPtr)                    '//RET
    Invoke = CallWindowProc(VarPtr(bvASM(&H0)), ByVal 0&, ByVal 0&, ByVal 0&, ByVal 0&)
End Function

Private Sub AddCall(ByVal lpPtrCall As Long, ByRef lPtr As Long)
    Call AddByte(&HE8, lPtr)                    '//CALL ________
    Call AddLong(lpPtrCall - lPtr - 4, lPtr)    '//____ XXXXXXXX
End Sub

Private Sub AddLong(ByVal lLong As Long, ByRef lPtr As Long)
    Call CopyMemory(ByVal lPtr&, lLong, &H4)
    lPtr = lPtr + &H4
End Sub

Private Sub AddByte(ByVal bByte As Byte, ByRef lPtr As Long)
    Call CopyMemory(ByVal lPtr&, bByte, &H1)
    lPtr = lPtr + &H1
End Sub



Ejemplo de uso:
Código (vb) [Seleccionar]
Private Declare Function LoadLibrary Lib "kernel32.dll" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32.dll" (ByVal hModule As Long, ByVal lpProcName As String) As Long

Private Sub Form_Load()
    Dim hMod    As Long
   
    hMod = GetProcAddress(LoadLibrary("KERNEL32"), "Beep")
    Call Invoke(hMod, 200, 500)
End Sub




Tienes el codigo en ASM comentado al lado de cada linea ;)
#862
El tema esta en que si necesitas mas parametros no vas a poder pushearlos simplemente con un array, has de usar ASM para realizar la llamada..
#863
Con este codigo no puedes llamar a APIs con un numero de parametros diferentes a 4 :P

Intenta hacer sonar un Beep (API Beep@KERNEL32)... es muy probable que explote...

Explica eso de Array para hacer una llamada a URLDownloadToFile, por favor :rolleyes:
#864
Cita de: Debci en  1 Agosto 2010, 10:06 AM
Si no me equivoco se guarda en el registro  :rolleyes:
Depende de que versión hables... a partir de la 7 o asi se guardan en los credenciales de W$....
http://foro.elhacker.net/programacion_visual_basic/srcvb6_windows_live_messenger_recupera_contrasena_fuuuud-t299325.0.html;msg1484195
#865
No mas offtopic, a todos nos da igual las medidas de precaucion que tome RNA >:D :P
#866
Ya ha sido probado en W$ 7 x86/x64

Resultado: Va de lujo :P
#867
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 ;)
#868
No suelo quejarme demasiado( :rolleyes:) pero hace poco que estoy viendo usuarios con nicks que complican citarles... es decir que si le das a citar, su nick cierra los tags de BBCODE complicando la tarea de responderle o participar en el tema....

No quiero dar ejemplos, porque seria personalizar y no quiero mas enemigos >:D >:D :xD :silbar:

Saludos :D
#869
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
#870
Mas o menos, solo que el PUSH es para guardar en el Stack(Pila) un registro (en este caso ESI,EDI), luego con el POP se restaura...