Foro de elhacker.net

Seguridad Informática => Análisis y Diseño de Malware => Mensaje iniciado por: bizco en 24 Marzo 2010, 15:10 pm



Título: VEH Api Hook
Publicado por: bizco en 24 Marzo 2010, 15:10 pm
El concepto de todo esto ya lo conocia pero por thread y gracias a Guy de GD conoci esta alternativa que trabaja de forma global en todo el proceso. El concepto base es generar una excepcion cada vez que se llama a la funcion o zona de codigo que nos interesa redireccionar, para eso pondremos PAGE_NOACCESS en la direccion:

Código:
api=(DWORD*)GetProcAddress(GetModuleHandle("user32.dll"),"MessageBoxA");
AddVectoredExceptionHandler(1,Redirector);
VirtualProtect(api,1,PAGE_NOACCESS,&oProt);

en AddVectoredExceptionHandler pondremos el primer parametro a 1 para que de todos los manejadores nos llame a nosotros primero, el segundo parametro es la funcion que controlara las excepciones.

Código:
LONG __stdcall Redirector(PEXCEPTION_POINTERS ep)
{
 if (ep->ExceptionRecord->ExceptionCode==EXCEPTION_ACCESS_VIOLATION)
 {
  if (ep->ContextRecord->Eip==(DWORD)api)
  {
   VirtualProtect(api,1,PAGE_EXECUTE,&oProt);
   ep->ContextRecord->Eip=(DWORD)_MsgBox;
   return EXCEPTION_CONTINUE_EXECUTION;
  }
 }
 return EXCEPTION_CONTINUE_SEARCH;
}

en esta funcion solo controlaremos 1 excepcion, si no es esta o la direccion no es la que nosotros esperamos pasaremos el control al siguiente manejador de excepciones (EXCEPTION_CONTINUE_SEARCH). en caso de ser la direccion que queremos hookear, damos permisos de ejecucion a la zona y la EIP apuntando a  nuestra funcion que seria algo asi:

Código:
UINT __stdcall _MsgBox(HWND h,char *Texto,char *Titulo,UINT Tipo)
{
 UINT r=0;
 r=MessageBox(h,"Mensaje manipulado","titulo",Tipo);
 VirtualProtect(api,1,PAGE_NOACCESS,&oProt);
 return r;
}

Las posibilidades no son pocas, es facil de implementar y no hay que modificar ni 1 solo byte del codigo original asi que las detecciones por opcodes o crc no serian efectivas. no solo podemos hookear si no implementar formas de evadir software "anti malware".

Se que no es nada nuevo, pero como no vi nada en el foro que hablase sobre esto pues lo dejo para el que le pueda interesar.




Título: Re: VEH Api Hook
Publicado por: Jaixon Jax en 24 Marzo 2010, 15:21 pm
  Muy Buen Post Thanks  :D


Título: Re: VEH Api Hook
Publicado por: [Zero] en 24 Marzo 2010, 15:30 pm
Está bueno el post, no conocía éste modo de hacer hook, está original  :).

Saludos


Título: Re: VEH Api Hook
Publicado por: Karcrack en 24 Marzo 2010, 16:49 pm
Intente hace un tiempo usar este tipo de Hook.... sin exito :-\

Cuando llegue a casa reviso y juego un poquito con el tema ;)

Muy bueno :D


Título: Re: VEH Api Hook
Publicado por: Hendrix en 24 Marzo 2010, 17:06 pm
Buen artículo  :D


Título: Re: VEH Api Hook
Publicado por: Karcrack en 24 Marzo 2010, 17:42 pm
He estado probando en casita, y bueno :P He conseguido que vaya, por cierto hay un parametro muy interesante de VirtualProtectEx llamado hProcess :silbar: :silbar: :xD

No he conseguido aun hacerlo funcionar en VB, que raro no? :laugh:


Título: Re: VEH Api Hook
Publicado por: Zzombi en 24 Marzo 2010, 19:58 pm
me funciono perfecto  :)
gracias por compartirlo ctlon  :D


Título: Re: VEH Api Hook
Publicado por: bizco en 25 Marzo 2010, 19:09 pm
Citar
Intente hace un tiempo usar este tipo de Hook.... sin exito :-\

Usarias SEH que es por thread y por eso no te funcionaria, VEH es por proceso.


Título: Re: VEH Api Hook
Publicado por: Karman en 14 Febrero 2011, 22:38 pm
Hay un pequeño detalle sobre el uso del veh hook (o esta forma de usarlo), y es que cuando llaman a VirtualProtect no están cambiando el acceso a X bytes de memoria, sino a las páginas donde se encuentran esos X bytes, dicho de otra forma:

Citar
    pag1   -    pag2
[...     XX][XX     ...]

estarían no solo cambiando los permisos de los bytes XXXX sinó de las dos páginas (cada página suele tener 512 bytes), por lo que podría pasar que al ejecutarse alguna parte de algunas de las páginas externas a los bytes que uno quiere proteger también se provoque una excepción.

S2

PD: se que el post es viejo pero creo que merece aclararse eso :P


Título: Re: VEH Api Hook
Publicado por: pipaman en 10 Junio 2012, 01:39 am
Si no te gusta el C++ lo mejor que podes usar es algún framework que te resuelva la parte de bajo nivel. Te recomiendo uno muy estable y potente. Con 10 lineas de codigo armas un hook:
http://www.nektra.com/products/deviare-api-hook-windows/

Saludos a todos!