Bug bounty tip: sign up for Intigriti, μια premium πλατφόρμα bug bounty που δημιουργήθηκε από hackers, για hackers! Join us at https://go.intigriti.com/hacktricks today, and start earning bounties up to $100,000!
Ορισμένα μέρη του αρχικού κώδικα δεν λειτουργούν και έχουν τροποποιηθεί εδώ.
Part 2
Εδώ μπορείτε να δείτε ένα παράδειγμα του πώς να hook 2 functions με το ίδιο όνομα αλλά διαφορετικές παραμέτρους.
Επίσης, θα μάθετε πώς να καλέσετε μια function με τις δικές σας παραμέτρους.
Και τέλος, υπάρχει ένα παράδειγμα του πώς να βρείτε μια instance μιας κλάσης και να την κάνετε να καλέσει μια function.
//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 () { }});});
Μπορείτε να δείτε ότι για να δημιουργήσετε μια String πρώτα έχει αναφερθεί η κλάση java.lang.String και στη συνέχεια έχει δημιουργηθεί ένα $new αντικείμενο αυτής της κλάσης με μια String ως περιεχόμενο. Αυτή είναι η σωστή μέθοδος για να δημιουργήσετε ένα νέο αντικείμενο μιας κλάσης. Αλλά, σε αυτή την περίπτωση, θα μπορούσατε απλά να περάσετε στη this.fun() οποιαδήποτε String όπως: this.fun("hey there!")
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
Μέρος 3
Python
Τώρα θα δείτε πώς να στείλετε εντολές στην συνδεδεμένη εφαρμογή μέσω Python για να καλέσετε τη συνάρτηση:
Η εντολή "1" θα έξοδο, η εντολή "2" θα βρει και θα δημιουργήσει μια περίπτωση της κλάσης και θα καλέσει τη ιδιωτική συνάρτησηsecret() και η εντολή "3" θα hook τη συνάρτηση secret() έτσι ώστε να επιστρέφει μια διαφορετική συμβολοσειρά.
Έτσι, αν καλέσετε "2" θα πάρετε το πραγματικό μυστικό, αλλά αν καλέσετε "3" και μετά "2" θα πάρετε το ψεύτικο μυστικό.
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};
Part 4
Εδώ θα δείτε πώς να κάνετε Python και JS να αλληλεπιδρούν χρησιμοποιώντας αντικείμενα JSON. Η JS χρησιμοποιεί τη συνάρτηση send() για να στείλει δεδομένα στον πελάτη Python, και η Python χρησιμοποιεί τις συναρτήσεις post() για να στείλει δεδομένα στο σενάριο JS. Η JS θα μπλοκάρει την εκτέλεση μέχρι να λάβει μια απάντηση από την Python.
Tip για bug bounty: εγγραφείτε στο Intigriti, μια premium πλατφόρμα bug bounty που δημιουργήθηκε από hackers, για hackers! Ελάτε μαζί μας στο https://go.intigriti.com/hacktricks σήμερα, και αρχίστε να κερδίζετε βραβεία έως $100,000!