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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  API Hooking (C++)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: API Hooking (C++)  (Leído 9,042 veces)
HaX991

Desconectado Desconectado

Mensajes: 33



Ver Perfil
API Hooking (C++)
« en: 12 Julio 2010, 14:40 pm »

hola estoy auyudando a un amigo a parhear una api pero intentamos de todo y no lo logramos..

lib  = psapi.dll
api = EnumProcesses

La api comienza aqui:
76BB3A9A > $ 6A 1C PUSH 1C
76BB3A9C . 68 C83BBB76 PUSH psapi.76BB3BC8
76BB3AA1 . E8 5BDBFFFF CALL psapi.76BB1601
76BB3AA6 . BE 00800000 MOV ESI,8000
76BB3AAB . 8975 E4 MOV DWORD PTR SS:[EBP-1C],ESI
76BB3AAE . 56 PUSH ESI
76BB3AAF . 8B3D B810BB76 MOV EDI,DWORD PTR DS:[<&KERNEL32.LocalAl>; kernel32.LocalAlloc
76BB3AB5 . EB 25 JMP SHORT psapi.76BB3ADC

cuantos bytes abria que cojer?

pd: usamos dll inyeccion

Gracias, saludos!!


En línea

Horricreu
Wiki

Desconectado Desconectado

Mensajes: 290

¡La verdad os hará libres!


Ver Perfil WWW
Re: API Hooking (C++)
« Respuesta #1 en: 12 Julio 2010, 14:51 pm »

Léete este taller de MazarD, muy bueno:

Código:
http://mazard.info/tutos/apihooking.pdf

Saludos :P


« Última modificación: 18 Julio 2010, 18:34 pm por Horricreu » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: API Hooking (C++)
« Respuesta #2 en: 12 Julio 2010, 14:56 pm »

Si usas el metodo mas comun de poner un jmp a tu direccion (5 bytes) tenes que guardar en memoria, para ejecutar despues si queres llamar a la funcion original, las dos primeras instrucciones (7 bytes).
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
HaX991

Desconectado Desconectado

Mensajes: 33



Ver Perfil
Re: API Hooking (C++)
« Respuesta #3 en: 12 Julio 2010, 15:09 pm »

gracias pero probe desde 5,7,9,18,20 y peta igalmennte ...

si hookeo otra api va de lujo pero esa no se como hacerlo...

yo creo k son 7bytes pero k tengo k recalcular la distancia de salto...

« Última modificación: 12 Julio 2010, 15:14 pm por HaX991 » En línea

[Zero]
Wiki

Desconectado Desconectado

Mensajes: 1.082


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: API Hooking (C++)
« Respuesta #4 en: 12 Julio 2010, 15:16 pm »

Pon el código de como lo estas haciendo, el salto (E9) son 5 bytes, y tu cojes 7, seguro saltas 7-5=2 bytes antes de donde tienes que saltar, con un debuger puedes verlo  :P.

Saludos
En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
HaX991

Desconectado Desconectado

Mensajes: 33



Ver Perfil
Re: API Hooking (C++)
« Respuesta #5 en: 12 Julio 2010, 15:34 pm »

esta es la funcion:

Código
  1. bool Hook(char* lpLib, char* lpModule, int iBytes, BYTE *ucDstAddress, HOOK_ADDR *hook) {
  2.   HMODULE hLib;
  3.  
  4.   hLib = GetModuleHandle(lpLib);
  5.   if (hLib) {
  6.      BYTE *ucSrcAddress;
  7.      ucSrcAddress = (BYTE *) GetProcAddress(hLib, lpModule);
  8.  
  9.      if (ucSrcAddress) {
  10.         DWORD ulOldProtect;
  11. if ((Buffer = (BYTE *) malloc(iBytes + 5)) == NULL) return 0;
  12.         if (VirtualProtect((void *) Buffer, iBytes + 5, PAGE_EXECUTE_READWRITE, &ulOldProtect) == 0) return 0;
  13.  
  14.         memcpy(Buffer, ucSrcAddress, iBytes);
  15.  
  16.         Buffer += iBytes;
  17.         *Buffer = 0xE9;
  18.         Buffer++;
  19.         *((signed int *) Buffer) = ucSrcAddress - Buffer + (iBytes - 5) + 1;
  20.  
  21.         if (VirtualProtect((void *) ucSrcAddress, iBytes, PAGE_EXECUTE_READWRITE, &ulOldProtect) == 0) return 0;
  22.  
  23.         hook->ulDstModAddr = (unsigned long) ucDstAddress;
  24.         *ucSrcAddress = 0xE9;
  25.         ucSrcAddress++;
  26.         *((signed int *) ucSrcAddress) = ucDstAddress - ucSrcAddress - 4;
  27.  
  28.         FlushInstructionCache(GetCurrentProcess(), NULL, NULL);
  29.  
  30.         strcpy(hook->lpLib, lpLib);
  31.         strcpy(hook->lpModule, lpModule);
  32.         hook->uiBytes = iBytes;
  33.         hook->ulSrcModAddr = (unsigned long) ucSrcAddress;
  34.  
  35.         return true;
  36.  }
  37.   }
  38.   return false;
  39. }
  40.  
y se usaria asi:

Código
  1.  ret = Hook("psapi", "EnumProcesses", 7, (BYTE *) EnumProcesses_Hook, &addr);
  2.  pEnumProcesses = (BOOL (__stdcall *)(DWORD*, DWORD, DWORD*)) (Buffer - 7 - 1);
  3.  

saludos!!
« Última modificación: 12 Julio 2010, 15:35 pm por HaX991 » En línea

[Zero]
Wiki

Desconectado Desconectado

Mensajes: 1.082


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: API Hooking (C++)
« Respuesta #6 en: 12 Julio 2010, 15:56 pm »

Si puedes poner un compilado tambien me ayudaría, seguramente la línea:
Código
  1. *((signed int *) Buffer) = ucSrcAddress - Buffer + (iBytes - 5) + 1;
  2.  

Sea la causante del fallo, pero a ojo no me aclaro para calcular la distancia del salto  :xD.

Saludos
En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: API Hooking (C++)
« Respuesta #7 en: 12 Julio 2010, 16:16 pm »

Eso parece estar bien ... ¿No estara mal el hook mismo (EnumProcesses_Hook)? ¿Estas usando stdcall? Y de cualquier manera: ¿Cual es EXACTAMENTE el problema? Hasta ahora solo dijiste que "no logran" parchear una funcion ...
« Última modificación: 12 Julio 2010, 16:22 pm por Eternal Idol » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
HaX991

Desconectado Desconectado

Mensajes: 33



Ver Perfil
Re: API Hooking (C++)
« Respuesta #8 en: 12 Julio 2010, 16:51 pm »

Bueno las declaraciones y protipos de las funciones estan correctas, son estas.

Código
  1. BOOL WINAPI EnumProcesses_Hook  (DWORD*, DWORD, DWORD*);
  2. BOOL (__stdcall *pEnumProcesses)(DWORD*, DWORD, DWORD*);
  3.  

mm la idea es inyectar una dll al taskmgr.exe para modificar el resultado de la api "EnumProcesses" y ocultar un proceso, probe antes con la api "TerminateProcess" y va de lujo, la de terminateprocess son 5 bytes y se hookea bien y sirve todo perfect, pero al poner la otra algo en el hook ago mal k cuando la inyecto al llamar el taskmgr.exe (admin de tareas) a esa api entones falla y salta el tipico error de la memoria no se puede leer....

pero lo raro esk si hookeo la api "FindNextFileA" o "FindNextFileW" ambas de 7 bytes de salto sirve perfecto pero enumprocesses no...

EI: lo siento pero las reglas prohiben dejar binarios.
ai van el inyector y la dll.

abrir el admin de tareas, luego el inyector y poner "taskmgr.exe" e inyectarla, si pongo 7 bytes no peta pero tampoco hace nada el admin sirve = y eso k puse en la  funcion falsa

Código
  1. BOOL WINAPI EnumProcesses_Hook (DWORD *pProcessIds, DWORD cb, DWORD *pBytesReturned) {
  2.   return false;
  3. }
  4.  


alguna solucion?
« Última modificación: 12 Julio 2010, 17:17 pm por Eternal Idol » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: API Hooking (C++)
« Respuesta #9 en: 12 Julio 2010, 17:16 pm »

La solucion es hookear la funcion correcta, el Task Manager no usa esa funcion:
http://foro.elhacker.net/ingenieria_inversa/saber_q_apis_usa_el_task_manager-t188983.0.html
« Última modificación: 12 Julio 2010, 17:17 pm por Eternal Idol » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Win32 API Hooking
Hacking
nts94 0 2,726 Último mensaje 9 Febrero 2012, 23:54 pm
por nts94
API Hooking by IAT Patching
Análisis y Diseño de Malware
Binary_Death 0 2,272 Último mensaje 22 Abril 2012, 17:00 pm
por Binary_Death
Derechos de acceso y API Hooking « 1 2 »
ASM
fary 10 7,620 Último mensaje 23 Septiembre 2012, 20:14 pm
por .:UND3R:.
Hooking ntQuerySystemInformation.
Análisis y Diseño de Malware
APOKLIPTICO 5 4,331 Último mensaje 16 Noviembre 2012, 21:53 pm
por APOKLIPTICO
El arte del API Hooking.
Análisis y Diseño de Malware
fary 5 4,804 Último mensaje 18 Enero 2016, 03:35 am
por zerointhewill
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines