Frida Οδηγός 1
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.
Αυτή είναι μια περίληψη της ανάρτησης: https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1
APK: https://github.com/t0thkr1s/frida-demo/releases
Πηγαίος Κώδικας: https://github.com/t0thkr1s/frida-demo
Python
Η Frida σας επιτρέπει να insert JavaScript code μέσα σε συναρτήσεις μιας εφαρμογής που τρέχει. Μπορείτε όμως να χρησιμοποιήσετε python για να καλέσετε τα hooks και ακόμη να αλληλεπιδράσετε με τα hooks.
Αυτό είναι ένα απλό python script που μπορείτε να χρησιμοποιήσετε με όλα τα προτεινόμενα παραδείγματα σε αυτόν τον οδηγό:
#hooking.py
import frida, sys
with open(sys.argv[1], 'r') as f:
jscode = f.read()
process = frida.get_usb_device().attach('infosecadventures.fridademo')
script = process.create_script(jscode)
print('[ * ] Running Frida Demo application')
script.load()
sys.stdin.read()
Κάλεσε το script:
python hooking.py <hookN.js>
Είναι χρήσιμο να γνωρίζετε πώς να χρησιμοποιείτε python με frida, αλλά για αυτά τα παραδείγματα μπορείτε επίσης να καλέσετε απευθείας τη Frida με εργαλεία frida από τη γραμμή εντολών:
frida -U --no-pause -l hookN.js -f infosecadventures.fridademo
Hook 1 - Boolean Bypass
Εδώ μπορείτε να δείτε πώς να hook μια boolean μέθοδο (checkPin) από την κλάση: infosecadventures.fridademo.utils.PinUtil
//hook1.js
Java.perform(function () {
console.log("[ * ] Starting implementation override...")
var MainActivity = Java.use("infosecadventures.fridademo.utils.PinUtil")
MainActivity.checkPin.implementation = function (pin) {
console.log("[ + ] PIN check successfully bypassed!")
return true
}
})
python hooking.py hook1.js
Mirar: La funcion recibe como parametro un String, no hace falta overload?
Hook 2 - Function Bruteforce
Μη-στατική Συνάρτηση
Αν θέλεις να καλέσεις μια μη-στατική συνάρτηση μιας κλάσης, πρέπει πρώτα να έχεις ένα αντικείμενο αυτής της κλάσης. Έπειτα, μπορείς να χρησιμοποιήσεις αυτό το αντικείμενο για να καλέσεις τη συνάρτηση.
Για αυτό, μπορείς να βρεις ένα υπάρχον αντικείμενο και να το χρησιμοποιήσεις:
Java.perform(function () {
console.log("[ * ] Starting PIN Brute-force, please wait...")
Java.choose("infosecadventures.fridademo.utils.PinUtil", {
onMatch: function (instance) {
console.log("[ * ] Instance found in memory: " + instance)
for (var i = 1000; i < 9999; i++) {
if (instance.checkPin(i + "") == true) {
console.log("[ + ] Found correct PIN: " + i)
break
}
}
},
onComplete: function () {},
})
})
Σε αυτή την περίπτωση αυτό δεν λειτουργεί επειδή δεν υπάρχει κάποιο instance και η συνάρτηση είναι Static
Static Συνάρτηση
Εάν η συνάρτηση είναι static, μπορείτε απλά να την καλέσετε:
//hook2.js
Java.perform(function () {
console.log("[ * ] Starting PIN Brute-force, please wait...")
var PinUtil = Java.use("infosecadventures.fridademo.utils.PinUtil")
for (var i = 1000; i < 9999; i++) {
if (PinUtil.checkPin(i + "") == true) {
console.log("[ + ] Found correct PIN: " + i)
}
}
})
Hook 3 - Ανάκτηση των arguments και της return value
Μπορείτε να κάνετε hook μια συνάρτηση και να την αναγκάσετε να print την τιμή των passed arguments και την τιμή της return value:
//hook3.js
Java.perform(function () {
console.log("[ * ] Starting implementation override...")
var EncryptionUtil = Java.use(
"infosecadventures.fridademo.utils.EncryptionUtil"
)
EncryptionUtil.encrypt.implementation = function (key, value) {
console.log("Key: " + key)
console.log("Value: " + value)
var encrypted_ret = this.encrypt(key, value) //Call the original function
console.log("Encrypted value: " + encrypted_ret)
return encrypted_ret
}
})
Hooking σε πρόσφατες εκδόσεις Android (14/15/16)
- Από Frida 17.1.x+ το Java hooking σε Android 14–16 είναι ξανά σταθερό (ART quick entrypoint offsets διορθώθηκαν). Αν το
Java.chooseδεν επιστρέφει τίποτα σε Android 14+, αναβαθμίστε frida-server/gadget και τα πακέτα CLI/Python σε >=17.1.5. - Εφαρμογές με early anti-debug checks συχνά τερματίζουν πριν το
attach. Χρησιμοποιήστε spawn ώστε τα hooks να φορτωθούν πριν τοonCreate:
frida -U -f infosecadventures.fridademo -l hook1.js --no-pause
- Όταν υπάρχουν πολλαπλές υπερφορτώσεις, επιλέξτε ρητά τον στόχο:
var Cls = Java.use("com.example.Class")
Cls.doThing.overload('java.lang.String', 'int').implementation = function(s, i) {
return this.doThing(s, i)
}
Πιο διακριτική εισαγωγή με Zygisk Gadget
Μερικές εφαρμογές ανιχνεύουν ptrace ή frida-server. Magisk/Zygisk modules μπορούν να φορτώσουν frida-gadget μέσα στο Zygote ώστε κανένας process να μην βρίσκεται υπό ptrace:
- Εγκαταστήστε ένα Zygisk gadget module (π.χ.,
zygisk-gadget) και reboot. - Διαμορφώστε το target package και μια optional delay για να παρακάμψετε τα startup checks:
adb shell "su -c 'echo infosecadventures.fridademo,5000 > /data/local/tmp/re.zyg.fri/target_packages'"
- Εκκινήστε την εφαρμογή και συνδεθείτε στο όνομα gadget:
frida -U -n Gadget -l hook3.js
Επειδή το gadget εγχέεται από το Zygote, οι έλεγχοι ακεραιότητας του APK παραμένουν ανεπηρέαστοι και οι βασικοί έλεγχοι συμβολοσειρών ptrace/Frida συνήθως αποτυγχάνουν.
Σημαντικό
Σε αυτό το tutorial έχετε κάνει hook μεθόδους χρησιμοποιώντας το όνομα της μεθόδου και .implementation. Αλλά αν υπάρχουν δύο ή περισσότερες μέθοδοι με το ίδιο όνομα, θα χρειαστεί να καθορίσετε τη μέθοδο που θέλετε να κάνετε hook δηλώνοντας τον τύπο των ορισμάτων.
Μπορείτε να το δείτε στο the next tutorial.
Αναφορές
- Frida News (Android 14–16 fixes & Frida 17.x releases)
- zygisk-gadget – Zygisk module that loads frida-gadget
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.


