# Depurar aplicaciones con IDA

Este capítulo le mostrará cómo depurar rápidamente aplicaciones de Android utilizando FIRERPA y sus funciones y scripts relacionados. Nuestro entorno de demostración es un sistema Android 10, con un sistema anfitrión Ubuntu 22.04, y herramientas relevantes como IDA 7.5 (wine), ADB, jdb y Python ya instaladas. Se recomienda que su versión de IDA sea 7.5 o superior y que tenga instalada la última versión del servidor FIRERPA.

![Depuración dinámica](/assets/images/IDA.png)

## Establecer el modo depurable

Antes de continuar, si su sistema ya está en modo de depuración, no necesita realizar este paso. De lo contrario, abra el escritorio remoto de FIRERPA y escriba `setdebuggable` en la terminal. Después de introducir el comando, su teléfono se reiniciará de forma suave (soft reboot). No se preocupe, volverá a la normalidad en unos dos minutos. En este punto, su teléfono ya estará en modo depurable.

![Depuración dinámica](/assets/images/debugger-setdebuggable.png)

## Instalar el servicio de depuración de IDA

Antes de continuar con la depuración, también necesita subir el servidor de depuración de Android que viene con IDA a su dispositivo. Puede encontrar `android_server` y `android_server64` en el directorio dbgsrv de su instalación de IDA. Si la aplicación que desea depurar utiliza bibliotecas enlazadas de 32 bits, use `android_server`; de lo contrario, use `android_server64`. Arrastre y suelte el archivo necesario o use `adb push` para subirlo a su dispositivo Android y otórguele permisos de ejecución.

```bash
chmod 755 android_server*
```

Después de otorgar los permisos de ejecución, necesita iniciar el servicio android_server. Puede ejecutar este programa a través de adb (requiere permisos de root) o desde la terminal del escritorio remoto. En sistemas de versiones superiores (>=10), es necesario establecer previamente la variable de entorno `IDA_LIBC_PATH`.

```bash
IDA_LIBC_PATH=/apex/com.android.runtime/lib64/bionic/libc.so ./android_server64 -kk
```

```{note}
Para depurar aplicaciones de 32 bits, debe modificar `IDA_LIBC_PATH` a `/apex/com.android.runtime/lib/bionic/libc.so` y usar el servicio de depuración `android_server` de 32 bits.
```

## Redireccionar el servicio de depuración de IDA

Para situaciones de depuración que requieren alta capacidad de respuesta y rendimiento, recomendamos usar una conexión USB. Asegúrese de que su dispositivo esté conectado a la computadora actual y que la autorización de adb se haya completado. Luego, ejecute el siguiente comando.

```bash
adb forward tcp:23946 tcp:23946
```

```{note}
23946 es el puerto de escucha predeterminado para `android_server` de IDA. Si modificó este puerto al iniciar `android_server`, por favor, especifíquelo de nuevo.
```

## Iniciar la depuración de la aplicación

No hemos hecho mucho trabajo, simplemente hemos encapsulado un script para usted que puede ayudarle a automatizar la mayoría de las operaciones posteriores. Simplemente siga las instrucciones que muestra el script. Puede encontrar el script `ida.py` en el directorio `tools` del proyecto y usarlo con el siguiente comando.

```bash
python3 ida.py -d 192.168.0.2 -a com.android.settings
```

![Depuración dinámica](/assets/images/debugger-cmd.png)

Aquí, el parámetro `-d` es la IP de su dispositivo, es decir, la IP del dispositivo que ejecuta el servicio FIRERPA, y el parámetro `-a` es el nombre del paquete de la aplicación. Después de ejecutar el comando, se le pedirá que adjunte su software IDA al proceso de la aplicación.

![Depuración dinámica](/assets/images/debugger-attach.png)

![Depuración dinámica](/assets/images/debugger-setup.png)

<p align="center" style="margin-top:0px">
<img src="/assets/images/debugger-choice.png" alt="Depuración dinámica">
</p>

![Depuración dinámica](/assets/images/debugger-start.png)

Bien, todo el proceso ha finalizado. Por favor, vuelva a la línea de comandos de `ida.py` y presione la tecla Enter. Ahora puede continuar con la depuración.