elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Llamar a api sin declararlas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Llamar a api sin declararlas  (Leído 3,094 veces)
fary


Desconectado Desconectado

Mensajes: 1.084



Ver Perfil WWW
Llamar a api sin declararlas
« en: 4 Agosto 2010, 21:48 pm »

Bueno esto puede servir para esquivar algunos av, no es un codigo tan avanzado como los de Karcrack ni tan dificil peeeeero funciona perfectamente ;)

Vamos a hacer un simple MessageBox, Código:

Código
  1. Option Explicit
  2.  
  3. Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
  4. Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
  5. Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
  6. Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Any, ByVal wParam As Any, ByVal lParam As Any) As Long
  7.  
  8. Private Const MB_ICONEXCLAMATION = &H30&
  9.  
  10. Private Sub Form_Load()
  11.    Dim id As Long
  12.    Dim direccion As Long
  13.  
  14.    id = LoadLibrary("user32") 'Cargamos la libreria
  15.    direccion = GetProcAddress(id, "MessageBoxA") 'obtenemos la direccion em memoria
  16.  
  17.    CallWindowProc direccion, Me.hWnd, "cuerpo", "Titulo", MB_ICONEXCLAMATION ' llamamos a la funcion
  18.  
  19.    FreeLibrary id ' liberamos la dll
  20. End Sub
  21.  

Bueno el code esta explicado pero si tienen alguna duda solo pregunten, si quisieramos  utilizar una api con mas parametros tendriamos que usar un array :).

salu2! y espero que les sea de ayuda!


En línea

Un byte a la izquierda.
Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: Llamar a api sin declararlas
« Respuesta #1 en: 5 Agosto 2010, 17:21 pm »

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:


En línea

fary


Desconectado Desconectado

Mensajes: 1.084



Ver Perfil WWW
Re: Llamar a api sin declararlas
« Respuesta #2 en: 5 Agosto 2010, 18:26 pm »

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:

Si que explota... jajaja  ;D

Lo de usar api con mas parametros lo vi en algun lado, voy a buscarlo y aora pongo el ejemplo.

salu2!
En línea

Un byte a la izquierda.
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Llamar a api sin declararlas
« Respuesta #3 en: 5 Agosto 2010, 18:29 pm »

.
Call API By Name Usin vtable Patch

Dulces Lunas!¡.
« Última modificación: 5 Agosto 2010, 18:32 pm por BlackZeroX » En línea

The Dark Shadow is my passion.
Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: Llamar a api sin declararlas
« Respuesta #4 en: 5 Agosto 2010, 19:23 pm »

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..
En línea

fary


Desconectado Desconectado

Mensajes: 1.084



Ver Perfil WWW
Re: Llamar a api sin declararlas
« Respuesta #5 en: 5 Agosto 2010, 19:28 pm »

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

um... puede ser  :-\
En línea

Un byte a la izquierda.
Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: Llamar a api sin declararlas
« Respuesta #6 en: 5 Agosto 2010, 19:37 pm »

Creo que con este codigo lo veras mas claro:

Este es el ejemplo que te dije :xD
Código
  1. Option Explicit
  2. 'KERNEL32
  3. Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
  4. 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
  5.  
  6. Public Function Invoke(ByVal lpCode As Long, ParamArray vParams() As Variant) As Long
  7.    Dim i           As Long
  8.    Dim lPtr        As Long
  9.    Dim bvASM(&HFF) As Long
  10.  
  11.    lPtr = VarPtr(bvASM(&H0))
  12.  
  13.    Call AddByte(&H58, lPtr)                    '//POP EAX
  14.    Call AddLong(&H59595959, lPtr)              '//POP ECX (x4)
  15.    Call AddByte(&H50, lPtr)                    '//PUSH EAX
  16.  
  17.    For i = UBound(vParams) To LBound(vParams) Step -1
  18.        Call AddByte(&H68, lPtr)                '//PUSH ________
  19.        Call AddLong(CLng(vParams(i)), lPtr)    '//____ XXXXXXXX
  20.    Next i
  21.  
  22.    Call AddCall(lpCode, lPtr)                  '//CALL lpCode
  23.    Call AddByte(&HC3, lPtr)                    '//RET
  24.    Invoke = CallWindowProc(VarPtr(bvASM(&H0)), ByVal 0&, ByVal 0&, ByVal 0&, ByVal 0&)
  25. End Function
  26.  
  27. Private Sub AddCall(ByVal lpPtrCall As Long, ByRef lPtr As Long)
  28.    Call AddByte(&HE8, lPtr)                    '//CALL ________
  29.    Call AddLong(lpPtrCall - lPtr - 4, lPtr)    '//____ XXXXXXXX
  30. End Sub
  31.  
  32. Private Sub AddLong(ByVal lLong As Long, ByRef lPtr As Long)
  33.    Call CopyMemory(ByVal lPtr&, lLong, &H4)
  34.    lPtr = lPtr + &H4
  35. End Sub
  36.  
  37. Private Sub AddByte(ByVal bByte As Byte, ByRef lPtr As Long)
  38.    Call CopyMemory(ByVal lPtr&, bByte, &H1)
  39.    lPtr = lPtr + &H1
  40. End Sub

Ejemplo de uso:
Código
  1. Private Declare Function LoadLibrary Lib "kernel32.dll" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
  2. Private Declare Function GetProcAddress Lib "kernel32.dll" (ByVal hModule As Long, ByVal lpProcName As String) As Long
  3.  
  4. Private Sub Form_Load()
  5.    Dim hMod    As Long
  6.  
  7.    hMod = GetProcAddress(LoadLibrary("KERNEL32"), "Beep")
  8.    Call Invoke(hMod, 200, 500)
  9. End Sub


Tienes el codigo en ASM comentado al lado de cada linea ;)
En línea

fary


Desconectado Desconectado

Mensajes: 1.084



Ver Perfil WWW
Re: Llamar a api sin declararlas
« Respuesta #7 en: 5 Agosto 2010, 19:49 pm »

jojojojojo esto si que es interezante  :o
En línea

Un byte a la izquierda.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[ASM+VB6][INVOKE] Llamas APIs sin declararlas - kInvoke.bas « 1 2 3 »
Programación Visual Basic
Karcrack 26 21,372 Último mensaje 2 Noviembre 2011, 20:03 pm
por Karcrack
[VB6-SRC] mZombieInvoke - Llama APIs sin declararlas « 1 2 »
Programación Visual Basic
Karcrack 11 8,728 Último mensaje 14 Agosto 2010, 21:14 pm
por wh0!
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines