Astuce de prime de bug : inscrivez-vous sur Intigriti, une plateforme de prime de bug premium créée par des pirates, pour des pirates ! Rejoignez-nous sur https://go.intigriti.com/hacktricks aujourd'hui, et commencez à gagner des primes allant jusqu'à 100 000 $ !
Installation
Installez les outils frida :
pipinstallfrida-toolspipinstallfrida
Téléchargez et installez sur l'Android le serveur frida (Téléchargez la dernière version).
Une commande pour redémarrer adb en mode root, se connecter, télécharger frida-server, donner les permissions d'exécution et l'exécuter en arrière-plan:
frida-ps-U#Basic frida hookingfrida-ldisableRoot.js-fowasp.mstg.uncrackable1#Hooking before starting the appfrida-U--no-pause-ldisableRoot.js-fowasp.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.
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 MainActivity .onStart() & .onCreate()
English
To hook the onStart() and onCreate() methods of the MainActivity class, you can use Frida to intercept and modify the behavior of these methods in an Android application.
Here is an example script that demonstrates how to hook these methods using Frida:
By running this Frida script, you can intercept the onStart() and onCreate() methods of the MainActivity class and add your custom logic or modifications.
French
Pour accrocher les méthodes onStart() et onCreate() de la classe MainActivity, vous pouvez utiliser Frida pour intercepter et modifier le comportement de ces méthodes dans une application Android.
Voici un exemple de script qui montre comment accrocher ces méthodes en utilisant Frida :
En exécutant ce script Frida, vous pouvez intercepter les méthodes onStart() et onCreate() de la classe MainActivity et ajouter votre propre logique ou modifications.
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);};
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);};
Accrocher des fonctions avec des paramètres et récupérer 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:
functiongetString(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};
Accrocher des fonctions et les appeler 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 d'ici)
var string_class =Java.use("java.lang.String"); // get a JS wrapper for java's String classmy_class.fun.overload("java.lang.String").implementation=function(x){ //hooking the new functionvar my_string =string_class.$new("My TeSt String#####"); //creating a new String by using `new` operatorconsole.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 variableconsole.log("Return value: "+ret);return ret;};
Obtenir un objet déjà créé d'une classe
Si vous souhaitez 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 fridaconsole.log("Found instance: "+instance);console.log("Result of secret func: "+instance.secret());},onComplete:function(){}});
Astuce de prime de bug : inscrivez-vous sur 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 $!