You are on page 1of 21

Bienvenido(a), Visitante. Por favor, ingresa o regstrate.

Siempre

Buscar

Ingresar

Noticias:

Ingresar con nombre de usuario, contrasea y duracin de la


sesin

Inicio

Ayuda

Buscar

C alendario

Blog

Ingresar

Registrarse

C omunidad Delphiaccess C OLABORAC IN Tutoriales (Moderador: egostar)


HOOK a la API en delphi (trampoln)

anterior prximo
Pginas: [1]

Ir Abajo

Autor

I M P RI M I R

Tema: HOOK a la API en delphi (trampoln) (Ledo 1150 veces)

0 Usuarios y 2 Visitantes estn viendo este tema.

escafandra
Moderadores

open in browser PRO version

HOOK a la API en delphi


(trampoln)
Topic Start: 05 de noviembre de 2012,

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

12:08:03
Thank You
-Given: 103
-Receive: 734

Como en algn sitio coment, si me animo publico un tutorial sobre este


tema...
Una advertencia antes de comenzar. El cdigo de este tutorial es funcional y
est diseado para ser compilado y trabajar en un entorno de 32 bits.

Mensajes: 2,512
C alificaciones: +776/-0
Sexo:

EL HOOK A LA API EN DELPHI


Existen dos formas bsicas de realizar un Hook a la API y mltiples variantes.
Ninguna tcnica es perfecta, todas tienen sus ventajas y sus inconvenientes.
Todas requieren inyectar cdigo en el proceso anfitrin.

- EL Hook en la IAT:
Quizs la forma mas sencilla sea el Hook en la IAT. La IAT es una Tabla en la
cabecera PE de todo ejecutable y DLL que contiene las direcciones de las API y
funciones que importa de forma esttica (en tiempo de compilacin).
Cambiando el valor de esas direcciones a una funcin Gancho tenemos
realizado el Hook. Es un mtodo muy estable pero requiere cambiar el valor de
la direccin en todos los mdulos del proceso que importen dicha API. No
funciona para API importada de forma dinmica, es decir con GetProcAddress.

- El Hook Trampoln:
Con esta tcnica modificamos instrucciones asm de la API para provocar un
salto a nuestro cdigo. Nuestro cdigo debe ser capaz de llamar, despus a la
API original sin provocar errores. Esta tcnica es algo mas compleja que la
anterior, funciona para APIs importadas tanto de forma esttica como dinmica

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

pero se pueden cometer errores al medir mal el nmero de bytes sobrescritos,


partiendo una instruccin asm y alterando, con ello, el sentido del cdigo.

Hace un tiempo, seoane public en su web un cdigo para realizar un Hook a


la IAT escrito en delphi. Yo me voy a centrar en la tcnica del trampoln.

La filosofa de un Hook de tipo trampoln:


Como expliqu antes tenemos que buscar una fraccin de cdigo de la API
original que podamos sobrescribir con cierta tranquilidad. Lo ideal es encontrar
una zona de longitud 5 bytes, en una o varias instrucciones completas asm. Si
nos fijamos como comienza el cdigo asm de una API, casi siempre se repite la
misma secuencia:
Cdigo: [Se le ccionar]

8BFF
55
8BEC

mov edi, edi


push ebp
mov ebp, esp

Lo ideal sera que esto fuera una constante, pero me encontrado APIs con
codificacin distinta en distintos PCs, posiblemente debido a las distintas
actualizaciones del S.O.
Otro buen punto, puede ser buscar una instruccin de salto (jmp) o llamada a
subrutina (call) pero lgicamente no la encontraremos en sitios fijos,
entorpeciendo un sistema automtico de Hook. Esto nos obliga, en cierta
forma, a proceder a un desensamblado de parte del cdigo, bien manual para
cada API, bien automtico. Nosotros vamos a usar un desensamblador de

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

longitud que nos informa de la longitud de las instrucciones asm. Esta


herramienta es justo lo que nos hace falta para controlar que no partimos
instrucciones al realizar la preparacin del hook.
El cdigo que muestro en este tutorial se centra en los 5 primeros bytes de la
API. La filosofa ser establecer un puntero especial, del mismo tipo que la API
que vamos a enganchar. En el cdigo para automatizar Hooks llamar a este
puntero, ToAPI. Vamos a reservar memoria para l de al menos mas de 10
bytes(los 5 o mas copiados desde la API original, ms otros 5 para un salto).
Tambin escribiremos la funcin HOOK o suplantadora, que ser declarada
exactamente como la API original, yo la suelo denominar como la API vctima
con el prefijo New. Los primeros 5 o mas Bytes de la API original sern
copiados al Buffer apuntado por ToAPI, de forma que se copien instrucciones
completas y si hubiese algn salto habra que recalcularlo. Detrs de los 5 o
mas bytes copiados, escribiremos una instruccin de salto ($E9) que apunta al
resto de cdigo no copiado de la API original. Esto es para poder devolver el
flujo del programa al punto donde lo interrumpiremos. En la API original
rescribiremos los 5 bytes con otro salto ($E9) que apunta a nuestra funcin
Hook (NewAPI). Cuando nuestro Hook necesite llamar a la API original,
usaremos el puntero ToAPI como si fuese una funcin, que de hecho lo es.
El cdigo de este tutorial es operativo y permite automatizar un Hook a
cualquier API a nivel usuario de forma automatizada.
Un ejemplo vale mas que mil palabras, vamos a realizar un Hook a la API
MessageBox en nuestro propio proceso. Comenzamos por un esquema de
cmo queda el cdigo asm que vamos a alterar:

ltima Modificacin: 05 de noviembre de 2012, 23:16:57 por escafandra

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

En lnea

pdfcrowd.com

seoane, Rolphy Reyes, Delphius, cadetill


Follow members
gave a thank to your For this post, 4 members gave a thank you!
post:

escafandra
Moderadores

Re: HOOK a la API en delphi


(trampoln)
Respuesta #1: 05 de noviembre de 2012,
12:12:38

Thank You
-Given: 103
-Receive: 734

Para nuestro propsito vamos a necesitar usar determinadas APIs de


Windows:

Mensajes: 2,512
C alificaciones: +776/-0
Sexo:

LoadLibrary: Carga una dll, si ya est cargada aumenta el contador en uno.


FreeLibrary: Decrementa el contador de carga de dll y a cero la descarga.
GetModuleHandle: Encuentra el HMODULE de una dll si est cargada.
GetProcAddress: Encuentra el puntero a una funcin exportada por una dll.
VirtualAlloc: Localiza memoria.
VirtualFree: Libera memoria
VirtualProtectEx: Cambia los permisos de escritura de un bloque de memoria.
FlushInstructionCache: Actualiza el cach de instrucciones del microprocesador.
CopyMemory: Copia un bloque de memoria en otro.

El cdigo de alto nivel:


Comenzamos con los preparativos antes de entrar en la parte automtica de
bajo nivel:
[delphi]
// Definicin de tipo puntero a la API MessageBox
type PMESSAGEBOX = function(hWnd: THandle; lpText, lpCaption: PCHAR;
uType: integer): Integer; stdcall;

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

var
// Puntero a un buffer que representa la API original
// Al hacer el Hook reservamos memoria y copiamos los 5 bytes
// y un salto a la API original
OMessageBox: PMESSAGEBOX = nil;

implementation
// La API hookeada
function NewMessageBox(hWnd: THandle; lpText, lpCaption: PCHAR; uType:
integer): Integer; stdcall;
begin
// OMessageBox representa la API original.
// Cambiamos parmetros para delatar el Hook...
Result:= OMessageBox(hWnd, 'MessageBox HOOKED ', lpCaption, uType or
MB_ICONEXCLAMATION);
end;
[/delphi]
El cdigo de bajo nivel:
Bueno, el resto del trabajo es el duro, bajo nivel y punteros.
El cdigo, que he escrito y os presento, automatiza este trabajo. Creo que si le
prestis atencin se puede entender bien.
[delphi]
// Calcula la direccin de la API original para llamar a la siguiente funcin
procedure InstallHook(HookAPI: Pointer; var ToAPI: Pointer; dllName, ApiName:
PCHAR; Resume: BOOL);
var

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

hLib: HMODULE;
API: PBYTE;
begin
hLib:= GetModuleHandle(dllName);
if hLib = 0 then hLib:= LoadLibrary(dllName);
if hLib <> 0 then
begin
API:= GetProcAddress(hLib, ApiName);
InstallHookFromAddr(HookAPI, ToAPI, API, Resume);
end;
end;
// Realiza el Hook a la API. Devuelve un puntero a la funcin puente ToAPI
// Si Resume = trae, el hook est operativo.
procedure InstallHookFromAddr(HookAPI: Pointer; var ToAPI: Pointer; API:
Pointer; Resume: BOOL);
var
NBytes: DWORD;
OldProtect: DWORD;
begin
// Bytes a sobreescribir de la API
NBytes := GetOverloadBytes(API);
// reservar memoria para ToAPI, el camino de vuelta...
ToAPI := VirtualAlloc(nil, NBytes+5, MEM_COMMIT,
PAGE_EXECUTE_READWRITE);
// Preparar la funcin ToAPI
// Autorizo escribir en ToAPI, es un puntero a una funcin...
VirtualProtectEx(THandle(-1), ToAPI, NBytes+5, PAGE_EXECUTE_READWRITE,
OldProtect);
// Copio los primeros bytes de la api original
ASMmemcpy(ToAPI, API, NBytes);
// Escribo un salto relativo a la API original
PBYTE(DWORD(ToAPI) + NBytes)^:= $E9 ; //jmp

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

PDWORD(DWORD(ToAPI) + NBytes+1)^:= DWORD(API) - DWORD(ToAPI) - 5;


VirtualProtectEx(THandle(-1), ToAPI, NBytes+5, OldProtect, PDWORD(nil)^);
// Preparar la API a Hookear
if Resume then ResumeHookFromAddr(HookAPI, API);
// Obliga al procesaror a alcualizar el cache de instruciones
// pues las hemos modificado...
FlushInstructionCache(GetCurrentProcess, nil, 0);
end;
// Esta funcin escribe el salto en la API original
// Deja el Hook totalmente operativo
procedure ResumeHookFromAddr(HookFunc, API: Pointer);
var
OldProtect: DWORD;
begin
if (HookFunc = nil) or (API = nil) then exit;
// Autorizo escribir en la API a Hookear
VirtualProtectEx(THandle(-1), API, 5, PAGE_EXECUTE_READWRITE,
OldProtect);
// escribimos el salto: jmp
PBYTE(API)^:= $E9;
// escribimos la direccin relativa del salto
PDWORD(DWORD(API)+1)^:= DWORD(HookFunc) - (DWORD(API) + 5);
VirtualProtectEx(THandle(-1), API, 5, OldProtect, PDWORD(nil)^);
end;
// Para llamar a ResumeHookFromAddr desconociendo la direccin de la API
procedure ResumeHook(HookFunc: Pointer; dllName, ApiName: PCHAR);
var
API: Pointer;

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

begin
if HookFunc = nil then exit;
API:= GetProcAddress(GetModuleHandle(dllName), ApiName);
if API <> nil then
ResumeHookFromAddr(HookFunc, API);
end;
[/delphi]
Ya tenemos hecho el Hook. Parte del cdigo no est expuesto. Quiero
comentar que la funcin GetOverloadBytes calcula el nmero de bytes que
debemos traspasar sin peligro al Buffer apuntado por ToAPI. Para calcularlo
usa un desensamblador de longitud de instruccin. Se puede prescindir de ello
pero se corre el riesgo de colgar la aplicacin vctima si la API hookeada
comienza con instrucciones completas en 6 bytes, por ejemplo; partiramos
una instruccin asm perdiendo el sentido del resto del cdigo...!
Ahora faltan las labores de limpieza. Deberamos ser capaces de deshacer el
hook dejando todo como estaba antes de nuestra intromisin.
[delphi]
// Suspende momentneamente el Hook sin desinstalar ToHook
// Restaura los Bytes de la API original guardados en ToAPI
procedure SuspendHookFromAddr(ToAPI, API: Pointer);
var
OldProtect: DWORD;
begin
if(ToAPI = nil) or (API = nil) then exit;
// Autorizo escribir en la API Hookeada
VirtualProtectEx(THandle(-1), API, 5, PAGE_EXECUTE_READWRITE,
OldProtect);
CopyMemory(API, ToAPI, 5);
VirtualProtectEx(THandle(-1), API, 5, OldProtect, PDWORD(nil)^);
end;

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

procedure SuspendHook(ToAPI: Pointer; dllName, ApiName: PCHAR);


var
API: Pointer;
hLib: HMODULE;
begin
if(ToAPI = nil) or (dllName = nil) or (ApiName = nil) then exit;
hLib:= GetModuleHandle(dllName);
if hLib = 0 then hLib:= LoadLibrary(dllName);
if hLib = 0 then exit;
API:= GetProcAddress(hLib, ApiName);
if API <> nil then
SuspendHookFromAddr(ToAPI, API);
end;
// ToAPI: Funcin preparada para saltar a la API original.
// Contiene los primeros Bytes de la API original y un salto a ella
procedure UnInstallHook(var ToAPI: Pointer; dllName, ApiName: PCHAR);
var
hLib: HMODULE;
API: Pointer;
begin
hLib:= GetModuleHandle(dllName);
if hLib = 0 then hLib:= LoadLibrary(dllName);
if hLib <> 0 then
begin
API:= GetProcAddress(hLib, ApiName);
if API <> nil then UnInstallHookFromAddr(ToAPI, API);
end;
end;

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

// Suspende el Hook restaurando la API original y libera el Buffer ToAPI


procedure UnInstallHookFromAddr(var ToAPI: Pointer; API: Pointer);
begin
if (ToAPI = nil) or (API = nil) then exit;
SuspendHookFromAddr(ToAPI, API);
VirtualFree(ToAPI, 0, MEM_RELEASE);
ToAPI:= nil;
end;
[/delphi]
Bueno este es el principal del cdigo. Subo un archivo con todo el fuente y un
proyecto listo para compilar.
Debis usar esto con cuidado pues un error va a hacer caer la aplicacin. Como
coment antes este ejemplo realiza un Hook a MessageBox en nuestra propia
aplicacin, como ejemplo vale, pero el objetivo til sera una aplicacin ajena.
Para ello escribiremos el Hook en una dll que inyectaremos en el proceso
anfitrin. Esa dll, una vez inyectada realizara el Hook y desde ese momento ya
tenemos el control de nuestra API...
Los Platinos podris disfrutar de un Hook a un par de APIs un tanto especiales
en un proceso que no lo es menos.
Espero haber sabido explicarme y que este pequeo tutorial sirva de ayuda.

PD: Subo el cdigo


Saludos.
ltima Modificacin: 06 de noviembre de 2012, 12:04:01 por escafandra

egostar
Administrador

open in browser PRO version

En lnea

Re: HOOK a la API en delphi


(trampoln)
Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

(trampoln)

Administrador

Respuesta #2: 05 de noviembre de


2012, 12:18:46

Thank You
-Given: 1199
-Receive: 647

Es facinante el asunto de acceder a la API de windows, pero dado que mi


conocimiento est muy por debajo de lo que expones, quiero preguntar,
Para que nos sirve hacer esto ?

Mensajes: 9,915
C alificaciones: +704/-7
Sexo:

Con ese salto, ests modificando el comportamiento de la funcin (en este


caso) MessageBoxA ?
Que pasa con el asunto de las restricciones a WRT en Windows8 ?

coding my life

Se est sobreescribiendo el API ?


Perdn pero soy un total ignorante en esto de las API's
Saludos
En lnea

"Si no quieres que la gente se olvide de ti apenas te mueras, escribe algo que valga la
pena leerse o valga la pena escribirse."- Benjamin Franklin
"Los programadores hicimos un pacto con dios, el no hace sistemas y nosotros no
hacemos milagros."- Annimo

escafandra
Moderadores

open in browser PRO version

Re: Re: HOOK a la API en delphi


(trampoln)

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

(trampoln)

Moderadores

Respuesta #3: 05 de noviembre de


2012, 12:32:56

Thank You
-Given: 103
-Receive: 734

Te respondo en desorden...
Cita de: egostar en 05 de noviembre de 2012, 12:18:46
Se e st sobre e scribie ndo e l API ?

Si, la estamos invadiendo, ultrajando...


Mensajes: 2,512
C alificaciones: +776/-0
Sexo:

Cita de: egostar en 05 de noviembre de 2012, 12:18:46


Para que nos sirve hace r e sto ?

Para espiarla y variar su comportamiento si procede. Este ejemplo la espa y


extrae datos. Este otro hace variar el comportamiento. Este otro hilo est
basado en una miniApp antivirus que me tuve que hacer, usaba un Hook a
CreateProcessInternalW.
Cita de: egostar en 05 de noviembre de 2012, 12:18:46
C on e se salto, e sts m odificando e l com portam ie nto de la funcin (e n e ste caso)
Me ssage Box A ?

En este caso si pero puedes desear slo vigilar...


Cita de: egostar en 05 de noviembre de 2012, 12:18:46
Q ue pasa con e l asunto de las re striccione s a W R T e n W indows8 ?

Ya lo iremos viendo...

Saludos.

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

ltima Modificacin: 05 de noviembre de 2012, 14:32:54 por escafandra

En lnea

egostar
Follow members
gave a thank to your For this post, 1 member gave a thank you!
post:

Re: HOOK a la API en delphi


(trampoln)

cadetill
Moderadores

Respuesta #4: 06 de noviembre de


2012, 08:44:00

Thank You
-Given: 139
-Receive: 193

Yo slo puedo quitarme el sombrero con vuestro conocimiento del API de


Wndows :S
En lnea

Mensajes: 946
C alificaciones: +199/-0
Sexo:

Delphius
Administrador
Thank You
-Given: 217
-Receive: 334

Mensajes: 4,133

open in browser PRO version

Salu2
cadetill

Re: HOOK a la API en delphi


(trampoln)
Respuesta #5: 06 de noviembre de
2012, 16:46:44

La idea y el propsito de un hook entiendo. Ahora bien, meterme


conceptualmente en sus berenjales primero debo morir y nacer dos veces! A
mi slo me queda leer y sentirme chiquitito antes semejantes explicaciones de
los genios.
Saludos,
Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Mensajes: 4,133
C alificaciones: +369/-2
Sexo:
El polimorfismo seguir
siendo parte de mi vida?

jeivarmarr
Registrado

jeivarmarr
Registrado

Se ensea por amor a los dems, se aprende por amor a la verdad


Cuanto ms se busca la verdad, sin llegar a la perfeccin, anhelamos saber lo
que falta
San Agustn

Re: HOOK a la API en delphi


(trampoln)

Gracias por este gran tutorial pero me causo curiosidad lo de windows 8


actualmente tengo windows 8 y he intentado lo del hook y nunca me funciono,
podrias explicarme mejor sobre la proteccion.
En lnea

Re: HOOK a la API en delphi


(trampoln)
Respuesta #7: 03 de mayo de 2013,
20:06:11

Thank You
-Given: 0
-Receive: 0
Mensajes: 4
C alificaciones: +0/-0
Sexo:

escafandra

open in browser PRO version

C omo redactar mensajes - Uso de etiquetas

Respuesta #6: 03 de mayo de 2013,


19:45:32

Thank You
-Given: 0
-Receive: 0
Mensajes: 4
C alificaciones: +0/-0
Sexo:

Moderadores

En lnea

Una pregunta mas, para hacerlo a un proceso externo por ejemplo Calc.exe,
como lo hara?
En lnea

Re: HOOK a la API en delphi


(trampoln)
Respuesta #8: 05 de mayo de 2013,

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Respuesta #8: 05 de mayo de 2013,


17:52:35
Thank You
-Given: 103
-Receive: 734

jeivarmarr, para realizar un Hook a la API precisas inyectar cdigo en tu


proceso anfitrin. El cdigo lo inyectas con una dll o de forma directa. El
mtodo mas comn de intectar una dll es obigar su carga con
CreateRemoteThread aqu dej un ejemplo en C. Las tcnicas de inyeccin
directa son mas complejas, dej un tutorial aqu.

Mensajes: 2,512
C alificaciones: +776/-0
Sexo:

No se puede inyectar cdigo compilado de 32bits en procesos de 64bits ni de


forma directa ni con dll. Solucin: usar un compilador de 64 bits.
El Hook a la API que describo es vlido slo en teora para win8 pero en la
prctica usa un desensamblador de 32 bits lo que lo hace no operativo para 64
bits
No dispongo de un PC con Win8, por el momento, con lo que no puedo hacer
pruebas para responderte acerca de los sistemas de seguridad.

Saludos.
En lnea

c0lo
Miembro Platino
Thank You
-Given: 4
-Receive: 0

Re: HOOK a la API en delphi


(trampoln)
Respuesta #9: 06 de mayo de 2013,
22:07:55

Hola escafandra,
Si uno deseara hacer el problema inverso, es decir, si uno se encuentro con
algunos Hooks en algunas apis como podra uno atacar o empezar a
desarrollar una solucin o hacer un unhook a dicha api o n-api?

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Mensajes: 241
C alificaciones: +3/-0
Sexo:

Digamos que no es el clsico trampoln de 5 bytes si no que uno se encuentra


con una modificacin de la api del tamao de 6 bytes?

Siempre aprendiendo ...

Es decir, tenemos el inicio de una api de la siguiente forma:


[asm]mov edi,edi
push ebp
mov ebp,esp
push ecx
or dword ptr [ebp-04],FF[/asm]
Pero luego de ejecutar alguna programa X, la api su parte inicial es modificada
a:
[asm]jmp dword ptr [71A1001E]
or dword ptr [ebp-4], FFFFFFFF[/asm]
Es decir, en ves de modificar los primeros 5 bytes el hook del programa X ha
modificado los primeros 6 bytes, que hizo? o cual fue su tipo de trampolin y
como uno podria hacer un unhook en este caso y cualquiera que fuera el
unhook?

Saludos
En lnea
Disculpen si no me expreso correctamente, pero se me chispoteo...

c0lo
Miembro Platino

open in browser PRO version

Re: HOOK a la API en delphi


(trampoln)
Respuesta #10: 06 de mayo de
2013, 22:19:19
Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Thank You
-Given: 4
-Receive: 0

Epa epa... creo que sufri un lapsus, Porque si deseo hacer el unhook solo
sobre escribo los bytes que inicialmente tenia la api o reconstruyo la api y listo.
Oh no?
Bueno mi pregunta es como puedo utilizar la misma api con su hook sin realizar
el hook, no recuerdo como se llama este metodo... Pero se podria?

Mensajes: 241
C alificaciones: +3/-0
Sexo:
Siempre aprendiendo ...

escafandra
Moderadores

Disculpen si no me expreso correctamente, pero se me chispoteo...

Re: HOOK a la API en delphi


(trampoln)
Respuesta #11: 07 de mayo de
2013, 13:16:12

Thank You
-Given: 103
-Receive: 734

Mensajes: 2,512
C alificaciones: +776/-0
Sexo:

open in browser PRO version

En lnea

Hola c0lo si se podra reconstruir la API original. Pero puede ser algo
complicado. Deberemos desensamblar y seguir el cdigo haciendo nfasis en
los saltos. La API original tiene direcciones del orden 7EXXXXXXh y el resto del
cdigo (Hook) direcciones mas bajas. Si la API original est hookeada con un
jmp seguiremos el hook hasta encontrar el jmp de vuelta (salto relativo a
direcciones del orden de 7EXXXXXXh). Unas cuantas instrucciones antes nos
ensearn el clsico "paquete de inicio":
[asm]mov edi,edi
push ebp
mov ebp,esp
..... quizs mas instruciones
jmp XXXXX[/asm]
Ese paquete hasta el salto de vuelta (sin contar ste) ser lo que debemos
sobreescribir en la API Hookeada para devolverla a su estado original.

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

El tema se puede complicar si el sistema de hook es con call, entonces


buscaremos un ret pero existen trucos para volver con un salto y no con ret.
As mismo en el paquete que debemos restaurar pueden aparecer saltos
intermedios que no correspondan al punto de vuelta... En general el salto de
vuelta no debe estar mucho mas alejado de esos 5 bytes clsicos del
trampoln, si fuere as, ese salto no es el de vuelta, continuaremos un poco
mas adelante hasta encontrarlo, pero el salto intermedio deberemos
"convertirlo" pues es relativo, para adaptarlo al cdigo de la API cuando la
restauremos.
Una tcnica mas sencilla es hacer un hook al hook, es decir cambiar el cdigo
hookeado colocando un salto directo al "paquete de vuelta" a la API original.
Bastar localizar el paquete y escribir el salto justo al inicio del cdigo que
hookea la API original.
No tengo escrito cdigo para realizar un unhook automtico cuyo hook no halla
hecho yo.
Claro, que si lo que quieres es un unhook de un hook que tu mismo hagas, no
tienes mas que guardar el paquete original a buen recaudo para restaurarlo
cuando quieras.
Quizs las explicaciones son un poco liosas, pero se entendern mejor si se
vuelve la vista atrs sobre las imgenes del hook de este tutorial.

Saludos.
En lnea
Pginas: [1]

Ir Arriba

I M P RI M I R

anterior prximo
C omunidad Delphiaccess C OLABORAC IN Tutoriales (Moderador: egostar)

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

C omunidad Delphiaccess C OLABORAC IN Tutoriales (Moderador: egostar)


HOOK a la API en delphi (trampoln)

Ir a: => Tutoriales

ir

Temas recientes

Felicidades poliburro

Autor:
ELKurgan

DLL en Delphi invocada desde C #

Autor: jdepaz Foro: Delphi

08/02/2014
(20:20)

C alcular el promedio de los datos de una consulta

Autor: Sergio Foro: Firebird

08/02/2014
(09:57)

C uando el Sol no es Sol....

Autor: Sergio Foro: La C mara Oscura

08/02/2014
(09:45)

Divergente

Autor:
Fenareth

Foro: Bar-Tolo

08/02/2014
(09:09)

C uanto cobrar por un sistema

Autor:
Delphius

Foro: Encuestas

07/02/2014
(22:28)

La mujer dormida y el guerrero

Autor:
egostar

Foro: La C mara Oscura

07/02/2014
(14:42)

La tierra vista desde Marte

Autor:
FerC astro

Foro: Bar-Tolo

07/02/2014
(14:06)

External Exception EEFFAC E

Autor:
poliburro

Foro: Delphi

07/02/2014
(13:21)

Autor:
munozfino

Foro: PHP, Ajax, Javascript


y HTML

07/02/2014
(12:16)

generar cdigos primari key auto_increment tipo


00001,00002,00003

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

Foro: Bar-Tolo

09/02/2014
(05:10)

pdfcrowd.com

SMF 2.0.6 | SMF 2013, Sim ple Machine s


SMFAds for Fre e Forum s
XHTML R SS W AP2
Pgina cre ada e n 0.218 se gundos con 35 consultas.

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

You might also like