Εργάζεστε σε μια εταιρεία κυβερνοασφάλειας; Θέλετε να δείτε τη εταιρεία σας διαφημισμένη στο HackTricks; ή θέλετε να έχετε πρόσβαση στη τελευταία έκδοση του PEASS ή να κατεβάσετε το HackTricks σε μορφή PDF; Ελέγξτε τα ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ!
Συμβουλή για bug bounty: Εγγραφείτε στο Intigriti, μια προηγμένη πλατφόρμα bug bounty δημιουργημένη από χάκερς, για χάκερς! Γίνετε μέλος στο https://go.intigriti.com/hacktricks σήμερα, και αρχίστε να κερδίζετε αμοιβές έως και $100,000!
//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" θα συνδέσει τη συνάρτηση secret() ώστε να επιστρέφει ένα διαφορετικό string.
Έτσι, αν καλέσετε την εντολή "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};
Μέρος 4
Εδώ θα δείτε πώς να κάνετε την αλληλεπίδραση Python και JS χρησιμοποιώντας αντικείμενα JSON. Το JS χρησιμοποιεί τη λειτουργία send() για να στείλει δεδομένα στον πελάτη Python, και η Python χρησιμοποιεί τις λειτουργίες post() για να στείλει δεδομένα στο σενάριο JS. Το JS θα μπλοκάρει την εκτέλεση μέχρι να λάβει απάντηση από την Python.
Συμβουλή για bug bounty: Εγγραφείτε στο Intigriti, μια πρεμιέρα πλατφόρμα bug bounty δημιουργημένη από χάκερς, για χάκερς! Γίνετε μέλος στο https://go.intigriti.com/hacktricks σήμερα και αρχίστε να κερδίζετε αμοιβές έως και $100,000!
Δουλεύετε σε μια εταιρεία κυβερνοασφάλειας; Θέλετε να δείτε την εταιρεία σας διαφημισμένη στο HackTricks; Ή θέλετε να έχετε πρόσβαση στην τελευταία έκδοση του PEASS ή να κατεβάσετε το HackTricks σε μορφή PDF; Ελέγξτε τα ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ!