Bug-Bounty-Tipp: Melde dich an bei Intigriti, einer Premium-Bug-Bounty-Plattform, die von Hackern für Hacker erstellt wurde! Schließe dich uns heute unter https://go.intigriti.com/hacktricks an und beginne, Prämien von bis zu $100.000 zu verdienen!
Einige Teile des ursprünglichen Codes funktionieren nicht und wurden hier modifiziert.
Teil 2
Hier siehst du ein Beispiel, wie man 2 Funktionen mit demselben Namen aber unterschiedlichen Parametern hookt.
Außerdem wirst du lernen, wie man eine Funktion mit eigenen Parametern aufruft.
Und schließlich gibt es ein Beispiel, wie man eine Instanz einer Klasse findet und sie eine Funktion aufrufen lässt.
//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 () { }});});
Sie können sehen, dass zur Erstellung eines Strings zuerst die Klasse java.lang.String referenziert wurde und dann ein $new-Objekt dieser Klasse mit einem String als Inhalt erstellt wurde. Dies ist der richtige Weg, um ein neues Objekt einer Klasse zu erstellen. Aber in diesem Fall könnten Sie einfach this.fun() jeden String übergeben, wie: 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
Teil 3
Python
Jetzt werden Sie sehen, wie Sie Befehle an die gehookte App über Python senden, um eine Funktion aufzurufen:
Der Befehl "1" wird beenden, der Befehl "2" wird eine Instanz der Klasse finden und die private Funktionsecret() aufrufen und der Befehl "3" wird die Funktion secret()hooken, sodass sie einen anderen Stringzurückgibt.
Wenn Sie also "2" aufrufen, erhalten Sie das echte Geheimnis, aber wenn Sie "3" und dann "2" aufrufen, erhalten Sie das falsche Geheimnis.
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};
Teil 4
Hier sehen Sie, wie Python und JS interagieren können, indem JSON-Objekte verwendet werden. JS verwendet die send()-Funktion, um Daten an den Python-Client zu senden, und Python verwendet die post()-Funktion, um Daten an das JS-Skript zu senden. JS blockiert die Ausführung, bis es eine Antwort von Python erhält.
Bug-Bounty-Tipp: Melde dich an bei Intigriti, einer Premium-Bug-Bounty-Plattform, die von Hackern für Hacker erstellt wurde! Schließe dich uns an unter https://go.intigriti.com/hacktricks heute und beginne, Belohnungen von bis zu 100.000 $ zu verdienen!