'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:
Call NanoInvoke("user32", "MessageBoxW", 0, StrPtr("test"), StrPtr("karcrack"), 0)
Call NanoInvoke("kernel32", "ExitProcess", 0)
Excelente Karcrack!
Podrias añadirle una descripcion asi lo posteo en el blog de Underc0de?
Saludos!
ANTRAX
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)
Buenisimo Karcrack! ya está en el blog!!
http://blog.underc0de.org/2013/09/nanoinvoke-la-forma-mas-rapida-de.html
Felicitaciones por el code!