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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Análisis y Diseño de Malware (Moderador: fary)
| | |-+  Dudas sobre API hooking
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Dudas sobre API hooking  (Leído 7,204 veces)
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Dudas sobre API hooking
« en: 4 Abril 2016, 15:09 pm »

Hola a todos, resulta que ayer estuve leyendo sobre este método un buen rato, pero sin embargo hay algo que no logro comprender.

Si bien he conseguido hookear una función para que haga lo que yo quiera (En este caso MessageBoxW), el hook no va más allá de mi aplicación, el hook solo me afecta a mi.

Ya que abro otro programa que ejecuta MessageBoxW y no muestra el mensaje del hook.

Luego ¿para que vale esto si solo afecta a nuestro propio programa, o que paso por alto?.

Continue leyendo este tutorial, que esta muy bien y seguro que todos lo habréis leido:

http://www.codeproject.com/Articles/2082/API-hooking-revealed

Y bueno para ejecutar codigo en otro proceso necesitamos inyectar una DLL al proceso del que queremos manipular una función. Para inyectar una DLL con nuestro código si el proceso al que queremos inyectarla usa User32.dll se puede modificar un registro para que cargue nuestra DLL, sino hay otros métodos...

Suponiendo que hemos conseguido que el programa objetivo cargue nuestra DLL, ahora ¿cómo podemos interceptar una función suya y manipularla?. No lo tengo claro, ¿acaso ahora la DLL debería de hookear la función en cuestión que queremos modificar y ahora ya funcionaría debido a que pertenece al mismo proceso?, ¿en eso consiste?, porque sno no veo claro la relación.

Ejemplo: Si queremos manipular HttpSendRequestW de InternetExplorer desde un proceso externo. Planteamiento: cargar nuestra DLL en iexplorer.exe y nuestra DLL tendría un hook para HttpSendRequestW que al ser ejecutada por iexplorer.exe hookearía la API ejecutando nuestro código en cada llamada a la función. ¿Consiste en eso o como?.

Es que estoy empezando a probar un poco de que va esto.

Saludos.

Puff acabo de inyectarme en chorme.exe y ha sido ORGASMICO, ahora voy a probar a manipular sus funciones con algún hook a una de sus funciones.  A ver si se puede.
En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
fary
Moderador
***
Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: Dudas sobre API hooking
« Respuesta #1 en: 4 Abril 2016, 15:24 pm »

Hola,

La dirección de memoría de la función es la misma para todo el proceso, si es eso a lo que te refieres. Entonces cuando tu pones un salto en esa dirección de memoria afecta a todas las llamadas que se realicen a ella.

Citar
Ejemplo: Si queremos manipular HttpSendRequestW de InternetExplorer desde un proceso externo. Planteamiento: cargar nuestra DLL en iexplorer.exe y nuestra DLL tendría un hook para HttpSendRequestW que al ser ejecutada por iexplorer.exe hookearía la API ejecutando nuestro código en cada llamada a la función. ¿Consiste en eso o como?.

Sí.

saludos.
En línea

Un byte a la izquierda.
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Dudas sobre API hooking
« Respuesta #2 en: 4 Abril 2016, 16:01 pm »

Hola gracias por la respuesta,

He estado haciendo pruebas y funciona, esto esta MUY GUAPO es como mear al SO.

Hasta día de hoy no lo había probado aunque sabía que se podía hacer.

Fácilmente hacer un Form grabber con este nuevo poder XD, solo hay que saber que funciones usa el navegador para hacer las requests la librería donde se encuentra la función y la función en si, nada más me parece.

Es que ví una oferta de 3700€ por un form grabber XD, por eso me intrigué un poco en como sería la idea, la pena que de ingeniería inversa no se mucho, solo ver las librerías que usa y demás, pero no se como detener en el momento que un navegador lanza la request, allí sería solo ver la función y que dependencia tiene, se que hay que hacer pero no como XD, me mirare algo de ollydbg supongo XD.

Saludos y a divertirse!!! ;D ;D ;D ;D
En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Dudas sobre API hooking
« Respuesta #3 en: 4 Abril 2016, 20:29 pm »

Hola de nuevo, siento el doble post, pero lo veo mejor que abrir otro hilo del mismo tema.

En este caso, mi pregunta es, ¿se puede hacer DLL inyection sin DLL?, es decir sin tener que apuntar a un archivo dll para que se cargue en memoria.

Una solución sería compilar las DLL y crear una variable en la app con su contenido en hexadecimal y luego en ejecución copiar esos bytes en un archivo e inyectarla.

Pero seguro existen otros métodos mejores.

Saludos!!.
En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
fary
Moderador
***
Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: Dudas sobre API hooking
« Respuesta #4 en: 4 Abril 2016, 20:50 pm »

Aquí tienes un artículo sobre inyecciones de código en memoria.

http://foro.elhacker.net/analisis_y_diseno_de_malware/inyecciones_de_codigo_en_memoria-t446557.0.html

Inyectar código de una dll no sería viable ya que las direcciones en el código no se reubican. Lee el artículo y lo vas a comprender el por qué.

Saludos.
En línea

Un byte a la izquierda.
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Dudas sobre API hooking
« Respuesta #5 en: 5 Abril 2016, 09:46 am »

Inyectar código de una dll no sería viable ya que las direcciones en el código no se reubican. Lee el artículo y lo vas a comprender el por qué.

Buenas, a lo que me refería era a pasar el codigo compilado de la DLL con el hook a la API en hexadecimal, y en ejecución a crear un archivo .dll pasando los valores hexadecimales a bytes, en ese caso ya tendríamos el archivo dll y lo podríamos inyectar.

Me he leído tu POST, y no logro comprender pues allí haces un hook a MessageBoxA (una función de la API que no hookeas), inyectando la DLL de User32 que seguramente se encontraría en  el IPC de los programas a los que inyectas.

El caso es, en tu ejemplo les haces cargar una DLL que ya tiene el sistema, no tu propia DLL que contiene las funciones que hookearán la API del programa, por lo tanto es distinto.

Por ejemplo puedo hacer que cualquier programa ejecute lo que quiera haciendole una inyección de DLL, esa DLL puede ser de la API y cargarla y ejecutar sus funciones con los parámetros de la API, O lo que quiero hacer cargar mi propia DLL que no tiene que ver con la de la API inyectarla en proceso y que al hacer el ATTACH hookee una función de la API de ese programa haciendo que haga lo que quiera. Lo que digo se puede hacer y ya lo he probado, lo que me refería era a si puede hacerse sin pasar la DLL, es decir API hooking sin DLL, mediante alguna artimaña para así no estar creando un archivo DLL por cada hook y hacerlo directamente todo desde el ejecutable.

https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/fd706e03-9385-4d39-ac0f-1076dc282df2/hooking-api-functions-without-dll-c?forum=windowsgeneraldevelopmentissues

Saludos.

« Última modificación: 5 Abril 2016, 09:48 am por Kaxperday » En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
fary
Moderador
***
Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: Dudas sobre API hooking
« Respuesta #6 en: 5 Abril 2016, 09:52 am »

Te he dicho y te repito que se puede inyectar código en un proceso.

http://foro.elhacker.net/analisis_y_diseno_de_malware/inyecciones_de_codigo_en_memoria-t446557.0.html

En línea

Un byte a la izquierda.
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Dudas sobre API hooking
« Respuesta #7 en: 5 Abril 2016, 10:17 am »

Te he dicho y te repito que se puede inyectar código en un proceso.

http://foro.elhacker.net/analisis_y_diseno_de_malware/inyecciones_de_codigo_en_memoria-t446557.0.html



Eso ya lo tengo bastante claro, y por supuesto no es a lo que me refiero.

Lo que haces en el hilo es cargar user32.dll en calc.exe y llamar a MessageBoxA desde calc.exe.

Y no, no es eso. Claro que puedes inyectar código, mi pregunta es si se puede hacer sin dll mediante otro método u artimaña.

Porque si queremos crear un hook para una aplicación, deberemos inyectarnos en ella como DLL para poder ejecutar los hooks a sus APIs.

Y como ya dije anteriormente... es costoso porque habría que crear una DLL por cada aplicación a hookear.

En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
fary
Moderador
***
Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: Dudas sobre API hooking
« Respuesta #8 en: 5 Abril 2016, 10:28 am »

Porque si queremos crear un hook para una aplicación, deberemos inyectarnos en ella como DLL para poder ejecutar los hooks a sus APIs.

NO, NO y mil veces mas NO. No tienes porque inyectar una DLL... inyectando código es suficiente.

Te dejo la evidencia aquí:

https://foro.elhacker.net/analisis_y_diseno_de_malware/srcfasm_user_mode_rootkit_findnextfilew-t263230.0.html;new

Es un rootkit viejo, que la última versión de windows en la que funciona es en Windows XP.

Citar
Y como ya dije anteriormente... es costoso porque habría que crear una DLL por cada aplicación a hookear.

¿Una por cada aplicación? ¿Se puede saber porque tienes que crear una por cada aplicación?
¿No te referirás a hacer un hook genérico para todas las API?


« Última modificación: 5 Abril 2016, 10:32 am por fary » En línea

Un byte a la izquierda.
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Dudas sobre API hooking
« Respuesta #9 en: 5 Abril 2016, 10:40 am »

NO, NO y mil veces mas NO. No tienes porque inyectar una DLL... inyectando código es suficiente.

Eso es lo que estoy preguntando, que si se puede hacer sin DLL, luego la respuesta es que sí.

¿Una por cada aplicación? ¿Se puede saber porque tienes que crear una por cada aplicación?
¿No te referirás a hacer un hook generico para todas las API?

No solo para una.

Si por ejemplo quieres hookear MessageBox de una aplicación y FindNextFile de otra. Si lo haces inyectando DLLs lo suyo sería hacer una para cada aplicación hookeando la API de cada una, también puedes hacer una sola que hookee una u otra dependiendo del proceso que la llame.

Saludos.
En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Tengo varias dudas sobre DVD a formato FLV, y otras cosas sobre FLV
Multimedia
SaintGermain 0 2,252 Último mensaje 30 Mayo 2005, 21:47 pm
por SaintGermain
Api Hooking en VB « 1 2 »
Programación Visual Basic
Freeze. 15 7,130 Último mensaje 18 Febrero 2008, 15:56 pm
por Freeze.
[DUDAS] Todas las dudas sobre RadASD + MASM aqui « 1 2 3 »
ASM
AleX Inc. 23 21,046 Último mensaje 5 Julio 2010, 11:58 am
por Eternal Idol
Dudas sobre la vpn sobre Windows Server 2003
Redes
Riudo 5 5,625 Último mensaje 24 Mayo 2011, 05:36 am
por Riudo
recomendacion sobre compra de domino y dudas sobre filtro de una pagina web
Desarrollo Web
josco 3 5,567 Último mensaje 31 Agosto 2021, 00:23 am
por AFKXDLOLNASHE
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines