Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-01-2009
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Hola callbacking. He hecho la prueba que comentabas en tu anterior post, pero inyectando dll. He realizado un Hook a las APIs DrawTextA y DrawTextW. La inyección la he hecho en el notepad, como en tu ejemplo y también en el explorer. No he tenido problemas en capturar el texto o cambiarlo.

El problema mas común al hacer un Hook a una API suele ser la corrupción de la pila, no cuando un programa llama directamente a esa API, sino cuando la llamada se realiza desde otra API. Es fácil darse cuenta si el Hook lo hacemos en ASM y hacemos un debug. En el último ret nos vamos de bareta pues la pila se corrompió.

Los experimentos los he realizado en C y básicamente el sistema ha sido asi:

Código:
// Definición del tipo Puntero a la función API que vamos a Hookear.
typedef INT (__stdcall *PDrawTextW)(HDC hDC, LPCWSTR lpWStr, INT nCount, LPRECT lpRect, UINT uFormat);

// Declaración de un tpunero de ese tipo.
PDrawTextW Ini_DrawTextW = 0;

//............
// Preparación del Hook
// Sustitución de los 5 primeros Bytes de DrawText por JMP HookDrawText
// Ini_DrawText es un puntero a una función con la copia de los Bytes sustituidos de la API original seguido de JMP al 6º Byte de esa API. Para esto se reserva espacio de 10 Bytes mínimo.
//...........

// Función Hookeada:
// Fundamental que sea __stdcall para no corroper la pila....
INT __stdcall HookDrawText(HDC hDC, LPCWSTR lpWStr, INT nCount, LPRECT lpRect, UINT uFormat)
{
   ......
   ......
   // Lamada a la API original. En este punto podemos volver a tomar el control antes de retornar.
   return Ini_DrawTextW(hDC, lpWStr, nCount, lpRect, uFormat); 
}
Existe otro problema, una misma API puede precisar sobreescribir un número diferente de Bytes para producir el salto, dependiendo de las diferentes versiones del S.O. De forma que puede no funcionar en máquinas diferentes. Esto obliga a un estudio particular de la máquina en cuestión o a un desensamblado por código en una función Hook escrita para tal fin.

El tema es engorroso

Saludos.
Responder Con Cita
  #2  
Antiguo 31-10-2018
jairo10 jairo10 is offline
Registrado
NULL
 
Registrado: oct 2018
Posts: 4
Poder: 0
jairo10 Va por buen camino
Que buena explicación de este tema para avanzar mas gracias
Responder Con Cita
  #3  
Antiguo 17-03-2023
wonderDev wonderDev is offline
Registrado
 
Registrado: dic 2015
Posts: 9
Poder: 0
wonderDev Va por buen camino
Angry Y al final ?

Bueno, al final me quede sin saber como Inyectar código. Nunca se termino el hilo.
Responder Con Cita
  #4  
Antiguo 18-03-2023
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
El hilo quedó incompleto. si tienes interés en estos temas, puedes encontrar información aquí:

Inyección directa de código en C y en delphi
Inyección directa de código II
HOOK a la API en delphi y en C
HOOK a la API64
API UnHooker deshaciendo un Hook a la API tipo trampolín
¿Protegernos contra inyecciones dll?
Shellcode en C compatible con distintas inyecciones
Encriptando funciones hasta conseguir un shellcode en delphi


Seguro que me dejo cosas en el tintero


Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Thread y servidor DCOM externo al proceso ( EXE ) Aldo OOP 1 15-09-2006 17:39:47
Como utilizar un componente externo? Sergei OOP 2 24-01-2006 19:12:24
Inyectar proceso conde API de Windows 4 10-09-2005 15:52:17
Como se puede programar directamente??? Antuan Varios 10 04-08-2005 08:04:38
Como correr un archivo externo? fayala Firebird e Interbase 3 07-04-2005 03:56:00


La franja horaria es GMT +2. Ahora son las 09:18:24.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi