Per josepmariabella / març 26, 2025 (Aquesta és una còpia de l'article aparegut al blog de Josep Ma Bellà training-b.com a petició de l'autor)
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.
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
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.
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.
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
Frida és una aplicació, que s’instal·la en el sistema, i que a través de JavaScript é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.