Arbeiten Sie in einem Cybersicherheitsunternehmen? Möchten Sie Ihr Unternehmen in HackTricks beworben sehen? Oder möchten Sie Zugriff auf die neueste Version des PEASS erhalten oder HackTricks im PDF-Format herunterladen? Überprüfen Sie die ABONNEMENTPLÄNE!
Bug-Bounty-Tipp: Melden Sie sich an bei Intigriti, einer Premium-Bug-Bounty-Plattform, die von Hackern für Hacker erstellt wurde! Treten Sie uns bei https://go.intigriti.com/hacktricks heute bei und beginnen Sie, Prämien von bis zu 100.000 $ zu verdienen!
Einige Teile des Originalcodes funktionieren nicht und wurden hier geändert.
Teil 2
Hier sehen Sie ein Beispiel dafür, wie Sie 2 Funktionen mit demselben Namen aber unterschiedlichen Parametern hooken können.
Außerdem lernen Sie, wie Sie eine Funktion mit Ihren eigenen Parametern aufrufen können.
Und schließlich gibt es ein Beispiel dafür, wie Sie eine Instanz einer Klasse finden und sie dazu bringen können, eine Funktion aufzurufen.
//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 () { }});});
Du kannst 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önntest du einfach einen beliebigen String an this.fun() übergeben, z.B. 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
Nun 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.
Dann, wenn du "2" aufrufst, erhältst du das echte Geheimnis, aber wenn du "3" und dann "2" aufrufst, erhältst du das gefälschte 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 sie JSON-Objekte verwenden. JS verwendet die send()-Funktion, um Daten an den Python-Client zu senden, und Python verwendet die post()-Funktionen, um Daten an das JS-Skript zu senden. Das JS wird die Ausführung blockieren, bis es eine Antwort von Python erhält.
Frida allows you to interact with the JavaScript runtime of the target app. This can be useful for various purposes, such as dynamically modifying the behavior of the app, interacting with the app's JavaScript code, or even injecting your own JavaScript code into the app.
console.log("Script loaded successfully ");Java.perform(function () {var tv_class =Java.use("android.widget.TextView");tv_class.setText.overload('java.lang.CharSequence').implementation=function (x) {var string_to_send =x.toString();var string_to_recv ="";send(string_to_send); // send data to python coderecv(function (received_json_object) {string_to_recv =received_json_object.my_data;}).wait(); //block execution till the message is receivedconsole.log("Final string_to_recv: "+ string_to_recv)returnthis.setText(string_to_recv);}});
Bug-Bounty-Tipp: Registriere dich bei Intigriti, einer Premium-Bug-Bounty-Plattform, die von Hackern für Hacker erstellt wurde! Begleite uns noch heute unter https://go.intigriti.com/hacktricks und beginne, Prämien von bis zu $100.000 zu verdienen!
Arbeitest du in einem Cybersicherheitsunternehmen? Möchtest du dein Unternehmen in HackTricks beworben sehen? Oder möchtest du Zugriff auf die neueste Version des PEASS erhalten oder HackTricks im PDF-Format herunterladen? Überprüfe die ABONNEMENTPLÄNE!