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
| |-+  Ingeniería Inversa (Moderadores: karmany, .:UND3R:., MCKSys Argentina)
| | |-+  Pointer a función (C y VB6)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Pointer a función (C y VB6)  (Leído 3,001 veces)
calk9

Desconectado Desconectado

Mensajes: 69


Ver Perfil
Pointer a función (C y VB6)
« en: 12 Noviembre 2013, 20:11 pm »

Hola nuevamente foreros. Estoy intentando llamar una función de un proceso externo. Tengo 2 procesos, uno está en C y el otro en VB6. Las funciones de ambos serían algo así:

VB6:
Código
  1. Public Function Sumar(ByVal a As Integer, ByVal b As Integer) As Integer
  2.    Sumar = a + b
  3. End Function
  4.  

C:
Código
  1. int sumar(int a, int b)
  2. {
  3.    return a + b;
  4. }

En el primer programa (VB6), Sumar() se encuentra en la dirección 0x0401BD0. En el segundo (C), sumar() está en 0x0401334.

Ahora bien, creo una DLL en C y hago lo siguiente:

Código
  1. typedef int (__stdcall *exe_sumar_ptr)(int, int);
  2. ...
  3. char result[50] = "";
  4. exe_sumar_ptr exe_sumar;
  5. exe_sumar = (exe_sumar_ptr)(0x0401334);
  6. sprintf(result, "Resultado: %d\n", exe_sumar(5, 5));
  7. MessageBox(0, result, "Resultado", MB_OK);
  8. ...

La inyecto en el programa en C y funciona perfectamente, llama a la función sumar() y devuelve como valor 10 (5+5, correcto!). Ahora el problema es en el programa de VB6. Recompilo la DLL con la nueva dirección (0x0401BD0) y la función siempre retorna 0. Según la MSDN, el equivalente del tipo Integer de VB6 es long, así que intenté lo siguiente:

Código
  1. typedef long (__stdcall *exe_sumar_ptr)(long, long);

Pero el problema persiste. Alguna idea de que puede estar sucediendo?

Les agradezco de antemano su ayuda y saludos!!
« Última modificación: 12 Noviembre 2013, 20:13 pm por calk9 » En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.513


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Pointer a función (C y VB6)
« Respuesta #1 en: 12 Noviembre 2013, 21:02 pm »

El tipo Integer de VB6 es de 16 bits, osea WORD.
El tipo Long de VB6 es de 32 bits (DWORD), pero con signo.

Tambien ten en cuenta que VB usa STDCALL y C no.

Eso es lo que se me ocurre por ahora, aunque siempre puedes agarrar Olly (o el dbg que prefieras) y ver que esta pasando...

Saludos!
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

calk9

Desconectado Desconectado

Mensajes: 69


Ver Perfil
Re: Pointer a función (C y VB6)
« Respuesta #2 en: 12 Noviembre 2013, 22:52 pm »

Hola, gracias por la respuesta. Inteté usando WORD pero aún así el problema persiste:

Código
  1. typedef WORD (__stdcall *exe_sumar_ptr)(WORD, WORD);

Alguna otra idea? Como puedo detectar el problema con ollydbg? Necesito saber ASM? (porque no entiendo nada de eso :xD).

Saludos y gracias de nuevo!  :D
« Última modificación: 12 Noviembre 2013, 22:54 pm por calk9 » En línea

calk9

Desconectado Desconectado

Mensajes: 69


Ver Perfil
Re: Pointer a función (C y VB6)
« Respuesta #3 en: 14 Noviembre 2013, 02:43 am »

Bueno finalmente me descargue el OllyDbg y lo ejecuté para ver que podía hacer. Primero intenté con el programa en C y todo funciona perfectamente. Luego continué con el de VB6 y el Olly me dice lo siguiente al momento de inyectar la DLL que llama a la función Sumar() (del programa hecho en VB6):

Citar
Access violation when reading 00000004 - use Shift+F7 to pass exception to program

Automáticamente Olly pausea el programa, así que apreto Shift+F7 y luego le doy Run. Ahora sale el mismo mensaje pero la dirección es 0000007C. De nuevo hago el procedimiento anterior y la dirección ahora es 00000008. Presiono por última vez Shift+F7 + Run y finalmente continúa la ejecución normalmente. El inyector retorna un mensaje indicando que falló la inyección de la DLL.

Por que puede estar sucediendo esto?  :huh:

Gracias!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Apache 2.2.14 mod_isapi Dangling Pointer
Nivel Web
Mafmaestro 4 8,593 Último mensaje 14 Septiembre 2011, 15:57 pm
por Tronos154
Ayuda como leer un Pointer
Programación Visual Basic
abdiel2475 5 3,526 Último mensaje 18 Enero 2011, 23:55 pm
por abdiel2475
Duda con Stack Pointer (Registro 13)
ASM
JonaLamper 3 3,085 Último mensaje 27 Marzo 2014, 23:50 pm
por xv0
Error en codigo c++ ISO c++ forbids comparision between pointer and integer
Programación C/C++
qwertyui 2 2,370 Último mensaje 22 Mayo 2016, 08:45 am
por qwertyui
C# Pointer variables Safe
.NET (C#, VB.NET, ASP)
Miseryk 1 1,971 Último mensaje 13 Noviembre 2016, 14:06 pm
por fran800m
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines