Frida Tutorial 1

Reading time: 4 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

Αυτό είναι μια περίληψη της ανάρτησης: 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 σας επιτρέπει να εισάγετε κώδικα JavaScript μέσα σε συναρτήσεις μιας εκτελούμενης εφαρμογής. Αλλά μπορείτε να χρησιμοποιήσετε python για να καλέσετε τα hooks και ακόμη και να αλληλεπιδράσετε με τα hooks.

Αυτό είναι ένα εύκολο σενάριο python που μπορείτε να χρησιμοποιήσετε με όλα τα προτεινόμενα παραδείγματα σε αυτό το tutorial:

python
#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()

Καλέστε το σενάριο:

bash
python hooking.py <hookN.js>

Είναι χρήσιμο να γνωρίζετε πώς να χρησιμοποιείτε το python με το frida, αλλά για αυτά τα παραδείγματα μπορείτε επίσης να καλέσετε απευθείας το Frida χρησιμοποιώντας τα εργαλεία γραμμής εντολών frida:

bash
frida -U --no-pause -l hookN.js -f infosecadventures.fridademo

Hook 1 - Boolean Bypass

Εδώ μπορείτε να δείτε πώς να hook μια boolean μέθοδο (checkPin) από την κλάση: infosecadventures.fridademo.utils.PinUtil

javascript
//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

Κοίτα: Η συνάρτηση δέχεται ως παράμετρο ένα String, χρειάζεται να γίνει overload;

Hook 2 - Function Bruteforce

Μη Στατική Συνάρτηση

Αν θέλεις να καλέσεις μια μη στατική συνάρτηση μιας κλάσης, πρέπει πρώτα να έχεις μια παρουσία αυτής της κλάσης. Στη συνέχεια, μπορείς να χρησιμοποιήσεις αυτή την παρουσία για να καλέσεις τη συνάρτηση.
Για να το κάνεις αυτό, θα μπορούσες να βρεις μια υπάρχουσα παρουσία και να τη χρησιμοποιήσεις:

javascript
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 () {},
})
})

Σε αυτή την περίπτωση, αυτό δεν λειτουργεί καθώς δεν υπάρχει καμία παρουσία και η συνάρτηση είναι Στατική

Στατική Συνάρτηση

Αν η συνάρτηση είναι στατική, μπορείτε απλά να την καλέσετε:

javascript
//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 - Ανάκτηση παραμέτρων και τιμής επιστροφής

Μπορείτε να συνδέσετε μια συνάρτηση και να την κάνετε να εκτυπώνει την τιμή των περασμένων παραμέτρων και την τιμή της τιμής επιστροφής:

javascript
//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
}
})

Σημαντικό

Σε αυτό το tutorial έχετε συνδέσει μεθόδους χρησιμοποιώντας το όνομα της μεθόδου και .implementation. Αλλά αν υπήρχαν περισσότερες από μία μεθόδους με το ίδιο όνομα, θα χρειαστεί να καθορίσετε τη μέθοδο που θέλετε να συνδέσετε υποδεικνύοντας τον τύπο των παραμέτρων.

Μπορείτε να το δείτε στο επόμενο tutorial.

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