Underc0de

Programación General => Visual Basic => Códigos Fuentes => Mensaje iniciado por: Karcrack en Septiembre 12, 2013, 11:05:30 PM

Título: NanoInvoke
Publicado por: Karcrack en Septiembre 12, 2013, 11:05:30 PM
Código (vb) [Seleccionar]
'USER32
Private Declare Function CallWindowProcW Lib "USER32" (ByRef first_asm As Currency, ByRef params() As Variant, ByVal lib As String, ByVal fnc As String, Optional ByVal null0 As Long = 0) As Long
'---------------------------------------------------------------------------------------
' Author : Karcrack
' Date   : 12092013
' Credits: sonykuccio (http://hackhound.org/forums/topic/2790-vb6asm-%C2%B5callapi/)
'---------------------------------------------------------------------------------------

Public Function NanoInvoke(ByRef sLib As String, ByRef sFnc As String, ParamArray params() As Variant) As Long
    Dim asm(11)     As Currency
    Dim p()         As Variant
   
    If UBound(params) >= 0 Then p = params

    asm(0) = -881438862054780.1504@: asm(1) = -140193315782017.312@: asm(2) = 93112413858165.2867@: asm(3) = 593189448021741.0902@
    asm(4) = 843045704464075.3748@: asm(5) = -4834317066834.7356@: asm(6) = 260429944098681.7488@: asm(7) = 537140947255014.6699@
    asm(8) = 7683543183094.8624@: asm(9) = 598313605633923.5838@: asm(10) = -200740417519275.4208@: asm(11) = 109.8337@

    NanoInvoke = CallWindowProcW(asm(0), p, sLib, sFnc)
End Function
' ASM Code: pastebin.com/5gnLv7xn


Un pequeño reto que surgió en HackHound :P

Ejemplo de uso:
Código (vb) [Seleccionar]
    Call NanoInvoke("user32", "MessageBoxW", 0, StrPtr("test"), StrPtr("karcrack"), 0)
    Call NanoInvoke("kernel32", "ExitProcess", 0)
Título: Re:NanoInvoke
Publicado por: ANTRAX en Septiembre 12, 2013, 11:35:15 PM
Excelente Karcrack!
Podrias añadirle una descripcion asi lo posteo en el blog de Underc0de?

Saludos!
ANTRAX
Título: Re:NanoInvoke
Publicado por: Karcrack en Septiembre 13, 2013, 12:22:43 AM
Es la forma más corta que llamar a un API de forma dinámica que encontrarás :P

La shellcode de unos 90bytes se encarga de recorrer el SAFEARRAY de VARIANTs metiendo en el stack los parámetros para el API. Además busca en la IAT del proceso la importación de DllFunctionCall() para obtener el puntero del API. (http://pastebin.com/5gnLv7xn)
Título: Re:NanoInvoke
Publicado por: ANTRAX en Septiembre 13, 2013, 10:38:02 AM
Buenisimo Karcrack! ya está en el blog!!
http://blog.underc0de.org/2013/09/nanoinvoke-la-forma-mas-rapida-de.html

Felicitaciones por el code!