Frida Tutorial 1

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Bug bounty tip: εγγραφείτε για Intigriti, μια premium πλατφόρμα bug bounty που δημιουργήθηκε από hackers, για hackers! Ελάτε μαζί μας στο https://go.intigriti.com/hacktricks σήμερα, και αρχίστε να κερδίζετε βραβεία έως $100,000!

This is a summary of the post: https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1 APK: https://github.com/t0thkr1s/frida-demo/releases Source Code: https://github.com/t0thkr1s/frida-demo

Python

Frida allows you to insert JavaScript code inside functions of a running application. But you can use python to call the hooks and even to interact with the hooks.

This is a easy python script that you can use with all the proposed examples in this tutorial:

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

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

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

Κοίτα: Η συνάρτηση δέχεται ως παράμετρο ένα String, δεν χρειάζεται 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() { }
});
});

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

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

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

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

You could hook a function and make it print the value of the passed arguments and the value of the 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;
}
});

Σημαντικό

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

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

Συμβουλή bug bounty: εγγραφείτε στο Intigriti, μια premium πλατφόρμα bug bounty που δημιουργήθηκε από hackers, για hackers! Ελάτε μαζί μας στο https://go.intigriti.com/hacktricks σήμερα και αρχίστε να κερδίζετε βραβεία έως $100,000!

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

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

Last updated