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
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos di github.
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:
#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:
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:
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
//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:
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:
//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:
//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
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos di github.