Tutoriel Frida 1
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
Ceci est un résumé de l’article: 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
Python
Frida vous permet d’insérer du code JavaScript à l’intérieur de fonctions d’une application en cours d’exécution. Mais vous pouvez utiliser python pour appeler les hooks et même pour interagir avec les hooks.
Voici un script python simple que vous pouvez utiliser avec tous les exemples proposés dans ce tutoriel:
#hooking.py
import frida, sys
with open(sys.argv[1], 'r') as f:
jscode = f.read()
process = frida.get_usb_device().attach('infosecadventures.fridademo')
script = process.create_script(jscode)
print('[ * ] Running Frida Demo application')
script.load()
sys.stdin.read()
Appeler le script :
python hooking.py <hookN.js>
Il est utile de savoir comment utiliser python avec frida, mais pour ces exemples vous pouvez aussi appeler directement Frida en utilisant les outils frida en ligne de commande :
frida -U --no-pause -l hookN.js -f infosecadventures.fridademo
Hook 1 - Boolean Bypass
Ici vous pouvez voir comment hook une boolean méthode (checkPin) de la classe : infosecadventures.fridademo.utils.PinUtil
//hook1.js
Java.perform(function () {
console.log("[ * ] Starting implementation override...")
var MainActivity = Java.use("infosecadventures.fridademo.utils.PinUtil")
MainActivity.checkPin.implementation = function (pin) {
console.log("[ + ] PIN check successfully bypassed!")
return true
}
})
python hooking.py hook1.js
Regarder : La fonction reçoit comme paramètre un String, pas besoin d’overload?
Hook 2 - Function Bruteforce
Non-Static Function
Si vous voulez appeler une fonction non statique d’une classe, vous avez d’abord besoin d’une instance de cette classe. Ensuite, vous pouvez utiliser cette instance pour appeler la fonction.
Pour ce faire, vous pouvez trouver une instance existante et l’utiliser:
Java.perform(function () {
console.log("[ * ] Starting PIN Brute-force, please wait...")
Java.choose("infosecadventures.fridademo.utils.PinUtil", {
onMatch: function (instance) {
console.log("[ * ] Instance found in memory: " + instance)
for (var i = 1000; i < 9999; i++) {
if (instance.checkPin(i + "") == true) {
console.log("[ + ] Found correct PIN: " + i)
break
}
}
},
onComplete: function () {},
})
})
Dans ce cas cela ne fonctionne pas car il n’y a aucune instance et la fonction est statique
Fonction statique
Si la fonction est statique, vous pouvez simplement l’appeler :
//hook2.js
Java.perform(function () {
console.log("[ * ] Starting PIN Brute-force, please wait...")
var PinUtil = Java.use("infosecadventures.fridademo.utils.PinUtil")
for (var i = 1000; i < 9999; i++) {
if (PinUtil.checkPin(i + "") == true) {
console.log("[ + ] Found correct PIN: " + i)
}
}
})
Hook 3 - Récupération des arguments et de la valeur de retour
Vous pouvez hooker une fonction et la faire afficher la valeur des arguments passés et de la valeur de retour :
//hook3.js
Java.perform(function () {
console.log("[ * ] Starting implementation override...")
var EncryptionUtil = Java.use(
"infosecadventures.fridademo.utils.EncryptionUtil"
)
EncryptionUtil.encrypt.implementation = function (key, value) {
console.log("Key: " + key)
console.log("Value: " + value)
var encrypted_ret = this.encrypt(key, value) //Call the original function
console.log("Encrypted value: " + encrypted_ret)
return encrypted_ret
}
})
Hooking sur les versions récentes d’Android (14/15/16)
- Depuis Frida 17.1.x+, Java hooking sur Android 14–16 est de nouveau stable (ART quick entrypoint offsets were fixed). Si
Java.choosene retourne rien sur Android 14+, mettez à jour frida-server/gadget et les paquets CLI/Python vers >=17.1.5. - Les applications avec des contrôles anti-debug précoces plantent souvent avant
attach. Utilisez spawn pour que les hooks se chargent avantonCreate:
frida -U -f infosecadventures.fridademo -l hook1.js --no-pause
- Lorsque plusieurs surcharges existent, spécifiez explicitement la cible :
var Cls = Java.use("com.example.Class")
Cls.doThing.overload('java.lang.String', 'int').implementation = function(s, i) {
return this.doThing(s, i)
}
Injection plus discrète avec Zygisk Gadget
Certaines applications détectent ptrace ou frida-server. Les modules Magisk/Zygisk peuvent charger frida-gadget dans Zygote afin qu’aucun processus ne soit ptracé :
- Installez un module Zygisk Gadget (par ex.,
zygisk-gadget) et redémarrez. - Configurez le package cible et un délai optionnel pour contourner les vérifications au démarrage :
adb shell "su -c 'echo infosecadventures.fridademo,5000 > /data/local/tmp/re.zyg.fri/target_packages'"
- Lancez l’application et attachez-vous au gadget nommé :
frida -U -n Gadget -l hook3.js
Parce que le gadget est injecté par Zygote, les vérifications d’intégrité APK restent inchangées et les vérifications basiques de chaînes ptrace/Frida échouent généralement.
Important
Dans ce tutoriel vous avez hooked des méthodes en utilisant le nom de la méthode et .implementation. Mais s’il y avait plus d’une méthode portant le même nom, vous devrez spécifier la méthode que vous voulez hook en indiquant le type des arguments.
Vous pouvez voir cela dans le tutoriel suivant.
Références
- Frida News (Android 14–16 fixes & Frida 17.x releases)
- zygisk-gadget – Zygisk module that loads frida-gadget
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.


