123 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Frida Tutorial 1
{{#include ../../../banners/hacktricks-training.md}}
**Αυτό είναι μια περίληψη της ανάρτησης**: [https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1](https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1)\
**APK**: [https://github.com/t0thkr1s/frida-demo/releases](https://github.com/t0thkr1s/frida-demo/releases)\
**Κώδικας Πηγής**: [https://github.com/t0thkr1s/frida-demo](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](frida-tutorial-2.md).
{{#include ../../../banners/hacktricks-training.md}}