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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Análisis y Diseño de Malware (Moderador: fary)
| | |-+  [Libreria C] Hook a la IAT
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Libreria C] Hook a la IAT  (Leído 3,213 veces)
mr.blood

Desconectado Desconectado

Mensajes: 150


Ver Perfil
[Libreria C] Hook a la IAT
« en: 23 Enero 2013, 16:40 pm »

Por si a alguien le ayuda. Es mejorable, no tiene ningun control de errores era solo para mostrar la idea ;).

No se si esto va en esta sección o en la de Programacion en C. Creo que esta mas relacionado con esto.

hookiat.c
Código
  1. #include "hookiat.h"
  2.  
  3. void HookIAT(char *tohooklibrary, char *tohookfunc, void *newfunc)
  4. {
  5. DWORD image_base=GetModuleHandleA(0);
  6. PIMAGE_DOS_HEADER DOS;
  7. PIMAGE_NT_HEADERS NT;
  8. PIMAGE_IMPORT_DESCRIPTOR IT;
  9. PIMAGE_IMPORT_BY_NAME *IMPORTED_FUNCTIONS;
  10. PIMAGE_THUNK_DATA Funcion;
  11. DWORD *IMPORTED_DLL_NAME;
  12. DWORD *IMPORTED_FUNCTION_NAME;
  13. unsigned int i=0;
  14.  
  15. DOS=(PIMAGE_DOS_HEADER)image_base;
  16. NT=(PIMAGE_NT_HEADERS)(DOS->e_lfanew + image_base);
  17. IT=(PIMAGE_IMPORT_DESCRIPTOR)(NT->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress + image_base);
  18. IMPORTED_DLL_NAME=(DWORD *)(IT->Name + image_base);
  19.  
  20. while( (IT->Name) != 0 )
  21. {
  22. IMPORTED_DLL_NAME=(DWORD *)(IT->Name + image_base);
  23. if(!strcmp((char *)IMPORTED_DLL_NAME, tohooklibrary))
  24. {
  25. break;
  26. }
  27. IT++;
  28. }
  29.  
  30. IMPORTED_FUNCTIONS=(PIMAGE_IMPORT_BY_NAME *)(IT->Characteristics + image_base);
  31.  
  32. for(i=0;;i++)
  33. {
  34. IMPORTED_FUNCTION_NAME=(DWORD *)((*IMPORTED_FUNCTIONS)->Name + image_base);
  35. if(((*IMPORTED_FUNCTIONS)!=0) && (!strcmp((char *)IMPORTED_FUNCTION_NAME, tohookfunc)))
  36. {
  37. break;
  38. }
  39. IMPORTED_FUNCTIONS++;
  40. }
  41.  
  42. Funcion=(PIMAGE_THUNK_DATA)(IT->FirstThunk + image_base);
  43. Funcion+=i;
  44. ORIGINAL_FUNCTION=(void *)Funcion->u1.Function;
  45. Funcion->u1.Function=(DWORD)newfunc;
  46. }
  47.  

hookiat.h
Código
  1. #include <string.h>
  2. #include <windows.h>
  3.  
  4. void *ORIGINAL_FUNCTION;
  5.  
  6. void HookIAT(char *tohooklibrary, char *tohookfunc, void *newfunc);
  7.  

Sa1uDoS
En línea

Arkangel_0x7C5


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: [Libreria C] Hook a la IAT
« Respuesta #1 en: 23 Enero 2013, 18:21 pm »

Buen codogo.
Como recomendación para su uso, seria recomendable hacer el hook al inicio de la aplicaccion y enganchar también GetProcAddress para que no se te escape cuando usen punteros a esas funciones

Saludos
En línea

mr.blood

Desconectado Desconectado

Mensajes: 150


Ver Perfil
Re: [Libreria C] Hook a la IAT
« Respuesta #2 en: 23 Enero 2013, 19:34 pm »

Si, es la desventaja de este tipo de Hooks, si usan GetProcAddress no los "engancha", hay que hookear GetProcAddress tambien.

Gracias por el comentario ;).

Pero a mi es el tipo de Hook que mas me gusta



Como recomendación para su uso, seria recomendable hacer el hook al inicio de la aplicaccion

¿A que te refieres con eso?

Sa1uDoS
En línea

Arkangel_0x7C5


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: [Libreria C] Hook a la IAT
« Respuesta #3 en: 23 Enero 2013, 19:47 pm »


¿A que te refieres con eso?

Sa1uDoS


A que pongan el gancho justo cuando la aplicaccion se ejecuta, para que no le de tiempo a llamar a GetProcAddress.
Tambien se puede usar para las importaciones de otras dll, por lo que un campo para el nombre del modulo estaría interesante

Saludos
En línea

mr.blood

Desconectado Desconectado

Mensajes: 150


Ver Perfil
Re: [Libreria C] Hook a la IAT
« Respuesta #4 en: 23 Enero 2013, 20:57 pm »

Ah bueno jaja. Pero esto es una funcion, que cada uno la use como mas conveniente crea.

Sa1uDoS

P.D.: Que gusto da este foro, la gente comenta.
En línea

Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: [Libreria C] Hook a la IAT
« Respuesta #5 en: 24 Enero 2013, 01:50 am »

Gracias por la aportación mr.blood :)
Realmente lo ideal sería hookear LdrGetProcedureAddress() a pesar de que recorriendo la EAT manualmente se podría escapar.

Otra librería de [Zero]:
Código:
http://foro.elhacker.net/analisis_y_diseno_de_malware/srccasm_clshookapi-t281292.0.html

Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con Api hook
Ingeniería Inversa
el_chavo 0 2,449 Último mensaje 7 Febrero 2009, 23:43 pm
por el_chavo
VEH Api Hook
Análisis y Diseño de Malware
bizco 9 8,469 Último mensaje 10 Junio 2012, 01:39 am
por pipaman
api hook
Programación Visual Basic
Cromatico 7 5,609 Último mensaje 21 Marzo 2011, 18:52 pm
por ntaryl
VB6 Hook Api
Programación Visual Basic
philipjfry99 0 2,656 Último mensaje 19 Marzo 2011, 23:51 pm
por philipjfry99
[C] Hook en DLL
Programación C/C++
calk9 9 4,517 Último mensaje 17 Septiembre 2011, 20:19 pm
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines