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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  ASM + Visual Basic Duda Imprimir Numero
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: ASM + Visual Basic Duda Imprimir Numero  (Leído 6,916 veces)
Danyfirex


Desconectado Desconectado

Mensajes: 493


My Dear Mizuho


Ver Perfil
ASM + Visual Basic Duda Imprimir Numero
« en: 10 Octubre 2012, 19:01 pm »

Hola, bueno ando estudiado sobre todo esto de ASM inline.

y me gustaría saber como hago esta simple rutina d asm en vb.

Código
  1.  
  2.        B8                      mov eax, 00000080
  3.        C3                      ret
  4.  
  5.  

a lo que me refiero es a imprimir o mostrar en un msgbox un simple numero en este caso 128.



En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: ASM + Visual Basic Duda Imprimir Numero
« Respuesta #1 en: 10 Octubre 2012, 21:12 pm »

si ya tenes el metodo para ejecutar el asm inline, entonces podes tomar la direccion de msgbox y pasarla como parametro a tu funcion y pushear los parametros y llamar a esa funcion, acuerdate que si quieres mostrar un numero tendras que convertirlo a ANSI/UNICODE, esto no es: push number y call, tendras que almacenar el numero en un buffer y pasar la direccion del buffer, son cosas basicas


En línea

Danyfirex


Desconectado Desconectado

Mensajes: 493


My Dear Mizuho


Ver Perfil
Re: ASM + Visual Basic Duda Imprimir Numero
« Respuesta #2 en: 10 Octubre 2012, 22:31 pm »

a lo que me refiero es a hacer que callwindowproc me retorne un entero en este caso 128. pero realmente no tengo muy claro como asignar los Opcode para coger el puntero.
En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: ASM + Visual Basic Duda Imprimir Numero
« Respuesta #3 en: 10 Octubre 2012, 22:40 pm »

a lo que me refiero es a hacer que callwindowproc me retorne un entero en este caso 128. pero realmente no tengo muy claro como asignar los Opcode para coger el puntero.
coger un depurador, escribir las instrucciones ( esas están bien ), copiar los opcodes, hacer un array en VB con esos opcodes y llamar con callwindowproc ( esta funcion declara con un parametro solamente ) asi:

variable = callwindowproc(addr array)

variable tiene tu valor ahora.
« Última modificación: 10 Octubre 2012, 22:43 pm por RHL » En línea

Danyfirex


Desconectado Desconectado

Mensajes: 493


My Dear Mizuho


Ver Perfil
Re: ASM + Visual Basic Duda Imprimir Numero
« Respuesta #4 en: 10 Octubre 2012, 22:50 pm »

es que la verdad no estoy muy claro con el vb6 por eso ando pidiendo ayuda.  en Autoit lo hago así.

Código
  1. msgbox(0,"",_Ret128() & @CRLF)
  2.  
  3. Func _Ret128()
  4.  
  5.    #cs
  6.         B8                      mov eax, 00000080
  7.         C3                      ret
  8.     #ce
  9.  
  10.    Local $Opcode = "0xB880000000C3"
  11.  
  12.    Local $CodeBuffer = DllStructCreate("byte[" & BinaryLen($Opcode) & "]")
  13.    DllStructSetData($CodeBuffer, 1, $Opcode)
  14. msgbox(0,"",DllStructGetptr($CodeBuffer))
  15.  
  16.    Local $Ret = DllCall("user32.dll", "int", "CallWindowProcW", _
  17.            "ptr", DllStructGetPtr($CodeBuffer), _
  18.            "int", 0, _
  19.            "int", 0, _
  20.            "int", 0, _
  21.            "int", 0)
  22.  
  23.    Return $Ret[0]
  24.  

intente colocando los Op-code "B880000000C3" en array pero no me resulta.
En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: ASM + Visual Basic Duda Imprimir Numero
« Respuesta #5 en: 10 Octubre 2012, 23:01 pm »

es que la verdad no estoy muy claro con el vb6 por eso ando pidiendo ayuda.  en Autoit lo hago así.

Código
  1. msgbox(0,"",_Ret128() & @CRLF)
  2.  
  3. Func _Ret128()
  4.  
  5.    #cs
  6.         B8                      mov eax, 00000080
  7.         C3                      ret
  8.     #ce
  9.  
  10.    Local $Opcode = "0xB880000000C3"
  11.  
  12.    Local $CodeBuffer = DllStructCreate("byte[" & BinaryLen($Opcode) & "]")
  13.    DllStructSetData($CodeBuffer, 1, $Opcode)
  14. msgbox(0,"",DllStructGetptr($CodeBuffer))
  15.  
  16.    Local $Ret = DllCall("user32.dll", "int", "CallWindowProcW", _
  17.            "ptr", DllStructGetPtr($CodeBuffer), _
  18.            "int", 0, _
  19.            "int", 0, _
  20.            "int", 0, _
  21.            "int", 0)
  22.  
  23.    Return $Ret[0]
  24.  

intente colocando los Op-code "B880000000C3" en array pero no me resulta.


Option Explicit

Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Sub Form_Load()
Dim arr(8) As Byte
Dim mret As Long

arr(0) = &HB8
arr(1) = &H80
arr(2) = &H0
arr(3) = &H0
arr(4) = &H0
arr(5) = &HC2
arr(6) = &H10

mret = CallWindowProc(VarPtr(arr(0)), 0, 0, 0, 0)
MsgBox mret

End Sub


no recuerdo como era para declara una funcion con un parametro pero se puede, tengo años de no usar vb
En línea

Danyfirex


Desconectado Desconectado

Mensajes: 493


My Dear Mizuho


Ver Perfil
Re: ASM + Visual Basic Duda Imprimir Numero
« Respuesta #6 en: 10 Octubre 2012, 23:08 pm »

Option Explicit

Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Sub Form_Load()
Dim arr(8) As Byte
Dim mret As Long

arr(0) = &HB8
arr(1) = &H80
arr(2) = &H0
arr(3) = &H0
arr(4) = &H0
arr(5) = &HC2
arr(6) = &H10

mret = CallWindowProc(VarPtr(arr(0)), 0, 0, 0, 0)
MsgBox mret

End Sub


no recuerdo como era para declara una función con un parámetro pero se puede, tengo años de no usar vb



huy que tonto soy :S se me había olvidado &   :rolleyes:

muchas gracias RHL, me siento algo tonto :S

ya me iba a funcionar jajaja.

algo mas porque esto

arr(5) = &HC2
arr(6) = &H10

en vez de C3?
« Última modificación: 10 Octubre 2012, 23:10 pm por Danyfirex » En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: ASM + Visual Basic Duda Imprimir Numero
« Respuesta #7 en: 10 Octubre 2012, 23:13 pm »

huy que tonto soy :S se me había olvidado &   :rolleyes:

muchas gracias RHL, me siento algo tonto :S

ya me iba a funcionar jajaja.

algo mas porque esto

arr(5) = &HC2
arr(6) = &H10

en vez de C3?

cuando retornas debes de eliminar los parametros que pusheaste en el retorno, aunque con este codigo funcionara con c3 es
buen habito siempre eliminarlos, de lo contrario despues estos son dolores de cabeza cuando hay call a otras funciones dentro del asm inline, lo digo por experiencia
« Última modificación: 10 Octubre 2012, 23:15 pm por RHL » En línea

Danyfirex


Desconectado Desconectado

Mensajes: 493


My Dear Mizuho


Ver Perfil
Re: ASM + Visual Basic Duda Imprimir Numero
« Respuesta #8 en: 10 Octubre 2012, 23:19 pm »

cuando retornas debes de eliminar los parametros que pusheaste en el retorno, aunque con este codigo funcionara con c3 es
buen habito siempre eliminarlos, de lo contrario despues estos son dolores de cabeza cuando hay call a otras funciones dentro del asm inline, lo digo por experiencia

mmm ya veo. lo tomare en cuenta. bueno ahora estudiar mas a fondo ASM. Muchas Gracias por la solución RHL me pase varios días en fracaso por esto.  ;-)

saludos y gracias Compa.
En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: ASM + Visual Basic Duda Imprimir Numero
« Respuesta #9 en: 10 Octubre 2012, 23:28 pm »

de nada  ::)
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

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