Frida es una de las herramientas que más me han sorprendido, no solo por ser multiplataforma, sino también por la facilidad con la que permite inyectar código en las funciones de una aplicación.
A continuación, se presentará un breve ejemplo de cómo realizar esta prueba en entornos Android, así como de la capacidad para manipular e interceptar los mensajes enviados a través de la aplicación Telegram.
Preparación Ubuntu 24.04
Instalación de dependencias básicas
En primer lugar, se procede a preparar el sistema Ubuntu 24.04 con el objetivo de habilitar su uso con Frida y la emulación de Android 11.
sudo apt update
sudo apt install unzip openjdk-17-jdk wget git
sudo apt install python3-pip
Descarga Android Command Line Tools
A continuación, se configura el entorno para emular Android 11 y ejecutar la Android Command Line Interface (CLI).
mkdir -p ~/Android/cmdline-tools
cd ~/Android
wget https://dl.google.com/android/repository/commandlinetools-linux-10406996_latest.zip -O cmdline-tools.zip
unzip cmdline-tools.zip
mkdir -p ~/Android/cmdline-tools/latest
mv cmdline-tools/* ~/Android/cmdline-tools/latest/
Aunque no se trata de una práctica de seguridad recomendada, se procederá a editar la variable de entorno PATH
en Ubuntu para facilitar el acceso directo a las herramientas de la Android Command Line.
export ANDROID_HOME=$HOME/Android
export PATH=$ANDROID_HOME/emulator:$ANDROID_HOME/platform-tools:$ANDROID_HOME/cmdline-tools/latest/bin:$PATH
Finalmente, se aplican los cambios realizados para que surtan efecto en la sesión actual.
source ~/.bashrc
Una vez instaladas y configuradas las herramientas de línea de comandos de Android, se procede a descargar la versión 11 del sistema operativo y a iniciar una instancia mediante avdmanager
.
#Android 11
sdkmanager "platform-tools" "platforms;android-30" "system-images;android-30;google_apis;x86_64"
avdmanager create avd -n android11_emulator -k "system-images;android-30;google_apis;x86_64"
emulator -avd android11_emulator
Una vez creada la instancia, se apaga el emulador de Android 11 y se procede a su configuración para permitir la interacción mediante el teclado físico. Para ello, se edita el archivo config.ini
.
nano ~/.android/avd/android11_emulator.avd/config.ini
------------------------------------------------------------------
#Busca y remplaza
hw.keyboard=yes
------------------------------------------------------------------
A continuación, se reinicia el emulador para que los cambios de configuración surtan efecto.
#Lista las avd disponibles:
advmanager list avd
#Emular android11
emulator -avd android11_emulator
Una vez se ha emulado y puesto en funcionamiento el sistema Android, es posible descargar la aplicación Telegram mediante el archivo APK disponible en: https://telegram.org/dl/android/apk. Asimismo, se puede iniciar la aplicación utilizando las credenciales del usuario.
Instalación Frida!
Se comienza preparando el sistema Ubuntu para trabajar con Frida. Para ello, se crea un entorno virtual con Python3
y se instalan las herramientas de Frida mediante el gestor de paquetes pip3
.
sudo apt update
python3 -m venv frida
source frida/bin/activate
(frida) pip3 install -U frida-tools
(frida) frida --version
A continuación, se debe descargar la versión de Frida Server
correspondiente a nuestra arquitectura. En este caso, se utilizará la versión destinada a sistemas Android con arquitectura x86_64
.
wget https://github.com/frida/frida/releases/download/16.1.7/frida-server-16.1.7-android-x86_64.xz
xz -d frida-server-16.1.7-android-x86_64.xz
chmod +x frida-server-16.1.7-android-x86_64
mv frida-server-16.1.7-android-x86_64 frida-server
Hasta este punto, se ha completado toda la fase de preparación y configuración inicial. Cabe destacar que el proceso finaliza con la obtención de un archivo ejecutable, frida-server
, el cual será transferido al entorno Android y actuará como intermediario para el envío de nuestras peticiones.
Ejecutamos Frida!
El primer paso consiste en transferir el archivo ejecutable al sistema Android. Para ello, se empleará una herramienta adecuada de comunicación entre el host y el emulador.
adb root # emulador en mode root
adb remount # permite la escritura en el sistema
adb push frida-server /data/local/tmp/
adb shell chmod +x /data/local/tmp/frida-server
A continuación, se accede al entorno Android emulado y se procede a la ejecución del servidor Frida desde el sistema.
adb shell
cd /data/local/tmp
./frida-server &
Una vez completado este paso, debería mostrarse en pantalla un mensaje indicando que Frida ha entrado en modo de escucha activa.
Una vez Frida se encuentra en modo de escucha dentro del entorno Android, ya es posible realizar algunas consultas de interés. Por ejemplo, se puede obtener un listado de los procesos que Frida es capaz de interceptar.
(frida) frida-ps -Uai
Captura i manipulació de los mensajes en Telegram
Frida es una herramienta que se instala en el sistema y que, mediante el uso de JavaScript
, permite modificar dinámicamente las funciones de una aplicación original.
Por tanto, uno de los objetivos principales será identificar las funciones que ejecuta una aplicación. De forma predeterminada, Frida no proporciona esta información, por lo que será necesario recurrir a otras herramientas complementarias, como radare2
.
En nuestro caso, se desarrollará un script en JavaScript que añadirá la cadena ‘hacked’ al mensaje original. Además, se registrará en el log tanto el mensaje original como su versión modificada.
Java.perform(function () {
var SendMessagesHelper = Java.use("org.telegram.messenger.SendMessagesHelper");
var SendMessageParams = Java.use("org.telegram.messenger.SendMessagesHelper$SendMessageParams");
SendMessagesHelper.sendMessage
.overload('org.telegram.messenger.SendMessagesHelper$SendMessageParams')
.implementation = function (params) {
try {
// Missatge original
var originalText = params.message.value;
console.log("Mensaje original:", originalText);
// Afegim el prefix "hacked "
var modifiedText = "hacked " + originalText;
params.message.value = modifiedText;
console.log("Mensaje modificado:", params.message.value);
} catch (e) {
console.log("Error modificando el mensaje:", e);
}
return this.sendMessage(params);
};
});
Este script
accede al objeto params.message
, el cual contiene el mensaje original, y modifica el valor del campo .value
.
A continuación, para ejecutar este script dentro del entorno de Frida, se emplea el siguiente comando:
#hook.js és el nombre del script y Telegram el nombre que habremos encontrado en 'frida -Uai'
frida -U -n Telegram -l hook.js
En este punto, ya es posible realizar pruebas para comprobar cómo se altera el contenido del mensaje tras la ejecución del script.