Frida Tutorial 1

Reading time: 4 minutes

tip

Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Supporta HackTricks

Questo è un riepilogo del post: https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1
APK: https://github.com/t0thkr1s/frida-demo/releases
Codice Sorgente: https://github.com/t0thkr1s/frida-demo

Python

Frida ti consente di inserire codice JavaScript all'interno delle funzioni di un'applicazione in esecuzione. Ma puoi usare python per chiamare i hook e persino per interagire con i hook.

Questo è un semplice script python che puoi usare con tutti gli esempi proposti in questo 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()

Chiama lo script:

bash
python hooking.py <hookN.js>

È utile sapere come utilizzare python con frida, ma per questi esempi puoi anche chiamare direttamente Frida utilizzando gli strumenti da riga di comando frida:

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

Hook 1 - Boolean Bypass

Qui puoi vedere come hookare un metodo booleano (checkPin) dalla classe: 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

Mirar: La funzione riceve come parametro una String, non è necessario l'overload?

Hook 2 - Function Bruteforce

Funzione Non Statica

Se vuoi chiamare una funzione non statica di una classe, prima hai bisogno di un'istanza di quella classe. Poi, puoi usare quell'istanza per chiamare la funzione.
Per farlo, potresti trovare un'istanza esistente e usarla:

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

In questo caso non funziona poiché non c'è alcuna istanza e la funzione è statica

Funzione Statica

Se la funzione è statica, puoi semplicemente chiamarla:

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 - Recupero degli argomenti e del valore di ritorno

Puoi agganciare una funzione e farle stampare il valore degli argomenti passati e il valore del valore di ritorno:

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

Importante

In questo tutorial hai agganciato i metodi utilizzando il nome del metodo e .implementation. Ma se ci fossero più di un metodo con lo stesso nome, dovrai specificare il metodo che desideri agganciare indicando il tipo degli argomenti.

Puoi vedere questo nel tutorial successivo.

tip

Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Supporta HackTricks