Frida Tutorial

Reading time: 6 minutes

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Εγκατάσταση

Εγκαταστήστε τα frida tools:

bash
pip install frida-tools
pip install frida

Κατεβάστε και εγκαταστήστε στο android τον frida server (Download the latest release).
Μονογραμμή για να επανεκκινήσετε το 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 <part_of_the_package_name> #Get all the package name

Μαθήματα

Μάθημα 1

Από: https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1
APK: https://github.com/t0thkr1s/frida-demo/releases
Πηγαίος Κώδικας: https://github.com/t0thkr1s/frida-demo

Ακολουθήστε τον σύνδεσμο για να το διαβάσετε.

Μάθημα 2

Από: https://11x256.github.io/Frida-hooking-android-part-2/ (Μέρη 2, 3 & 4)
APKs και Πηγαίος Κώδικας: https://github.com/11x256/frida-android-examples

Ακολουθήστε τον σύνδεσμο για να το διαβάσετε.

Μάθημα 3

Από: https://joshspicer.com/android-frida-1
APK: https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk

Ακολουθήστε τον σύνδεσμο για να το διαβάσετε.

Μπορείτε να βρείτε περισσότερα καταπληκτικά σενάρια Frida εδώ: 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)

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

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks