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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Obtener puntero de funcion dentro de un form o class.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Obtener puntero de funcion dentro de un form o class.  (Leído 10,089 veces)
F3B14N

Desconectado Desconectado

Mensajes: 47


Ver Perfil
Obtener puntero de funcion dentro de un form o class.
« en: 29 Abril 2011, 04:33 am »

Hola, estoy tratando de obtener el puntero de una funcion que esta dentro de un form o class.
La cual no puedo mover a un modulo y usar AddressOf porque es usada por varios hilos, necesito cada funcion independiente. Pero para hacer ello tiene que estar dentro de un class o form, y no puedo obtener su puntero  :-\

Intente esto:

http://www.programmersheaven.com/mb/VBasic/237946/237949/re-hot-to-find-the-address-of-a-function/

Código
  1. Call CallWindowProc(ByVal GetDWORD(ObjPtr(Me) + ((FunctionIndex - 1) * 4) + 12), 0, 0, 0, 0)

Agradeceria de su ayuda  :P


« Última modificación: 29 Abril 2011, 04:42 am por F3B14N » En línea

F3B14N

Desconectado Desconectado

Mensajes: 47


Ver Perfil
Re: Obtener puntero de funcion dentro de un form o class.
« Respuesta #1 en: 29 Abril 2011, 04:45 am »

Aqui parece que se obtiene algo parecido: http://cobein.com/wp/?p=236#more-236

Pero no logro obtener el puntero  :-\ Gracias


En línea

Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: Obtener puntero de funcion dentro de un form o class.
« Respuesta #2 en: 30 Abril 2011, 17:15 pm »

Lo estas haciendo bien, para obtener el puntero has de leer la vTable.... Pero estas leyendo mal el puntero... el puntero a la funcion no se encuentra en el Offset 0xC, sino en el 0x1C... es decir, el puntero estaría aquí:
Código:
ObjPtr(oObjeto) + (Indice * 4) + &H1C

Creo que así podrás obtener el puntero :D
En línea

F3B14N

Desconectado Desconectado

Mensajes: 47


Ver Perfil
Re: Obtener puntero de funcion dentro de un form o class.
« Respuesta #3 en: 30 Abril 2011, 17:44 pm »

Lo estas haciendo bien, para obtener el puntero has de leer la vTable.... Pero estas leyendo mal el puntero... el puntero a la funcion no se encuentra en el Offset 0xC, sino en el 0x1C... es decir, el puntero estaría aquí:
Código:
ObjPtr(oObjeto) + (Indice * 4) + &H1C

Creo que así podrás obtener el puntero :D

Gracias por tu respuesta karcrack, no lo logré, probé de estas dos formas y mas variantes tambien, pero parece que el puntero no es el correcto.

cls
Código
  1. Option Explicit
  2.  
  3. Public Function llamame(ByVal jj, ByVal dd, ByVal tt, ByVal jaja) As Long
  4.    MsgBox "hola"
  5. End Function
  6.  
  7. Public Sub oo()
  8.    Dim dd As Long
  9.    Dim jj As Long
  10.  
  11.    dd = GetDWORD(ObjPtr(Me))
  12.    jj = GetDWORD(dd + (1 * 4) + &H1C)
  13.    MsgBox jj
  14.    Call CallWindowProc(ByVal jj, 0, 0, 0, 0)
  15. End Sub
  16.  
  17. Private Function GetDWORD(ByVal lAddr As Long) As Long
  18.    Call NtWriteVirtualMemory(-1, GetDWORD, ByVal lAddr, 4, ByVal 0&)
  19. End Function

cls
Código
  1. Option Explicit
  2.  
  3. Public Function llamame(ByVal jj, ByVal dd, ByVal tt, ByVal jaja) As Long
  4.    MsgBox "hola"
  5. End Function
  6.  
  7. Public Sub oo()
  8.    Dim dd As Long
  9.  
  10.    dd = GetDWORD(ObjPtr(Me) + (1 * 4) + &H1C)
  11.    MsgBox dd
  12.    Call CallWindowProc(ByVal dd, 0, 0, 0, 0)
  13. End Sub
  14.  
  15. Private Function GetDWORD(ByVal lAddr As Long) As Long
  16.    Call NtWriteVirtualMemory(-1, GetDWORD, ByVal lAddr, 4, ByVal 0&)
  17. End Function

El intento dos devuelve 3  :-X. Las apis usadas las puse en otro modulo, y a ese class lo llame desde un form. Voy a informarme de la vTable, pero no hay nada mejor que una ayuda de un experto :P

Saludos
En línea

Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: Obtener puntero de funcion dentro de un form o class.
« Respuesta #4 en: 30 Abril 2011, 18:09 pm »

El indice de la primera funcion es 0... de todas formas ahora abro el OllyDbg y le doy un vistazo ;)
En línea

F3B14N

Desconectado Desconectado

Mensajes: 47


Ver Perfil
Re: Obtener puntero de funcion dentro de un form o class.
« Respuesta #5 en: 30 Abril 2011, 18:17 pm »

El indice de la primera funcion es 0... de todas formas ahora abro el OllyDbg y le doy un vistazo ;)

Ya habia probado con 0 tambien, pero no va :P

Código
  1. Option Explicit
  2. Private Declare Function NtWriteVirtualMemory Lib "NTDLL" (ByVal hProcess As Long, ByRef lpBaseAddress As Any, ByRef lpBuffer As Any, ByVal nSize As Long, ByRef lpNumberOfBytesWritten As Long) As Long
  3. 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
  4.  
  5. Public Function llamame()
  6.    MsgBox "hola"
  7. End Function
  8.  
  9. Public Sub oo()
  10.    Dim lVTE As Long
  11.    Dim lPtr As Long
  12.  
  13.    lVTE = GetDWORD(ObjPtr(Me))
  14.    lPtr = GetDWORD(lVTE + &H1C)
  15.    Call CallWindowProc(ByVal lPtr, 0, 0, 0, 0)
  16. End Sub
  17.  
  18. Private Function GetDWORD(ByVal lAddr As Long) As Long
  19.    Call NtWriteVirtualMemory(-1, GetDWORD, ByVal lAddr, 4, ByVal 0&)
  20. End Function

lPtr parece ser el puntero correcto. Pero da error 'No se establecio la variable object', pareciera que ObjPtr devuelve el puntero de la clase no inicializada, en vez de la clase establecida en el objecto y a eso se debe ese error!!?
El ejemplo de cobein, sobreescribe por el puntero a un ShellCode y por eso no hay error!?

Será posible esto?  :-(
En línea

Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: Obtener puntero de funcion dentro de un form o class.
« Respuesta #6 en: 30 Abril 2011, 18:24 pm »

Has de tener en cuenta que la forma en la que se llaman las funciones de las clases no es push,push,call... (Que es como el CallWindowProc hace) si no que son cosas raras de COM y yo-que-se :xD
Es decir, aunque consigas el puntero correcto no lo podras llamar asi... Al menos hasta donde yo se
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.148


I'Love...!¡.


Ver Perfil WWW
Re: Obtener puntero de funcion dentro de un form o class.
« Respuesta #7 en: 30 Abril 2011, 22:00 pm »

.
Quisas ayuden estos....

Cls
Ctl

En ambos se hace una sub-clasificacion pero hara eso se debe obtener el puntero a la función... pero bueno hay esta el código, igual ayuda en algo.

por otro lado un tienes la funcion CallByname de vb6 y tambien tienes la libreria TLI.

Dulces Lunas!¡.
« Última modificación: 30 Abril 2011, 22:02 pm por BlackZeroX▓▓▒▒░░ » 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: Obtener puntero de funcion dentro de un form o class.
« Respuesta #8 en: 3 Mayo 2011, 21:56 pm »

Nadie destripo el clsSubClass de Paul Caton (la version modificada por LaVolpe muy usado por Leandro y por mi)?? :huh: . En la cual hay una funcion scb_GetCallBackAddr (o similar, estoy en el movil) y scb_ReleaseCallback que justamente devuelven un "AddressOf" del ordinal (nro de funcion en orden descendente, la ultima es 1, la anteultima es 2 y asi) de un objeto (por defecto es el que lo llama) y ademas solo hay que especificar el nro de parametros (se hace magia interna con Asm). Lo unico es que todos los parametros deben ser tipo long y la funcion debe devolver long tambien (los parametros en su mayoria son punteros si es que no son numericos).

Cuando tenga internet en casa (por eso estoy muy desaparecido :xD) subire un ejemplo y varios proyectos que tengo listos
En línea

F3B14N

Desconectado Desconectado

Mensajes: 47


Ver Perfil
Re: Obtener puntero de funcion dentro de un form o class.
« Respuesta #9 en: 4 Mayo 2011, 00:18 am »

Nadie destripo el clsSubClass de Paul Caton (la version modificada por LaVolpe muy usado por Leandro y por mi)?? :huh: . En la cual hay una funcion scb_GetCallBackAddr (o similar, estoy en el movil) y scb_ReleaseCallback que justamente devuelven un "AddressOf" del ordinal (nro de funcion en orden descendente, la ultima es 1, la anteultima es 2 y asi) de un objeto (por defecto es el que lo llama) y ademas solo hay que especificar el nro de parametros (se hace magia interna con Asm). Lo unico es que todos los parametros deben ser tipo long y la funcion debe devolver long tambien (los parametros en su mayoria son punteros si es que no son numericos).

Cuando tenga internet en casa (por eso estoy muy desaparecido :xD) subire un ejemplo y varios proyectos que tengo listos

Creo que hablás de esto: http://siccs.googlecode.com/svn-history/r2/trunk/classes/ClsRueda.cls. Ya habia logrado solucionarlo, pero muy buen codigo. Quizas le sirva a alguien.

Saludos y muchas gracias :D
En línea

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

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
puntero a funcion
Programación C/C++
kondrag_X1 2 2,632 Último mensaje 30 Abril 2011, 19:49 pm
por leogtz
F1 - Problema con puntero a Función C#
.NET (C#, VB.NET, ASP)
Maurice_Lupin 0 1,512 Último mensaje 17 Mayo 2012, 16:14 pm
por Maurice_Lupin
Como obtener posicion mouse dentro de scrollpane?
Java
juancaa 2 2,881 Último mensaje 25 Junio 2012, 11:44 am
por juancaa
copiar contenido dentro de un div class con webbrowser?
.NET (C#, VB.NET, ASP)
housedir 1 2,051 Último mensaje 6 Agosto 2012, 22:58 pm
por seba123neo
[Resuelto] Obtener dentro de función referencia a llamante
PHP
Usuario Invitado 2 1,239 Último mensaje 20 Enero 2015, 20:37 pm
por Usuario Invitado
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines