<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un experto con</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
Crea una **dylib** con una sección **`__interpose`** (o una sección marcada con **`S_INTERPOSING`**) que contenga tuplas de **punteros de funciones** que se refieran a las funciones **originales** y a las **de reemplazo**.
Luego, **inyecta** la dylib con **`DYLD_INSERT_LIBRARIES`** (la interposición debe ocurrir antes de que la aplicación principal se cargue). Obviamente, las [**restricciones** aplicadas al uso de **`DYLD_INSERT_LIBRARIES`** también se aplican aquí](../macos-proces-abuse/macos-library-injection/#check-restrictions). 
En macOS, se puede realizar el hooking de funciones utilizando la técnica de interposición de funciones. Esto implica la modificación de la tabla de símbolos de enlace dinámico para redirigir las llamadas de una función a otra función personalizada.
#### Pasos para realizar el hooking de funciones en macOS:
1. Crear una biblioteca dinámica con la función personalizada que se utilizará para reemplazar la función original.
2. Compilar la biblioteca dinámica y establecerla como una biblioteca intermedia.
3. Utilizar la variable de entorno `DYLD_INSERT_LIBRARIES` para cargar la biblioteca dinámica en el espacio de direcciones de un proceso.
4. La función personalizada puede realizar acciones adicionales antes o después de llamar a la función original.
Al realizar el hooking de funciones en macOS, es importante tener en cuenta la arquitectura del sistema operativo y la compatibilidad con las versiones específicas de macOS para garantizar que el hooking se realice de manera efectiva y segura.
El hooking de funciones puede ser utilizado para diversos fines, como la depuración de aplicaciones, la monitorización de llamadas de sistema, o la implementación de medidas de seguridad personalizadas. Sin embargo, es fundamental utilizar esta técnica de manera ética y legal.
Se necesita el **objeto**, el **método** y los **parámetros**. Y cuando se llama a un método se envía un **mensaje** utilizando la función **`objc_msgSend`**: `int i = ((int (*)(id, SEL, NSString *, NSString *))objc_msgSend)(someObject, @selector(method1p1:p2:), value1, value2);`
Siguiendo las estructuras del objeto, es posible llegar a un **array de métodos** donde se encuentran **los nombres** y **los punteros** al código del método.
Ten en cuenta que debido a que los métodos y clases se acceden según sus nombres, esta información se almacena en el binario, por lo que es posible recuperarla con `otool -ov </ruta/bin>` o [`class-dump </ruta/bin>`](https://github.com/nygard/class-dump)
En este caso, si el **código de implementación del método legítimo** verifica el **nombre del método**, podría **detectar** este intercambio y evitar que se ejecute.
El formato anterior es extraño porque estás cambiando la implementación de 2 métodos uno por el otro. Usando la función **`method_setImplementation`** puedes **cambiar** la **implementación** de un **método por la de otro**.
Solo recuerda **almacenar la dirección de la implementación del original** si vas a llamarlo desde la nueva implementación antes de sobrescribirla, ya que luego será mucho más complicado localizar esa dirección.
Para lograrlo, la técnica más fácil de usar es inyectar un [Dyld a través de variables de entorno o secuestrar](../macos-dyld-hijacking-and-dyld\_insert\_libraries.md). Sin embargo, supongo que esto también se podría hacer a través de [inyección de proceso Dylib](macos-ipc-inter-process-communication/#dylib-process-injection-via-task-port).
Sin embargo, ambas opciones están **limitadas** a **binarios/procesos no protegidos**. Consulta cada técnica para obtener más información sobre las limitaciones.
Sin embargo, un ataque de enganche de funciones es muy específico, un atacante hará esto para **robar información sensible desde dentro de un proceso** (de lo contrario, simplemente harías un ataque de inyección de proceso). Y esta información sensible podría estar ubicada en aplicaciones descargadas por el usuario, como MacPass.
Entonces, el vector del atacante sería encontrar una vulnerabilidad o eliminar la firma de la aplicación, inyectar la variable de entorno **`DYLD_INSERT_LIBRARIES`** a través del Info.plist de la aplicación agregando algo como:
Ten en cuenta que en las versiones más recientes de macOS, si **eliminas la firma** del binario de la aplicación y esta se ejecutó previamente, macOS **no ejecutará la aplicación** nuevamente.
<summary><strong>Aprende hacking de AWS de cero a héroe con</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.