8.2 KiB
Tutoriel Frida 1
☁️ 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 NFT
- 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.
Si vous êtes intéressé par une carrière de piratage et souhaitez pirater l'impossible - nous recrutons ! (maîtrise du polonais écrit et parlé requise).
{% embed url="https://www.stmcyber.com/careers" %}
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
Python
Frida vous permet d'insérer du code JavaScript dans les 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()
Appelez le script:
python hooking.py <hookN.js>
Il est utile de savoir comment utiliser Python avec Frida, mais pour ces exemples, vous pouvez également appeler directement Frida en utilisant les outils de ligne de commande de Frida :
frida -U --no-pause -l hookN.js -f infosecadventures.fridademo
Hook 1 - Contournement de booléen
Ici, vous pouvez voir comment hooker une méthode booléenne (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
Regardez: La fonction reçoit une chaîne de caractères en paramètre, pas besoin de surcharge?
Hook 2 - Bruteforce de fonction
Fonction non statique
Si vous souhaitez 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 pas d'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 accrocher une fonction et la faire imprimer la valeur des arguments passés et la valeur 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;
}
});
Important
Dans ce tutoriel, vous avez accroché des méthodes en utilisant le nom de la méthode et .implementation. Mais s'il y avait plus d'une méthode avec le même nom, vous devrez spécifier la méthode que vous souhaitez accrocher en indiquant le type des arguments.
Vous pouvez voir cela dans le prochain tutoriel.
Si vous êtes intéressé par une carrière de piratage et que vous souhaitez pirater l'impossible - nous recrutons ! (maîtrise du polonais écrit et parlé requise).
{% embed url="https://www.stmcyber.com/careers" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Vous travaillez dans une entreprise de cybersécurité ? Vous souhaitez voir votre entreprise annoncée dans HackTricks ? ou souhaitez-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 NFT
- 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.