Frida Tutorial 1

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert Red Team AWS de HackTricks)!

Autres façons de soutenir HackTricks :

Astuce de prime de bug : inscrivez-vous à Intigriti, une plateforme de prime de bug premium créée par des pirates informatiques, pour les pirates informatiques ! Rejoignez-nous sur https://go.intigriti.com/hacktricks aujourd'hui, et commencez à gagner des primes allant jusqu'à 100 000 $ !

Il s'agit d'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 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 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

Regarder : La fonction reçoit une chaîne en paramètre, pas besoin de surcharge?

Hook 2 - Fonction de Bruteforce

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 pourriez 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() { }
});
});

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 voulez accrocher en indiquant le type des arguments.

Vous pouvez voir cela dans le prochain tutoriel.

Conseil de prime de bug : inscrivez-vous à Intigriti, une plateforme de prime de bug premium créée par des hackers, pour des hackers**! Rejoignez-nous sur https://go.intigriti.com/hacktricks aujourd'hui, et commencez à gagner des primes allant jusqu'à 100 000 $!

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres façons de soutenir HackTricks:

Dernière mise à jour