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 23-07-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cool H00k

Y bueno, no podía quedarme con los brazos cruzados por más tiempo. Alguien inició un hilo pidiendo ayuda para hacer tal cosa osada; no me vino más a la mente que dejarlo pasar pues no es algo que pueda enseñarse como usar una simple API… ahora aprovecho mi tiempo de ocio para dar a las futuras generaciones tal enseñanza del modo mas digerible posible.

Todavía no me queda muy claro cuál fue el motivo para desperdiciar de una forma tan descarada los recursos (me refiero a la forma en que el Güindos administra los procesos y su contexto). Sin embargo funciona independientemente de que sea la forma mas optima en que pueda haber sido realizado (desde mi humilde punto de vista), el funcionamiento no a cambiado substancialmente, pues hasta ahora se siguen explotando fallas lógicas que datan desde el desde el Güindos95.

Al ser cargado (ejecutado) un proceso en memoria, éste carga a su ves las librerías que necesita para funcionar adecuadamente, significa que cada proceso tiene una copia “privada” de las librerías utilizadas. Cada librería tiene funciones, y en una determinada zona tiene una lista de los punteros de las funciones exportadas; una de las formas de realizar un hook, es modificar dichos punteros de una determinada librería para que el proceso en ves de llamar la función exportada, llame a una definida por nosotros, sin embargo las funciones internamente llaman a otras funciones de la misma librería por motivos específicos, y tales llamadas se realizan directamente. Lo que permite hacer otro tipo de hook, realizar un proceso de des-ensamblado a dicha librería y modificar también las llamadas internas. Finalmente se puede realizar un proceso de Debug, sin embargo y como los anteriores requieren un amplio conocimiento y varias horas de dedicación. Esto sin tomar en cuenta a aquellos que explican la realización de un hook al mismo núcleo (kernel):

Código Delphi [-]
function NtCreateProcess(lpProcessHandle: PCardinal; dwDesiredAccess: Cardinal; lpObjectAttributes: Pointer; dwParentProcess: Cardinal; InheritObjectTable: LongBool; dwSectionHandle, dwDebugPort, dwExceptionPort: Cardinal): Cardinal; stdcall; external 'ntdll.dll';

Mi hermoso ejemplo funciona de la forma más sencilla posible, y procura no develar directamente sus encantos. Básicamente cuela una llamada al IternalHook, en la misma librería kernel32.dll la API CreateProcessInternalW, sin saber lo que hace llama a nuestra función antes de crear el nuevo proceso. Finalmente la función Decide, recibe los dos parámetros que nos importan; y como esta escrito en el ejemplo escoge cuál de ellos contiene el nombre de la aplicación, por lo que debe ser modificada para detener la creación del nuevo proceso.

Código Delphi [-]
library Hook; uses Windows; // by cHackAll
 
procedure Validate(lpFileName: PWideChar);
begin
 if MessageBoxW(0, lpFileName, 'Deseas ejecutar esta aplicacion?', MB_YESNO) = IDNO then
  lpFileName[0] := #0;
end;
 
procedure Decide(lpApplicationName, lpCommandLine: PWideChar); stdcall;                                                        // Don't change this declaration!
var
 Char: WideChar;
 len, pos: Cardinal;
begin
 if Assigned(lpApplicationName) then
  Validate(lpApplicationName)
 else
  begin
   Char := lpCommandLine[0];
   if Char = '"' then
    Inc(lpCommandLine)
   else
    Char := ' ';
   Pos := 0;
   len := lstrlenW(lpCommandLine);
   lstrlenW(lpApplicationName);
   while (pos <> len) and (lpCommandLine[Pos] <> Char) do Inc(Pos);
    lpCommandLine[Pos] := #0;
   Validate(lpCommandLine);
   if pos <> len then
    lpCommandLine[pos] := Char;
  end;
end;
 
procedure InternalHook;                                                                                                        // Don't change!
asm
 db 059h,0E8h,000h,000h,000h,000h,051h,08Bh,045h,010h,050h,08Bh,045h,00Ch,050h call Decide
end;
 
procedure Inject(api, hook: Pointer; var Dummy: Cardinal);                                                                     // Don't change!
asm
 db 083h,0C0h,00Bh,042h,042h,050h,052h,051h,06Ah,040h,06Ah,004h,050h,06Ah,0FFh,051h,06Ah,040h,06Ah,004h,  052h,06Ah,0FFh,08Bh,01Dh
 dd VirtualProtectEx+2 db 0FFh,013h,0FFh,013h,05Ah,058h,089h,0C1h,003h,008h,029h,0D1h,089h,00Ah,029h,0C2h,083h,0EAh,006h,089h,  010h
end;
 
var Dummy: Cardinal;
begin
 Inject(GetProcAddress(GetModuleHandle('kernel32.dll'), 'CreateProcessInternalW'), @InternalHook, Dummy);                      // Dont't use with other APIs
end.

La librería esta exclusivamente diseñada para realizar hook a la API CreateProcessInternalW, pues ésta es la API previa a la creación de un nuevo proceso, y ha sido escrito de tal forma que es un poco más difícil modificarlo.

La forma de puede probar la librería es la siguiente:

Código Delphi [-]
uses Windows;
var
 si: TStartupInfo = (cb: SizeOf(TStartupInfo));
 pi: TProcessInformation;
begin
 LoadLibrary('hook.dll');
 WinExec('explorer', SW_SHOW);
 CreateProcess(nil, 'notepad', nil, nil, False, 0, nil, nil, si, pi);
end.

Probado con Delphi 6, 7se, 2007. bajo Güindos eQuispe & Vista

Última edición por cHackAll fecha: 23-01-2008 a las 03:51:53. Razón: Quito mi correo sin uso
Responder Con Cita
  #2  
Antiguo 13-08-2007
l30 l30 is offline
Miembro
 
Registrado: jun 2007
Posts: 36
Poder: 0
l30 Va por buen camino
Gracias

Descúlame cHackAll por no haberte contestado antes, estaba de viaje y no pude acercarme al ordenador ni por un momento. E visto el post y me a dejado con la boca abierta, te estoy muy agradecido por la ayuda.
Responder Con Cita
  #3  
Antiguo 16-02-2008
fide fide is offline
Miembro
 
Registrado: oct 2006
Posts: 331
Poder: 18
fide Va por buen camino
Oyeme, verdad que lo que no esta en clubdelphi no esta en ningun otro lado. Es por eso que lo recomiendo tanto a todos mis amigos...
Responder Con Cita
  #4  
Antiguo 16-02-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Cita:
Empezado por cHackAll Ver Mensaje

Mi hermoso ejemplo funciona de la forma más sencilla posible,
Si, sí, estoy de acuerdo, muy sencillo e intuitivo

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 29-02-2008
jw4v32 jw4v32 is offline
Registrado
 
Registrado: feb 2008
Posts: 8
Poder: 0
jw4v32 Va por buen camino


hola a todos esta muy bueno el ejemplo, resulta que tengo un problema lo que yo quiero interceptar es otra API no la de CreateProcess, la de GetDesktopWindow, y resulta que no tengo las habilidades ni los conocimientos de como hacerlo, ademas de eso cuando dicha fucnion sea llamada hacer un windows.beep y guardar el log de la ruta en C:\log.txt, ya se como hacer para que la aplicacion corra sin ventana y demas.



es que creo que tengo algo en la Pc y necesito saberlo, junto con la ruta y ademas, mi antivirus no me sirve (NOD32)


alguien me puede hechar una mano
Responder Con Cita
  #6  
Antiguo 29-02-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cita:
Empezado por jw4v32 Ver Mensaje
...yo quiero interceptar ... la de GetDesktopWindow ... cuando dicha fucnion sea llamada hacer un windows.beep y guardar el log de la ruta en C:\log.txt...
...es que creo que tengo algo en la Pc y necesito saberlo, junto con la ruta y ademas, mi antivirus no me sirve (NOD32)...
Hola jw4v32, entiendo lo que deseas hacer pero no entiendo que tiene que ver la API GetDesktopWindow con tener "algo" (por favor explicalo), tampoco entiendo eso de guardar la ruta... de qué, del ejecutable que llama a dicha API?
Responder Con Cita
  #7  
Antiguo 29-02-2008
jw4v32 jw4v32 is offline
Registrado
 
Registrado: feb 2008
Posts: 8
Poder: 0
jw4v32 Va por buen camino
gracias por responder no se si sera posible hacer lo que digo, ps si no no importa, lo de la API GetDesktopWindow andube investigando en una pagina de ayudavirus donde dice que el 99 % de los troyanos actuales usan dicha funcion para capturar el escritorio de la victima (en este caso yo) y mandarla de vuelta (en formato de imagen) al atacante, ps yo tengo varios cartelitos que me aperecen que se que no son de window y que alguien me los manda por ej ("boludo, boludo deja de ver paginas porno Jajajajaja"), se me cierran las ventanas por asi al toque, etc. Pero estoy seguro de que mas de un programa debe de interactuar con dicha API cada 2 por 3 como es el caso del Explorer.exe, pero si el virus esta en formato de libreria (DLL), de proceso ya anlize todo y segun mi son normales, si podria sacarle la ruta a la dll que realiza dicha llamada a la api, entonces podria borrarla normalmente (si estoy 100% seguro de que es esa)entrando a window en modo consola (F8), no se si me explico bien esta ves.
Responder Con Cita
  #8  
Antiguo 06-04-2014
FENIXadr FENIXadr is offline
Miembro
 
Registrado: may 2010
Ubicación: Córdoba - Cba. - Argentina
Posts: 104
Poder: 14
FENIXadr Va por buen camino
Hola gente... voy a quitarle un poco de polvo a este hilo porque me hace mucha falta y no me funciona el ejemplo de rounin... he buscado por muchos lugares y no he encontrado nada que me saque del paso.. el ejemplo de cHackAll me va de mil maravillas .. pero claro ese es para casos puntuales.. necesitaria monitorear todos los procesos (de ser posible) que se crean.. tengo win 7 con delphi 7SE y cuando corro el ejemplo de rounin no hace nada.. no me detecta absolutamente nada... encima el link a la pagina de trucos ya no funciona (http://www.q3.nu/trucomania/).. alguna ayuda por ahi??

desde ya muchas gracias..
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
Problemilla con Hook ixMike API de Windows 1 11-08-2006 01:48:19
Hook de Teclado + DLL FeLiXxUcO C++ Builder 12 12-02-2006 19:59:53
Hook global pepelaalfa API de Windows 2 08-12-2005 18:24:27
Hook Roman Con ECO ECO ECO!! marceloalegre Varios 3 03-11-2005 15:43:41
Hook de teclado! marceloalegre Varios 2 17-10-2005 00:59:47


La franja horaria es GMT +2. Ahora son las 11:22:49.


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