# Frida Tutorial {{#include ../../../banners/hacktricks-training.md}} ## Εγκατάσταση Εγκαταστήστε τα **frida tools**: ```bash pip install frida-tools pip install frida ``` **Κατεβάστε και εγκαταστήστε** στο android τον **frida server** ([Download the latest release](https://github.com/frida/frida/releases)).\ Μονογραμμή για να επανεκκινήσετε το adb σε λειτουργία root, να συνδεθείτε σε αυτό, να ανεβάσετε τον frida-server, να δώσετε δικαιώματα εκτέλεσης και να τον εκτελέσετε στο παρασκήνιο: ```bash adb root; adb connect localhost:6000; sleep 1; adb push frida-server /data/local/tmp/; adb shell "chmod 755 /data/local/tmp/frida-server"; adb shell "/data/local/tmp/frida-server &" ``` **Ελέγξτε** αν **λειτουργεί**: ```bash frida-ps -U #List packages and processes frida-ps -U | grep -i #Get all the package name ``` ## Μαθήματα ### [Μάθημα 1](frida-tutorial-1.md) **Από**: [https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1](https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1)\ **APK**: [https://github.com/t0thkr1s/frida-demo/releases](https://github.com/t0thkr1s/frida-demo/releases)\ **Πηγαίος Κώδικας**: [https://github.com/t0thkr1s/frida-demo](https://github.com/t0thkr1s/frida-demo) **Ακολουθήστε τον [σύνδεσμο για να το διαβάσετε](frida-tutorial-1.md).** ### [Μάθημα 2](frida-tutorial-2.md) **Από**: [https://11x256.github.io/Frida-hooking-android-part-2/](https://11x256.github.io/Frida-hooking-android-part-2/) (Μέρη 2, 3 & 4)\ **APKs και Πηγαίος Κώδικας**: [https://github.com/11x256/frida-android-examples](https://github.com/11x256/frida-android-examples) **Ακολουθήστε τον [σύνδεσμο για να το διαβάσετε.](frida-tutorial-2.md)** ### [Μάθημα 3](owaspuncrackable-1.md) **Από**: [https://joshspicer.com/android-frida-1](https://joshspicer.com/android-frida-1)\ **APK**: [https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk](https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk) **Ακολουθήστε τον [σύνδεσμο για να το διαβάσετε](owaspuncrackable-1.md).** **Μπορείτε να βρείτε περισσότερα καταπληκτικά σενάρια Frida εδώ:** [**https://codeshare.frida.re/**](https://codeshare.frida.re) ## Γρήγορα Παραδείγματα ### Καλώντας το Frida από τη γραμμή εντολών ```bash frida-ps -U #Basic frida hooking frida -l disableRoot.js -f owasp.mstg.uncrackable1 #Hooking before starting the app frida -U --no-pause -l disableRoot.js -f owasp.mstg.uncrackable1 #The --no-pause and -f options allow the app to be spawned automatically, #frozen so that the instrumentation can occur, and the automatically #continue execution with our modified code. ``` ### Βασικό Σενάριο Python ```python import frida, sys jscode = open(sys.argv[0]).read() process = frida.get_usb_device().attach('infosecadventures.fridademo') script = process.create_script(jscode) print('[ * ] Running Frida Demo application') script.load() sys.stdin.read() ``` ### Hooking functions without parameters Hook the function `a()` of the class `sg.vantagepoint.a.c` ```javascript Java.perform(function () { ; rootcheck1.a.overload().implementation = function() { rootcheck1.a.overload().implementation = function() { send("sg.vantagepoint.a.c.a()Z Root check 1 HIT! su.exists()"); return false; }; }); ``` Hook java `exit()` ```javascript var sysexit = Java.use("java.lang.System") sysexit.exit.overload("int").implementation = function (var_0) { send("java.lang.System.exit(I)V // We avoid exiting the application :)") } ``` Hook MainActivity `.onStart()` & `.onCreate()` ```javascript var mainactivity = Java.use("sg.vantagepoint.uncrackable1.MainActivity") mainactivity.onStart.overload().implementation = function () { send("MainActivity.onStart() HIT!!!") var ret = this.onStart.overload().call(this) } mainactivity.onCreate.overload("android.os.Bundle").implementation = function ( var_0 ) { send("MainActivity.onCreate() HIT!!!") var ret = this.onCreate.overload("android.os.Bundle").call(this, var_0) } ``` Hook android `.onCreate()` ```javascript var activity = Java.use("android.app.Activity") activity.onCreate.overload("android.os.Bundle").implementation = function ( var_0 ) { send("Activity HIT!!!") var ret = this.onCreate.overload("android.os.Bundle").call(this, var_0) } ``` ### Hooking functions with parameters and retrieving the value Hooking μια συνάρτηση αποκρυπτογράφησης. Εκτυπώστε την είσοδο, καλέστε την αρχική συνάρτηση για να αποκρυπτογραφήσετε την είσοδο και τελικά, εκτυπώστε τα απλά δεδομένα: ```javascript function getString(data) { var ret = "" for (var i = 0; i < data.length; i++) { ret += data[i].toString() } return ret } var aes_decrypt = Java.use("sg.vantagepoint.a.a") aes_decrypt.a.overload("[B", "[B").implementation = function (var_0, var_1) { send("sg.vantagepoint.a.a.a([B[B)[B doFinal(enc) // AES/ECB/PKCS7Padding") send("Key : " + getString(var_0)) send("Encrypted : " + getString(var_1)) var ret = this.a.overload("[B", "[B").call(this, var_0, var_1) send("Decrypted : " + ret) var flag = "" for (var i = 0; i < ret.length; i++) { flag += String.fromCharCode(ret[i]) } send("Decrypted flag: " + flag) return ret //[B } ``` ### Hooking functions and calling them with our input Hook a function that receives a string and call it with other string (from [here](https://11x256.github.io/Frida-hooking-android-part-2/)) ```javascript var string_class = Java.use("java.lang.String") // get a JS wrapper for java's String class my_class.fun.overload("java.lang.String").implementation = function (x) { //hooking the new function var my_string = string_class.$new("My TeSt String#####") //creating a new String by using `new` operator console.log("Original arg: " + x) var ret = this.fun(my_string) // calling the original function with the new String, and putting its return value in ret variable console.log("Return value: " + ret) return ret } ``` ### Λήψη ενός ήδη δημιουργημένου αντικειμένου μιας κλάσης Αν θέλετε να εξάγετε κάποιο χαρακτηριστικό ενός δημιουργημένου αντικειμένου, μπορείτε να χρησιμοποιήσετε αυτό. Σε αυτό το παράδειγμα θα δείτε πώς να αποκτήσετε το αντικείμενο της κλάσης my_activity και πώς να καλέσετε τη συνάρτηση .secret() που θα εκτυπώσει ένα ιδιωτικό χαρακτηριστικό του αντικειμένου: ```javascript Java.choose("com.example.a11x256.frida_test.my_activity", { onMatch: function (instance) { //This function will be called for every instance found by frida console.log("Found instance: " + instance) console.log("Result of secret func: " + instance.secret()) }, onComplete: function () {}, }) ``` ## Άλλοι οδηγοί Frida - [https://github.com/DERE-ad2001/Frida-Labs](https://github.com/DERE-ad2001/Frida-Labs) - [Μέρος 1 της σειράς ιστολογίων για Προχωρημένη Χρήση Frida: Βιβλιοθήκες Κρυπτογράφησης IOS](https://8ksec.io/advanced-frida-usage-part-1-ios-encryption-libraries-8ksec-blogs/) {{#include ../../../banners/hacktricks-training.md}}