Frida és una de les eines que més m’ha sorprès, no només per ser multiplataforma, sinó per la facilitat amb la que podem introduir codi dins les crides de funcions en una aplicació.
En el següent mostrarem un exemple curt de com provar-ho en entorns Android i com som capaços de manipular i interceptar els missatges enviats a través de Telegram.
Preparem Ubuntu 24.04
Instal·lar dependències bàsiques
Per començar preparem la nostra màquina Ubuntu 24.04 per tal que pugui treballar amb Frida i Emular Android 11.
sudo apt update
sudo apt install unzip openjdk-17-jdk wget git
sudo apt install python3-pip
Descarregar Android Command Line Tools
I ara preparem per poder emular Android 11 i executar l’Android Command Line:
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/
Tot i que no és una molt bona praxis de seguretat, editarem el PATH d’Ubuntu per a poder-hi treballar directament amb les tools de l’Android Command Line.
export ANDROID_HOME=$HOME/Android
export PATH=$ANDROID_HOME/emulator:$ANDROID_HOME/platform-tools:$ANDROID_HOME/cmdline-tools/latest/bin:$PATH
I apliquem els canvis:
source ~/.bashrc
Una vegada instal·lades i preparades les command tools d’Android descarreguem l’Android 11 i iniciem una instància d’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 vegada creada, apaguem l’Android 11 i configurem per poder interaccionar amb l’emulador a través del nostre teclat, per això, configurem l’arxiu config.ini
:
nano ~/.android/avd/android11_emulator.avd/config.ini
------------------------------------------------------------------
#Cerca i canvia el següent paràmetre
hw.keyboard=yes
------------------------------------------------------------------
I tornem a carregar l’emulador:
#Llista les avd disponibles:
advmanager list avd
#Emular android11
emulator -avd android11_emulator
Una vegada tingueu l’Android emulat i funcionant, us podeu descarregar el Telegram a través de l’APK https://telegram.org/dl/android/apk . A més, el podeu arrencar a través de les vostres dades d’usuari.
Instal·lació FRIDA!
Comencem preparant la nostra màquina Ubuntu per poder treballar amb Frida, per fer-ho, crearem un entorn virtual amb python3 i instal·larem les frida-tools amb pip3:
sudo apt update
python3 -m venv frida
source frida/bin/activate
(frida) pip3 install -U frida-tools
(frida) frida --version
Ara, el que ens toca es descarregar-nos la versió de Frida server que necessitem, en el nostre cas, la versió per android-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
Fins aquí, tota la part de preparació i configuració inicial. Fixeu-vos que hem acabat amb un arxiu executable frida-server
que serà el que enviem a Android i serà a través del qual enviarem les nostres peticions.
Execució Frida
El primer que farem és enviar l’arxiu executable a l’Android, per fer-ho:
adb root # posa l'emulador en mode root
adb remount # permet escriure en el sistema
adb push frida-server /data/local/tmp/
adb shell chmod +x /data/local/tmp/frida-server
I ara accedim a l’Android emulat i executem el servidor:
adb shell
cd /data/local/tmp
./frida-server &
Una vegada fet això, hauríeu de veure una pantalla informant que frida es posa en mode escolta activa.
Una vegada Frida està escoltant dins el nostre Android ja podem fer algunes consultes interessants, per exemple, llistar el conjunt de processos que pot interceptar Frida:
(frida) frida-ps -Uai
Captura i edició dels missatges a Telegram
Frida és una aplicació, que s’instal·la en el sistema, i que a través de JavaScri
pt és capaç de modificar les funcions de l’aplicació original.
Per tant, un dels nostres objectius serà aconseguir quines són les funcions que executa una aplicació, d’entrada, Frida no t’informa de les funcions, per això, hauríem d’utilitzar altre programari com radare2
.
En el nostre cas, crearem un javascript
que afegeixi “hacked” al missatge original, i a més a més, ens imprimeixi per el log el missatge original i la seva modificació:
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("Missatge original:", originalText);
// Afegim el prefix "hacked "
var modifiedText = "hacked " + originalText;
params.message.value = modifiedText;
console.log("Missatge modificat:", params.message.value);
} catch (e) {
console.log("Error modificant el missatge:", e);
}
return this.sendMessage(params);
};
});
Aquest script el que ens fa és agafar l’objecte params.message, que conté el missatge original, i modifica el camp .value
.
Ara, per poder executar aquest script dins de Frida executem:
#hook.js és el nom de l'script, i Telegram és el nom que haurem trobat dins frida -Uai
frida -U -n Telegram -l hook.js
I ja podeu testejar i comprovar com s’altera el missatge.