Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: Cromatico en 14 Mayo 2014, 15:38 pm



Título: Consulta hook
Publicado por: Cromatico en 14 Mayo 2014, 15:38 pm
Buen día compañeros!
Estoy teniendo dudas al tratar de hookear una función, el tema es así:
Supongamos que tengo una función de VB6 dentro de una clase (modulo de clase).
Esa función recibe un parámetro tipo numérico.

EJEMPLO
Código:
Private function NUMERITO (num as integer)
      MSGBOX num
end function

Yo quiero hookear esa funcion, desde mi programa en C++, puede ser que me este fallando debido a que VB6 trabaja con un hilo únicamente? O por cantidad de parametros incorrectos, tengo esto:

Código:
typedef void (WINAPI * Numerito)(int);
Numerito MyNumerito;

VOID WINAPI MyNumerito(int num)
{
__asm PUSHAD
     //ACA GUARDARIA LO QUE TENGO EN EL PARAMETRO num
__asm POPAD
    //LLAMO A LA FUNCION ORIGINAL:
    OrigNumerito(num);
}

Pero me falla, puede ser que me falte algún parámetro que se le pasa siempre a las clases de vb6? Ayuda!

Gracias y saludos!

EDIT: Estoy intentando hookear desde mi DLL en C++ inyectada al proceso VB6.


Título: Re: Consulta hook
Publicado por: MCKSys Argentina en 14 Mayo 2014, 16:30 pm
Hola!

Hay algunas cosas que no entiendo:

Qué parte te falla? Cómo haces para que VB llame a tu función? Parcheas el lugar? Estás en otro proceso o en una DLL?

Ten en cuenta que VB internamente usa objetos (y variables) COM+ (ActiveX). Por ej. las cadenas no son ANSI, sino UNICODE (WideChar). Una variable en VB (si no esta optimizado el proc) es una variable VARIANT.

Saludos!


Título: Re: Consulta hook
Publicado por: Cromatico en 16 Mayo 2014, 15:09 pm
Buen día MCKSys!
El programa en VB6 llama a su propia función cuando hacen click en uno de sus botones...

Yo estoy con mi DLL inyectada dentro del proceso de VB6, lo que quiero hacer es hookear esa funcion (uso detours)...
Pero cuando hookeo, y apreto el botón de VB6, tira error y se cierra el proceso.
Es como si no me coincidiera el tipo o la cantidad de parámetros.

Puedo hacerlo perfectamente si hookeo una función del VB6 que NO esta en una clase, el problema es con las funciones que están dentro de una clase vb6...

Espero haberme explicado un poco mas, se me complica expresar lo que pasa jaja!

Gracias!