comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[C] Libreria Hook IAT

  • 4 Respuestas
  • 1221 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado mr.blood

  • *
  • Underc0der
  • Mensajes: 73
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
  • Skype: red_ink@hotmail.es
« en: Mayo 14, 2013, 02:37:59 am »
Por si a alguien le ayuda. Es mejorable, no tiene ningun control de errores era solo para mostrar la idea ;).

No pierdo mas tiempo, el code.

hookiat.c
Código: C
  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(!You are not allowed to view links. Register or Login((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) && (!You are not allowed to view links. Register or Login((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: C
  1. #include <string.h>
  2. #include <windows.h>
  3.  
  4. void *ORIGINAL_FUNCTION;
  5.  
  6. void HookIAT(char *tohooklibrary, char *tohookfunc, void *newfunc);
  7.  

Espero que a alguien le sirva. No hagais muchas maldades con el :P.

Sa1uDoS
« Última modificación: Diciembre 08, 2014, 02:51:47 pm por Expermicid »

Desconectado S t Ø r M d ∆ r k

  • *
  • Underc0der
  • Mensajes: 74
  • Actividad:
    0%
  • Reputación 0
  • fb.com/cyberoxyde
    • Ver Perfil
    • Mi Blog
    • Email
  • Twitter: @stormdark_
« Respuesta #1 en: Mayo 14, 2013, 02:50:11 am »
Orale se ve que esta bueno el code, pero no le entiendo que es lo que hace, can you explain me please...

Saludos..
You are not allowed to view links. Register or Login
In my mind where before there was order, today there is only chaØs!

Desconectado mr.blood

  • *
  • Underc0der
  • Mensajes: 73
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
  • Skype: red_ink@hotmail.es
« Respuesta #2 en: Mayo 14, 2013, 11:16:45 am »
Claro, parto de que sabes lo que es Hookear una API.

Los .exe utilizan el formato PE. Este formato tiene una Tabla de importaciones (Import Table) y una Tabla de direcciones de importaciones (Import Address Table). En la Import Table estan los nombres de las API que llama tu codigo y la libreria a la que pertenecen, y cuando tu ejecutas un .exe el WinLoader rellena la Import Address Table con las direcciones de esas API (esto es lo que permite que en distintas maquinas funcione el mismo .exe). Este codigo cambia una direccion por la direccion de una funcion tuya (API Hooking).

Es dificil de explicar, dime si algo no te quedo claro y te pongo un codigo para que lo veas mas claro (aunque para entenderlo deberias leer sobre el formato PE).

Sa1uDoS

Desconectado [Zero]

  • *
  • Underc0der
  • Mensajes: 7
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • H-Sec.org
    • Email
« Respuesta #3 en: Mayo 29, 2013, 05:09:17 pm »
No entiendo, probaste si funciona?

Concretamente no entiendo la forma en la que localizas la API en la IAT:

Código: C
  1. if(((*IMPORTED_FUNCTIONS)!=0) && (!You are not allowed to view links. Register or Login((char *)IMPORTED_FUNCTION_NAME, tohookfunc)))

Comparas el nombre. Hace mucho que no veo nada de la IAT, pero hace tiempo hice un código que hacía esto en ASM y, a riesgo de colarme, diría que los nombres se reemplazan en runtime por las direcciones, por lo que la 'única' forma de localizar la API es por su dirección y no por su nombre.

Saludos
   
 You are not allowed to view links. Register or Login

Desconectado mr.blood

  • *
  • Underc0der
  • Mensajes: 73
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
  • Skype: red_ink@hotmail.es
« Respuesta #4 en: Mayo 29, 2013, 06:19:25 pm »
Una cosa es la IT y otra la IAT, una tiene los nombres y la otra las direcciones de estas :) Obviamente la he probado, si no no la hubiera subido.

Sa1uDoS

 

¿Te gustó el post? COMPARTILO!



[C/C++][Source] Keylogger remoto con Hook sin DLL

Iniciado por xxneeco83xx

Respuestas: 0
Vistas: 1854
Último mensaje Julio 23, 2015, 02:46:13 am
por xxneeco83xx