.. | ||
frida-tutorial-1.md | ||
frida-tutorial-2.md | ||
objection-tutorial.md | ||
owaspuncrackable-1.md | ||
README.md |
Tutoriel Frida
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
- Découvrez The PEASS Family, notre collection exclusive de NFTs
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.
Astuce de chasse aux bugs : inscrivez-vous à Intigriti, une plateforme de chasse aux bugs premium créée par des pirates, pour des pirates ! Rejoignez-nous sur https://go.intigriti.com/hacktricks dès aujourd'hui et commencez à gagner des primes allant jusqu'à 100 000 $ !
{% embed url="https://go.intigriti.com/hacktricks" %}
Installation
Installez les outils frida :
pip install frida-tools
pip install frida
Téléchargez et installez le serveur frida sur l'Android (Téléchargez la dernière version).
Une ligne de commande pour redémarrer adb en mode root, se connecter à celui-ci, télécharger frida-server, donner les permissions d'exécution et l'exécuter en arrière-plan :
adb root; adb connect localhost:6000; sleep 1; adb push frida-server /data/local/tmp/; adb shell "chmod 755 /data/local/tmp/frida-server"; adb shell "/data/local/tmp/frida-server &"
Vérifiez si cela fonctionne :
frida-ps -U #List packages and processes
frida-ps -U | grep -i <part_of_the_package_name> #Get all the package name
Tutoriels
Tutoriel 1
De: https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1
APK: https://github.com/t0thkr1s/frida-demo/releases
Code source: https://github.com/t0thkr1s/frida-demo
Suivez le lien pour le lire.
Tutoriel 2
De: https://11x256.github.io/Frida-hooking-android-part-2/ (Parties 2, 3 et 4)
APKs et code source: https://github.com/11x256/frida-android-examples
Suivez le lien pour le lire.
Tutoriel 3
De: https://joshspicer.com/android-frida-1
APK: https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk
Suivez le lien pour le lire.
Vous pouvez trouver des scripts Frida impressionnants ici: https://codeshare.frida.re/
Exemples rapides
Ici, vous pouvez trouver les fonctionnalités les plus basiques et intéressantes de Frida pour créer rapidement un script :
Appeler Frida depuis la ligne de commande
frida-ps -U
#Basic frida hooking
frida -l disableRoot.js -f owasp.mstg.uncrackable1
#Hooking before starting the app
frida -U --no-pause -l disableRoot.js -f owasp.mstg.uncrackable1
#The --no-pause and -f options allow the app to be spawned automatically,
#frozen so that the instrumentation can occur, and the automatically
#continue execution with our modified code.
Script Python de base
import frida, sys
jscode = open(sys.argv[0]).read()
process = frida.get_usb_device().attach('infosecadventures.fridademo')
script = process.create_script(jscode)
print('[ * ] Running Frida Demo application')
script.load()
sys.stdin.read()
Accrocher des fonctions sans paramètres
Accrochez la fonction a()
de la classe sg.vantagepoint.a.c
.
Java.perform(function () {
; rootcheck1.a.overload().implementation = function() {
rootcheck1.a.overload().implementation = function() {
send("sg.vantagepoint.a.c.a()Z Root check 1 HIT! su.exists()");
return false;
};
});
Hook de la méthode exit()
de Java
Dans cet exemple, nous allons voir comment utiliser Frida pour intercepter les appels à la méthode exit()
de Java et les remplacer par notre propre implémentation.
Code Java
public class Example {
public static void main(String[] args) {
System.out.println("Hello, world!");
System.exit(0);
}
}
Script Frida
Java.perform(function () {
var System = Java.use('java.lang.System');
var Runtime = Java.use('java.lang.Runtime');
// Intercepte System.exit()
System.exit.implementation = function (statusCode) {
console.log('Intercepté System.exit(' + statusCode + ')');
// Appel de notre propre implémentation
Runtime.getRuntime().exit(statusCode);
};
// Intercepte Runtime.exit()
Runtime.exit.implementation = function (statusCode) {
console.log('Intercepté Runtime.exit(' + statusCode + ')');
// Appel de la méthode originale
this.exit(statusCode);
};
});
Exécution
$ javac Example.java
$ frida -f java -l script.js --no-pause Example
Résultat
Intercepté System.exit(0)
Intercepté Runtime.exit(0)
var sysexit = Java.use("java.lang.System");
sysexit.exit.overload("int").implementation = function(var_0) {
send("java.lang.System.exit(I)V // We avoid exiting the application :)");
};
Hook de .onStart()
et .onCreate()
de MainActivity
Dans ce tutoriel, nous allons voir comment utiliser Frida pour hooker les méthodes .onStart()
et .onCreate()
de la classe MainActivity d'une application Android.
Étape 1: Installer Frida sur l'appareil Android
Pour installer Frida sur l'appareil Android, vous pouvez suivre les instructions fournies dans le tutoriel d'installation de Frida.
Étape 2: Démarrer l'application Android
Démarrer l'application Android que vous souhaitez hooker.
Étape 3: Écrire le script Frida
Créez un fichier JavaScript nommé hook.js
avec le contenu suivant:
Java.perform(function() {
var MainActivity = Java.use('com.example.app.MainActivity');
MainActivity.onCreate.implementation = function() {
console.log('onCreate() hooked');
this.onCreate();
};
MainActivity.onStart.implementation = function() {
console.log('onStart() hooked');
this.onStart();
};
});
Ce script hookera les méthodes .onStart()
et .onCreate()
de la classe MainActivity.
Étape 4: Exécuter le script Frida
Exécutez le script Frida en utilisant la commande suivante:
frida -U -f com.example.app -l hook.js --no-pause
Assurez-vous de remplacer com.example.app
par le nom de votre application.
Étape 5: Vérifier la sortie
Ouvrez la console et vérifiez la sortie. Vous devriez voir les messages onCreate() hooked
et onStart() hooked
s'afficher lorsque les méthodes correspondantes sont appelées.
C'est tout! Vous avez maintenant hooké les méthodes .onStart()
et .onCreate()
de la classe MainActivity de votre application Android en utilisant Frida.
var mainactivity = Java.use("sg.vantagepoint.uncrackable1.MainActivity");
mainactivity.onStart.overload().implementation = function() {
send("MainActivity.onStart() HIT!!!");
var ret = this.onStart.overload().call(this);
};
mainactivity.onCreate.overload("android.os.Bundle").implementation = function(var_0) {
send("MainActivity.onCreate() HIT!!!");
var ret = this.onCreate.overload("android.os.Bundle").call(this,var_0);
};
Accrocher .onCreate()
d'Android
Frida est un outil puissant pour l'analyse dynamique des applications. L'un des cas d'utilisation les plus courants consiste à accrocher des méthodes spécifiques de l'application pour intercepter et manipuler les données en temps réel.
Dans ce tutoriel, nous allons voir comment accrocher la méthode .onCreate()
d'une application Android à l'aide de Frida.
Étape 1 - Prérequis
Assurez-vous d'avoir installé Frida sur votre machine. Si ce n'est pas le cas, vous pouvez suivre les instructions d'installation à partir du site officiel de Frida.
Étape 2 - Démarrer l'application
Tout d'abord, nous devons démarrer l'application que nous voulons analyser. Vous pouvez utiliser n'importe quelle application Android pour cet exemple.
Étape 3 - Écrire le script Frida
Maintenant, nous allons écrire un script Frida pour accrocher la méthode .onCreate()
de l'application. Ouvrez votre éditeur de texte préféré et créez un nouveau fichier avec le nom hook_oncreate.js
. Copiez et collez le code suivant dans le fichier :
Java.perform(function () {
var MainActivity = Java.use('com.example.app.MainActivity');
MainActivity.onCreate.implementation = function () {
console.log('[+] onCreate() called');
this.onCreate();
};
});
Ce script utilise la fonction Java.use()
pour charger la classe MainActivity
de l'application. Ensuite, il accroche la méthode .onCreate()
en remplaçant son implémentation par une nouvelle fonction qui affiche un message dans la console et appelle la méthode originale.
Étape 4 - Exécuter le script Frida
Maintenant, nous pouvons exécuter le script Frida en utilisant la commande suivante :
frida -U com.example.app -l hook_oncreate.js --no-pause
Assurez-vous de remplacer com.example.app
par le nom de l'application que vous voulez analyser.
Étape 5 - Vérifier la sortie
Si tout s'est bien passé, vous devriez voir le message [+] onCreate() called
s'afficher dans la console chaque fois que la méthode .onCreate()
est appelée dans l'application.
Conclusion
Dans ce tutoriel, nous avons vu comment accrocher la méthode .onCreate()
d'une application Android à l'aide de Frida. Cela peut être utile pour intercepter et manipuler les données en temps réel dans une application.
var activity = Java.use("android.app.Activity");
activity.onCreate.overload("android.os.Bundle").implementation = function(var_0) {
send("Activity HIT!!!");
var ret = this.onCreate.overload("android.os.Bundle").call(this,var_0);
};
Accrochage de fonctions avec des paramètres et récupération de la valeur
Accrocher une fonction de décryptage. Imprimer l'entrée, appeler la fonction originale pour décrypter l'entrée et enfin, imprimer les données en clair:
function getString(data){
var ret = "";
for (var i=0; i < data.length; i++){
ret += data[i].toString();
}
return ret
}
var aes_decrypt = Java.use("sg.vantagepoint.a.a");
aes_decrypt.a.overload("[B","[B").implementation = function(var_0,var_1) {
send("sg.vantagepoint.a.a.a([B[B)[B doFinal(enc) // AES/ECB/PKCS7Padding");
send("Key : " + getString(var_0));
send("Encrypted : " + getString(var_1));
var ret = this.a.overload("[B","[B").call(this,var_0,var_1);
send("Decrypted : " + ret);
var flag = "";
for (var i=0; i < ret.length; i++){
flag += String.fromCharCode(ret[i]);
}
send("Decrypted flag: " + flag);
return ret; //[B
};
Accrochage de fonctions et appel avec notre entrée
Accrochez une fonction qui reçoit une chaîne de caractères et appelez-la avec une autre chaîne de caractères (à partir de ici)
var string_class = Java.use("java.lang.String"); // get a JS wrapper for java's String class
my_class.fun.overload("java.lang.String").implementation = function(x){ //hooking the new function
var my_string = string_class.$new("My TeSt String#####"); //creating a new String by using `new` operator
console.log("Original arg: " +x );
var ret = this.fun(my_string); // calling the original function with the new String, and putting its return value in ret variable
console.log("Return value: "+ret);
return ret;
};
Obtenir un objet déjà créé d'une classe
Si vous voulez extraire un attribut d'un objet créé, vous pouvez utiliser ceci.
Dans cet exemple, vous allez voir comment obtenir l'objet de la classe my_activity et comment appeler la fonction .secret() qui affichera un attribut privé de l'objet :
Java.choose("com.example.a11x256.frida_test.my_activity" , {
onMatch : function(instance){ //This function will be called for every instance found by frida
console.log("Found instance: "+instance);
console.log("Result of secret func: " + instance.secret());
},
onComplete:function(){}
});
Astuce de prime de bug: inscrivez-vous à Intigriti, une plateforme de prime de bug premium créée par des hackers, pour les hackers! Rejoignez-nous sur https://go.intigriti.com/hacktricks aujourd'hui et commencez à gagner des primes allant jusqu'à 100 000 $!
{% embed url="https://go.intigriti.com/hacktricks" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Travaillez-vous dans une entreprise de cybersécurité? Voulez-vous voir votre entreprise annoncée dans HackTricks? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF? Consultez les PLANS D'ABONNEMENT!
- Découvrez The PEASS Family, notre collection exclusive de NFTs
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.