Hook a la api en delphi

21
pdfcrowd.com open in browser PRO version Are you a developer? Try out the HTML to PDF API Bienvenido(a), Visitante . Por favor, ingresa o regístrate. Siempre Ingresar Ingresar con nombre de usuario, contraseña y duración de la sesión Buscar Noticias: Comunidad Delphiaccess » COLABORACIÓN » Tutoriales (Moderador: egostar) » HOOK a la API en delphi (trampolín) IMPRIMIR Páginas: [1] Ir Abajo HOOK a la API en delphi (trampolín) « Topic Start: 05 de noviembre de 2012, escafandra Moderadores « anterior próximo » Autor Tema: HOOK a la API en delphi (trampolín) (Leído 1150 veces) 0 Usuarios y 2 Visitantes están viendo este tema. Inicio Ayuda Buscar Calendario Blog Ingresar Registrarse

description

Español

Transcript of Hook a la api en delphi

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

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

    Siempre Ingresar

    Ingresar con nombre de usuario, contrasea y duracin de lasesin

    Buscar

    Noticias:

    Comunidad Delphiaccess COLABORACIN Tutoriales (Moderador: egostar) HOOK a la API en delphi (trampoln)

    IMPRIMIRPginas: [1] Ir Abajo

    HOOK a la API en delphi(trampoln)

    Topic Start: 05 de noviembre de 2012,

    escafandraModeradores

    anterior prximo

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

    0 Usuarios y 2 Visitantes estn viendo este tema.

    Inicio Ayuda Buscar Calendario Blog Ingresar Registrarse

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    12:08:03

    Thank You-Given: 103-Receive: 734

    Mensajes: 2,512Calificaciones: +776/-0Sexo:

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

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

    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 lacabecera PE de todo ejecutable y DLL que contiene las direcciones de las API yfunciones que importa de forma esttica (en tiempo de compilacin).Cambiando el valor de esas direcciones a una funcin Gancho tenemosrealizado el Hook. Es un mtodo muy estable pero requiere cambiar el valor dela direccin en todos los mdulos del proceso que importen dicha API. Nofunciona para API importada de forma dinmica, es decir con GetProcAddress.

    - El Hook Trampoln:

    Con esta tcnica modificamos instrucciones asm de la API para provocar unsalto a nuestro cdigo. Nuestro cdigo debe ser capaz de llamar, despus a laAPI original sin provocar errores. Esta tcnica es algo mas compleja que laanterior, funciona para APIs importadas tanto de forma esttica como dinmica

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    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 ala 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 APIoriginal que podamos sobrescribir con cierta tranquilidad. Lo ideal es encontraruna zona de longitud 5 bytes, en una o varias instrucciones completas asm. Sinos fijamos como comienza el cdigo asm de una API, casi siempre se repite lamisma secuencia:

    Cdigo: [Seleccionar]

    Lo ideal sera que esto fuera una constante, pero me encontrado APIs concodificacin distinta en distintos PCs, posiblemente debido a las distintasactualizaciones del S.O.

    Otro buen punto, puede ser buscar una instruccin de salto (jmp) o llamada asubrutina (call) pero lgicamente no la encontraremos en sitios fijos,entorpeciendo un sistema automtico de Hook. Esto nos obliga, en ciertaforma, a proceder a un desensamblado de parte del cdigo, bien manual paracada API, bien automtico. Nosotros vamos a usar un desensamblador de

    8BFF mov edi, edi55 push ebp8BEC mov ebp, esp

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

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

    longitud que nos informa de la longitud de las instrucciones asm. Estaherramienta es justo lo que nos hace falta para controlar que no partimosinstrucciones al realizar la preparacin del hook.

    El cdigo que muestro en este tutorial se centra en los 5 primeros bytes de laAPI. La filosofa ser establecer un puntero especial, del mismo tipo que la APIque vamos a enganchar. En el cdigo para automatizar Hooks llamar a estepuntero, ToAPI. Vamos a reservar memoria para l de al menos mas de 10bytes(los 5 o mas copiados desde la API original, ms otros 5 para un salto).Tambin escribiremos la funcin HOOK o suplantadora, que ser declaradaexactamente como la API original, yo la suelo denominar como la API vctimacon el prefijo New. Los primeros 5 o mas Bytes de la API original serncopiados al Buffer apuntado por ToAPI, de forma que se copien instruccionescompletas y si hubiese algn salto habra que recalcularlo. Detrs de los 5 omas bytes copiados, escribiremos una instruccin de salto ($E9) que apunta alresto de cdigo no copiado de la API original. Esto es para poder devolver elflujo del programa al punto donde lo interrumpiremos. En la API originalrescribiremos los 5 bytes con otro salto ($E9) que apunta a nuestra funcinHook (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 acualquier API a nivel usuario de forma automatizada.

    Un ejemplo vale mas que mil palabras, vamos a realizar un Hook a la APIMessageBox en nuestro propio proceso. Comenzamos por un esquema decmo queda el cdigo asm que vamos a alterar:

    En lnea

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    Follow membersgave a thank to yourpost:

    Re: HOOK a la API en delphi(trampoln)

    Respuesta #1: 05 de noviembre de 2012,12:12:38

    escafandraModeradores

    Thank You-Given: 103-Receive: 734

    Mensajes: 2,512Calificaciones: +776/-0Sexo:

    Para nuestro propsito vamos a necesitar usar determinadas APIs deWindows:

    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 memoriaVirtualProtectEx: 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 debajo nivel:[delphi]// Definicin de tipo puntero a la API MessageBox type PMESSAGEBOX = function(hWnd: THandle; lpText, lpCaption: PCHAR;uType: integer): Integer; stdcall;

    seoane, Rolphy Reyes, Delphius, cadetillFor this post, 4 members gave a thank you!

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    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 hookeadafunction 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 orMB_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 leprestis 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

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    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

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    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 operativoprocedure 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 APIprocedure ResumeHook(HookFunc: Pointer; dllName, ApiName: PCHAR);var API: Pointer;

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    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. Quierocomentar que la funcin GetOverloadBytes calcula el nmero de bytes quedebemos traspasar sin peligro al Buffer apuntado por ToAPI. Para calcularlousa un desensamblador de longitud de instruccin. Se puede prescindir de ellopero se corre el riesgo de colgar la aplicacin vctima si la API hookeadacomienza con instrucciones completas en 6 bytes, por ejemplo; partiramosuna instruccin asm perdiendo el sentido del resto del cdigo...!

    Ahora faltan las labores de limpieza. Deberamos ser capaces de deshacer elhook 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 ToAPIprocedure 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;

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    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 ellaprocedure 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;

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

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

    // Suspende el Hook restaurando la API original y libera el Buffer ToAPIprocedure 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 unproyecto listo para compilar.

    Debis usar esto con cuidado pues un error va a hacer caer la aplicacin. Comocoment antes este ejemplo realiza un Hook a MessageBox en nuestra propiaaplicacin, como ejemplo vale, pero el objetivo til sera una aplicacin ajena.Para ello escribiremos el Hook en una dll que inyectaremos en el procesoanfitrin. Esa dll, una vez inyectada realizara el Hook y desde ese momento yatenemos el control de nuestra API...

    Los Platinos podris disfrutar de un Hook a un par de APIs un tanto especialesen un proceso que no lo es menos.

    Espero haber sabido explicarme y que este pequeo tutorial sirva de ayuda.

    PD: Subo el cdigo

    Saludos.

    En lnea

    Re: HOOK a la API en delphi(trampoln)

    egostarAdministrador

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    (trampoln) Respuesta #2: 05 de noviembre de

    2012, 12:18:46

    Administrador

    Thank You-Given: 1199-Receive: 647

    Mensajes: 9,915Calificaciones: +704/-7Sexo:

    coding my life

    Es facinante el asunto de acceder a la API de windows, pero dado que miconocimiento est muy por debajo de lo que expones, quiero preguntar,

    Para que nos sirve hacer esto ?

    Con ese salto, ests modificando el comportamiento de la funcin (en estecaso) MessageBoxA ?

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

    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 lapena leerse o valga la pena escribirse."- Benjamin Franklin"Los programadores hicimos un pacto con dios, el no hace sistemas y nosotros nohacemos milagros."- Annimo

    Re: Re: HOOK a la API en delphi(trampoln)

    escafandraModeradores

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    (trampoln) Respuesta #3: 05 de noviembre de

    2012, 12:32:56

    Moderadores

    Thank You-Given: 103-Receive: 734

    Mensajes: 2,512Calificaciones: +776/-0Sexo:

    Te respondo en desorden...Cita de: egostar en 05 de noviembre de 2012, 12:18:46

    Se est sobreescribiendo el API ?

    Si, la estamos invadiendo, ultrajando...

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

    Para que nos sirve hacer esto ?

    Para espiarla y variar su comportamiento si procede. Este ejemplo la espa yextrae datos. Este otro hace variar el comportamiento. Este otro hilo estbasado en una miniApp antivirus que me tuve que hacer, usaba un Hook aCreateProcessInternalW.

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

    Con ese salto, ests modificando el comportamiento de la funcin (en este caso)MessageBoxA ?

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

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

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

    Ya lo iremos viendo...

    Saludos.

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

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

    Follow membersgave a thank to yourpost:

    Re: HOOK a la API en delphi(trampoln) Respuesta #4: 06 de noviembre de

    2012, 08:44:00

    cadetillModeradores

    Thank You-Given: 139-Receive: 193

    Mensajes: 946Calificaciones: +199/-0Sexo:

    Yo slo puedo quitarme el sombrero con vuestro conocimiento del API deWndows :S

    En lnea

    Salu2cadetill

    Re: HOOK a la API en delphi(trampoln) Respuesta #5: 06 de noviembre de

    2012, 16:46:44

    DelphiusAdministrador

    Thank You-Given: 217-Receive: 334

    Mensajes: 4,133

    La idea y el propsito de un hook entiendo. Ahora bien, metermeconceptualmente en sus berenjales primero debo morir y nacer dos veces! Ami slo me queda leer y sentirme chiquitito antes semejantes explicaciones delos genios.

    Saludos,

    egostarFor this post, 1 member gave a thank you!

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    Mensajes: 4,133Calificaciones: +369/-2Sexo:

    El polimorfismo seguirsiendo parte de mi vida?

    En lnea

    Como redactar mensajes - Uso de etiquetas

    Se ensea por amor a los dems, se aprende por amor a la verdadCuanto ms se busca la verdad, sin llegar a la perfeccin, anhelamos saber loque falta

    San Agustn

    Re: HOOK a la API en delphi(trampoln) Respuesta #6: 03 de mayo de 2013,

    19:45:32

    jeivarmarrRegistrado

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

    Gracias por este gran tutorial pero me causo curiosidad lo de windows 8actualmente 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

    jeivarmarrRegistrado

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

    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,

    escafandraModeradores

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    Respuesta #8: 05 de mayo de 2013,17:52:35

    Thank You-Given: 103-Receive: 734

    Mensajes: 2,512Calificaciones: +776/-0Sexo:

    jeivarmarr, para realizar un Hook a la API precisas inyectar cdigo en tuproceso anfitrin. El cdigo lo inyectas con una dll o de forma directa. Elmtodo mas comn de intectar una dll es obigar su carga conCreateRemoteThread aqu dej un ejemplo en C. Las tcnicas de inyeccindirecta son mas complejas, dej un tutorial aqu.

    No se puede inyectar cdigo compilado de 32bits en procesos de 64bits ni deforma 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 laprctica usa un desensamblador de 32 bits lo que lo hace no operativo para 64bits

    No dispongo de un PC con Win8, por el momento, con lo que no puedo hacerpruebas para responderte acerca de los sistemas de seguridad.

    Saludos.

    En lnea

    Re: HOOK a la API en delphi(trampoln) Respuesta #9: 06 de mayo de 2013,

    22:07:55

    c0loMiembro Platino

    Thank You-Given: 4-Receive: 0

    Hola escafandra,

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

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    Mensajes: 241Calificaciones: +3/-0Sexo:

    Siempre aprendiendo ...

    Digamos que no es el clsico trampoln de 5 bytes si no que uno se encuentracon una modificacin de la api del tamao de 6 bytes?

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

    [asm]mov edi,edipush ebpmov ebp,esppush ecxor dword ptr [ebp-04],FF[/asm]

    Pero luego de ejecutar alguna programa X, la api su parte inicial es modificadaa:

    [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 hamodificado los primeros 6 bytes, que hizo? o cual fue su tipo de trampolin ycomo uno podria hacer un unhook en este caso y cualquiera que fuera elunhook?

    Saludos

    En lnea

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

    Re: HOOK a la API en delphi(trampoln) Respuesta #10: 06 de mayo de

    2013, 22:19:19

    c0loMiembro Platino

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    Thank You-Given: 4-Receive: 0

    Mensajes: 241Calificaciones: +3/-0Sexo:

    Siempre aprendiendo ...

    Epa epa... creo que sufri un lapsus, Porque si deseo hacer el unhook solosobre 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 realizarel hook, no recuerdo como se llama este metodo... Pero se podria?

    En lnea

    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

    escafandraModeradores

    Thank You-Given: 103-Receive: 734

    Mensajes: 2,512Calificaciones: +776/-0Sexo:

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

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    El tema se puede complicar si el sistema de hook es con call, entoncesbuscaremos un ret pero existen trucos para volver con un salto y no con ret.As mismo en el paquete que debemos restaurar pueden aparecer saltosintermedios que no correspondan al punto de vuelta... En general el salto devuelta no debe estar mucho mas alejado de esos 5 bytes clsicos deltrampoln, si fuere as, ese salto no es el de vuelta, continuaremos un pocomas adelante hasta encontrarlo, pero el salto intermedio deberemos"convertirlo" pues es relativo, para adaptarlo al cdigo de la API cuando larestauremos.

    Una tcnica mas sencilla es hacer un hook al hook, es decir cambiar el cdigohookeado 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 quehookea la API original.

    No tengo escrito cdigo para realizar un unhook automtico cuyo hook no hallahecho yo.

    Claro, que si lo que quieres es un unhook de un hook que tu mismo hagas, notienes mas que guardar el paquete original a buen recaudo para restaurarlocuando quieras.

    Quizs las explicaciones son un poco liosas, pero se entendern mejor si sevuelve la vista atrs sobre las imgenes del hook de este tutorial.

    Saludos.

    En lnea

    IMPRIMIRPginas: [1] Ir Arriba

    Comunidad Delphiaccess COLABORACIN Tutoriales (Moderador: egostar)

    anterior prximo

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    Comunidad Delphiaccess COLABORACIN Tutoriales (Moderador: egostar) HOOK a la API en delphi (trampoln)

    Ir a: => Tutoriales ir

    Temas recientes

    Felicidades poliburro Autor:ELKurgan

    Foro: Bar-Tolo 09/02/2014(05:10)

    DLL en Delphi invocada desde C# Autor: jdepaz Foro: Delphi08/02/2014

    (20:20)

    Calcular el promedio de los datos de una consulta Autor: Sergio Foro: Firebird08/02/2014

    (09:57)

    Cuando el Sol no es Sol.... Autor: Sergio Foro: La Cmara Oscura08/02/2014

    (09:45)

    Divergente Autor:Fenareth

    Foro: Bar-Tolo 08/02/2014(09:09)

    Cuanto cobrar por un sistema Autor:Delphius

    Foro: Encuestas 07/02/2014(22:28)

    La mujer dormida y el guerrero Autor:egostar

    Foro: La Cmara Oscura 07/02/2014(14:42)

    La tierra vista desde Marte Autor:FerCastro

    Foro: Bar-Tolo 07/02/2014(14:06)

    External Exception EEFFACE Autor:poliburro

    Foro: Delphi 07/02/2014(13:21)

    generar cdigos primari key auto_increment tipo00001,00002,00003

    Autor:munozfino

    Foro: PHP, Ajax, Javascripty HTML

    07/02/2014(12:16)

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    SMF 2.0.6 | SMF 2013, Simple MachinesSMFAds for Free Forums

    XHTML RSS WAP2

    Pgina creada en 0.218 segundos con 35 consultas.