Frida Οδηγός
Reading time: 8 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
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Εγκατάσταση
Εγκαταστήστε τα frida tools:
pip install frida-tools
pip install frida
Κατέβασε και εγκατάστησε στο android τον frida server (Download the latest release).
Μία εντολή μίας γραμμής για να επανεκκινήσεις το adb σε root mode, να συνδεθείς σε αυτό, να ανεβάσεις το frida-server, να του δώσεις δικαιώματα εκτέλεσης και να το τρέξεις στο παρασκήνιο:
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 &"
Έλεγξε αν λειτουργεί:
frida-ps -U #List packages and processes
frida-ps -U | grep -i <part_of_the_package_name> #Get all the package name
Frida server vs. Gadget (root vs. no-root)
Δύο κοινές μέθοδοι για τη δυναμική ανάλυση εφαρμογών Android με Frida:
- Frida server (rooted devices): Προωθείς (push) και τρέχεις έναν native daemon που σου επιτρέπει να κάνεις attach σε οποιαδήποτε διεργασία.
- Frida Gadget (no root): Ενσωματώνεις το Frida ως shared library μέσα στο APK και το φορτώνεις αυτόματα μέσα στη στοχευόμενη διεργασία.
Frida server (rooted)
# Download the matching frida-server binary for your device's arch
# https://github.com/frida/frida/releases
adb root
adb push frida-server-<ver>-android-<arch> /data/local/tmp/frida-server
adb shell chmod 755 /data/local/tmp/frida-server
adb shell /data/local/tmp/frida-server & # run at boot via init/magisk if desired
# From host, list processes and attach
frida-ps -Uai
frida -U -n com.example.app
Frida Gadget (no-root)
- Αποσυμπιέστε το APK, προσθέστε το gadget .so και το config:
- Τοποθετήστε libfrida-gadget.so στο lib/
/ (π.χ., lib/arm64-v8a/) - Δημιουργήστε assets/frida-gadget.config με τις ρυθμίσεις φόρτωσης script σας
Παράδειγμα frida-gadget.config
{
"interaction": { "type": "script", "path": "/sdcard/ssl-bypass.js" },
"runtime": { "logFile": "/sdcard/frida-gadget.log" }
}
- Αναφορά/φόρτωση του gadget ώστε να αρχικοποιηθεί νωρίς:
- Πιο εύκολο: Προσθέστε ένα μικρό Java stub που καλεί System.loadLibrary("frida-gadget") στο Application.onCreate(), ή χρησιμοποιήστε την ήδη υπάρχουσα φόρτωση native lib.
- Ξαναπακετάρετε και υπογράψτε το APK, στη συνέχεια εγκαταστήστε:
apktool d app.apk -o app_m
# ... add gadget .so and config ...
apktool b app_m -o app_gadget.apk
uber-apk-signer -a app_gadget.apk -o out_signed
adb install -r out_signed/app_gadget-aligned-debugSigned.apk
- Attach από host στο gadget process:
frida-ps -Uai
frida -U -n com.example.app
Σημειώσεις
- Το Gadget ανιχνεύεται από ορισμένες προστασίες· κρατήστε τα names/paths διακριτικά και φορτώστε αργά/υπό όρους αν χρειάζεται.
- Σε hardened εφαρμογές, προτιμήστε testing σε rooted συσκευές με server + late attach, ή συνδυάστε με Magisk/Zygisk hiding.
Οδηγοί
Tutorial 1
Από: https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1
APK: https://github.com/t0thkr1s/frida-demo/releases
Πηγαίος Κώδικας: https://github.com/t0thkr1s/frida-demo
Follow the link to read it.
Tutorial 2
Από: https://11x256.github.io/Frida-hooking-android-part-2/ (Parts 2, 3 & 4)
APKs and Source code: https://github.com/11x256/frida-android-examples
Ακολουθήστε the link to read it.
Tutorial 3
Από: https://joshspicer.com/android-frida-1
APK: https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk
Follow the link to read it.
Μπορείτε να βρείτε περισσότερα Awesome Frida scripts εδώ: https://codeshare.frida.re/
Γρήγορα Παραδείγματα
Κλήση του Frida από τη γραμμή εντολών
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 Script
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 συναρτήσεων χωρίς παραμέτρους
Hook τη συνάρτηση a()
της κλάσης sg.vantagepoint.a.c
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()
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()
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()
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 συναρτήσεων με παραμέτρους και ανάκτηση της τιμής
Hooking μιας συνάρτησης decryption. Εκτύπωσε την είσοδο, κάλεσε την αρχική συνάρτηση για να decrypt την είσοδο και, τέλος, εκτύπωσε το απλό κείμενο:
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 που δέχεται ένα string και κάλεσέ το με ένα άλλο string (from here)
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() που θα εκτυπώσει μια ιδιωτική ιδιότητα του αντικειμένου:
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
- Μέρος 1 της σειράς άρθρων Advanced Frida Usage: IOS Βιβλιοθήκες Κρυπτογράφησης
Αναφορές
- Δημιουργία επαναλήψιμου εργαστηρίου Android Bug Bounty: Emulator vs Magisk, Burp, Frida, and Medusa
- Τεκμηρίωση Frida Gadget
- Εκδόσεις Frida (server binaries)
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
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.