Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => Programación Visual Basic => Mensaje iniciado por: Karcrack en 13 Septiembre 2013, 04:05 AM

Título: NanoInvoke
Publicado por: Karcrack en 13 Septiembre 2013, 04:05 AM
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: 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.