Título: NanoInvoke
Publicado por: Karcrack en 13 Septiembre 2013, 04:05 am
'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)
Título: Re: NanoInvoke
Publicado por: 79137913 en 13 Septiembre 2013, 15:42 pm
HOLA!!!
Magnifico :D
Funciona en x64?
GRACIAS POR LEER!!!
Título: Re: NanoInvoke
Publicado por: MCKSys Argentina en 13 Septiembre 2013, 19:35 pm
No quiero ser pesimista pues el código está genial, pero esto no crashea si hay DEP?
Título: Re: NanoInvoke
Publicado por: Karcrack en 14 Septiembre 2013, 17:24 pm
Funciona perfectamente en x64, de hecho lo he programado en Win8 x64.
Respecto al DEP, claro, si está activado no funciona. Aunque debería de estar forzado en todos los procesos y al menos por defecto no es así. De todas formas siempre puedes hacer /NXCOMPAT:NO para decirle a Windows que necesitas ejecutar código en secciones de datos ;D
Igualmente este código fallaría con un ejecutable compilado con diferente base address o tamaño de sección. Si miráis el código ASM podéis ver que el puntero a la IAT está hardcodeado.
|