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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  ASM en VB6 [Respuesta a Myserik]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ASM en VB6 [Respuesta a Myserik]  (Leído 3,221 veces)
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
ASM en VB6 [Respuesta a Myserik]
« en: 9 Junio 2011, 09:17 am »

.
el código lo pongo publico ya que a mas de a uno le interese a la larga, no soy experto en ASM pero bueno.

Código
  1.  
  2. Option Explicit
  3.  
  4. Private Declare Function LoadLibrary Lib "kernel32.dll" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
  5. Private Declare Function GetProcAddress Lib "kernel32.dll" (ByVal hModule As Long, ByVal lpProcName As String) As Long
  6. Private Declare Function CallWindowProc Lib "USER32" Alias "CallWindowProcW" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  7.  
  8. Private Sub form_load()
  9. Dim bASM(0 To 27)           As Byte
  10. Dim i                       As Integer
  11. Dim sMsg                    As String
  12. Dim sTitulo                 As String
  13.  
  14.    sMsg = "Hola Mundo"
  15.    sTitulo = "Titulo de un msgbox"
  16.  
  17.    '   Cada Instruccion pesa {1 Bytes} y el numero de "_" son la cantidad de bytes esperados habitualmente si son 4 es que sea normalmente un puntero, pero eso depende del formato de la instruccion.
  18.    '   Para informacion de los OpCodes:
  19.    '   //  http://ref.x86asm.net/geek.html
  20.    '   PUSH ____
  21.    '   PUSH ____
  22.    '   PUSH ____
  23.    '   PUSH ____
  24.    '   MOV EAX, ____
  25.    '   CALL EAX
  26.    '   RET
  27.    i = 0
  28.    bASM(i) = &H68: i = LongToByte(vbYesNoCancel, bASM(), i + 1)    ' PUSH {vbYesNoCancel}      5 bytes ( 1(&H68) + long(vbYesNoCancel) ).
  29.    bASM(i) = &H68: i = LongToByte(StrPtr(sTitulo), bASM(), i + 1)  ' PUSH {StrPtr(sTitulo)}    5 bytes ( 1(&H68) + long(StrPtr(sTitulo)) )..
  30.    bASM(i) = &H68: i = LongToByte(StrPtr(sMsg), bASM(), i + 1)     ' PUSH {StrPtr(sMsg)}       5 bytes ( 1(&H68) + long(StrPtr(sMsg)) )..
  31.    bASM(i) = &H68: i = LongToByte(&H0, bASM(), i + 1)              ' PUSH {&H0}                5 bytes ( 1(&H68) + long(&H0) )..
  32.  
  33.    ' MOV {EAX},{LongToByte(GetProcAddress(LoadLibrary("user32.dll"), "MessageBoxW")}
  34.    bASM(i) = &HB8: i = LongToByte(GetProcAddress(LoadLibrary("user32.dll"), "MessageBoxW"), bASM(), i + 1) ' 5 bytes
  35.    bASM(i) = &HFF: i = i + 1 ' CALL ___    1 bytes
  36.    bASM(i) = &HD0: i = i + 1 ' EAX         1 bytes
  37.    bASM(i) = &HC3: i = i + 1 ' RET         1 bytes
  38.    MsgBox CallWindowProc(ByVal VarPtr(bASM(0)), 0&, 0&, 0&, 0&)    ' Run ASM
  39. End Sub
  40.  
  41. Private Function LongToByte(ByVal lLong As Long, ByRef bReturn() As Byte, Optional i As Integer = 0) As Long
  42.    bReturn(i) = lLong And &HFF
  43.    bReturn(i + 1) = (lLong And &HFF00&) \ &H100
  44.    bReturn(i + 2) = (lLong And &HFF0000) \ &H10000
  45.    bReturn(i + 3) = (lLong And &HFF000000) \ &H1000000
  46.    LongToByte = i + 4
  47. End Function
  48.  
  49.  

Dulces Lunas!¡.


« Última modificación: 9 Junio 2011, 09:58 am por BlackZeroX▓▓▒▒░░ » En línea

The Dark Shadow is my passion.
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: ASM en VB6 [Respuesta a Myserik]
« Respuesta #1 en: 9 Junio 2011, 09:58 am »

.
Solo agrego lo siguiente.

Código
  1.  
  2.    '   Cada Instruccion pesa {1 Bytes} y el numero de "_" son la cantidad de bytes esperados habitualmente si son 4 es que sea normalmente un puntero, pero eso depende del formato de la instruccion.
  3.    '   Para informacion de los OpCodes:
  4.    '   //  http://ref.x86asm.net/geek.html
  5.    '   PUSH ____
  6.    '   PUSH ____
  7.    '   PUSH ____
  8.    '   PUSH ____
  9.    '   MOV EAX, ____
  10.    '   CALL EAX
  11.    '   RET
  12.  
  13.  

Dulces Lunas!¡.


En línea

The Dark Shadow is my passion.
raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: ASM en VB6 [Respuesta a Myserik]
« Respuesta #2 en: 9 Junio 2011, 14:34 pm »

Al menos podrias poner un link al tema de donde venia (si es que no fue para revivirlo) para asi todos podamos entender de que se trataba :P
En línea

Miseryk

Desconectado Desconectado

Mensajes: 225


SI.NU.SA U.GU.DE (2NE1 - D-Unit)


Ver Perfil
Re: ASM en VB6 [Respuesta a Myserik]
« Respuesta #3 en: 11 Junio 2011, 15:25 pm »

:D:D:D gracias, lo había pensado así pero no agregar al array el GetProc, a veces la respuesta suele ser como uno la piensa :P. Gracias (Y)(Y)(Y)
En línea

Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It’s never too late to change our luck
So, don’t let them steal your light
Don’t let them break your stride
There is light on the other side
And you’ll see all the raindrops falling behind
Make it out tonight
it’s a revolution

CL!!!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como crear un .exe en Visual studio 2010 con permisos de escritura en C:Windows\
.NET (C#, VB.NET, ASP)
dark_one88 3 7,060 Último mensaje 30 Mayo 2011, 23:54 pm
por Krähne
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines