Travaillez-vous dans une entreprise de cybersécurité? Vous voulez voir votre entreprise annoncée dans HackTricks? ou voulez-vous avoir accès à la dernière version du PEASS ou télécharger HackTricks en PDF? Consultez les PLANS D'ABONNEMENT!
Astuce de prime de bug: inscrivez-vous à Intigriti, une plateforme de prime de bug premium créée par des pirates informatiques, pour des pirates informatiques**! Rejoignez-nous sur https://go.intigriti.com/hacktricks aujourd'hui, et commencez à gagner des primes allant jusqu'à 100 000 $!
Certaines parties du code original ne fonctionnent pas et ont été modifiées ici.
Partie 2
Ici, vous pouvez voir un exemple de comment accrocher 2 fonctions avec le même nom mais avec des paramètres différents.
De plus, vous allez apprendre comment appeler une fonction avec vos propres paramètres.
Enfin, il y a un exemple de comment trouver une instance d'une classe et la faire appeler une fonction.
//s2.jsconsole.log("Script loaded successfully ");Java.perform(functionx() {console.log("Inside java perform function");var my_class =Java.use("com.example.a11x256.frida_test.my_activity");//Hook "fun" with parameters (int, int)my_class.fun.overload("int","int").implementation=function (x, y) { //hooking the old functionconsole.log("original call: fun("+ x +", "+ y +")");var ret_value =this.fun(2,5);return ret_value;};//Hook "fun" with paramater(String)var string_class =Java.use("java.lang.String");my_class.fun.overload("java.lang.String").implementation=function (x) { //hooking the new functionconsole.log("*")//Create a new String and call the function with your input.var my_string =string_class.$new("My TeSt String#####");console.log("Original arg: "+ x);var ret =this.fun(my_string);console.log("Return value: "+ ret);console.log("*")return ret;};//Find an instance of the class and call "secret" function.Java.choose("com.example.a11x256.frida_test.my_activity", {onMatch:function (instance) {console.log(tring, and the it has"Found instance: "+ instance);console.log("Result of secret func: "+instance.secret());},onComplete:function () { }});});
Vous pouvez voir que pour créer une chaîne de caractères, il a d'abord fait référence à la classe java.lang.String puis a créé un nouvel objet $new de cette classe avec une chaîne de caractères comme contenu. C'est la manière correcte de créer un nouvel objet d'une classe. Cependant, dans ce cas, vous pourriez simplement passer à this.fun() n'importe quelle chaîne de caractères comme ceci : this.fun("salut !")
Python
//loader.pyimport fridaimport timedevice = frida.get_usb_device()pid = device.spawn(["com.example.a11x256.frida_test"])device.resume(pid)time.sleep(1)#Without it Java.perform silently failssession = device.attach(pid)script = session.create_script(open("s2.js").read())script.load()#prevent the python script from terminatingraw_input()
python loader.py
Partie 3
Python
Maintenant, vous allez voir comment envoyer des commandes à l'application accrochée via Python pour appeler la fonction:
La commande "1" va quitter, la commande "2" va trouver une instance de la classe et appeler la fonction privéesecret() et la commande "3" va accrocher la fonction secret() pour qu'elle retourne une chaîne différente.
Ainsi, si vous appelez "2", vous obtiendrez le vrai secret, mais si vous appelez d'abord "3" puis "2", vous obtiendrez le faux secret.
JS
console.log("Script loaded successfully ");var instances_array = [];functioncallSecretFun() {Java.perform(function () {if (instances_array.length==0) { // if array is emptyJava.choose("com.example.a11x256.frida_test.my_activity", {onMatch:function (instance) {console.log("Found instance: "+ instance);instances_array.push(instance)console.log("Result of secret func: "+instance.secret());},onComplete:function () { }});}else {//else if the array has some valuesconsole.log("Result of secret func: "+ instances_array[0].secret());}});}functionhookSecret() {Java.perform(function () {var my_class =Java.use("com.example.a11x256.frida_test.my_activity");var string_class =Java.use("java.lang.String");my_class.secret.overload().implementation=function(){var my_string =string_class.$new("TE ENGANNNNEEE");return my_string;}});}rpc.exports = {callsecretfunction: callSecretFun,hooksecretfunction: hookSecret};
Partie 4
Ici, vous verrez comment faire interagir Python et JS en utilisant des objets JSON. JS utilise la fonction send() pour envoyer des données au client Python, et Python utilise les fonctions post() pour envoyer des données au script JS. Le JS bloquera l'exécution jusqu'à ce qu'il reçoive une réponse de Python.
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 $ !
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 du PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !