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


 


Tema destacado: Doble factor de autenticación o verificación en dos pasos


+  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 1,751 veces)
mr.blood

Desconectado Desconectado

Mensajes: 149


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

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 »

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: 149


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

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 »


¿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: 149


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

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.425


Se siente observado ¬¬'


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

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
GDI+ y hook'ing
Programación General
sugebeltz 0 703 Último mensaje 6 Septiembre 2004, 18:06
por sugebeltz
VEH Api Hook
Análisis y Diseño de Malware
bizco 9 5,964 Último mensaje 10 Junio 2012, 01:39
por pipaman
api hook
Programación Visual Basic
Cromatico 7 3,406 Último mensaje 21 Marzo 2011, 18:52
por ntaryl
VB6 Hook Api
Programación Visual Basic
philipjfry99 0 1,921 Último mensaje 19 Marzo 2011, 23:51
por philipjfry99
[C] Hook en DLL
Programación C/C++
calk9 9 2,644 Último mensaje 17 Septiembre 2011, 20:19
por Eternal Idol
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines