7 KiB
Tutorial su Frida 1
Impara l'hacking di AWS da zero a eroe con htARTE (Esperto Red Team AWS di HackTricks)!
Altri modi per supportare HackTricks:
- Se vuoi vedere la tua azienda pubblicizzata su HackTricks o scaricare HackTricks in PDF Controlla i PIANI DI ABBONAMENTO!
- Ottieni il merchandising ufficiale di PEASS & HackTricks
- Scopri La Famiglia PEASS, la nostra collezione di NFT esclusivi
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @carlospolopm.
- Condividi i tuoi trucchi di hacking inviando PR a HackTricks e HackTricks Cloud repos di github.
![](/Mirrors/hacktricks/media/commit/26233e3b2fe8e916f59ccfec23ee36d618bdb028/.gitbook/assets/i3.png)
Suggerimento per il bug bounty: iscriviti a Intigriti, una piattaforma premium per il bug bounty creata da hacker, per hacker! Unisciti a noi su https://go.intigriti.com/hacktricks oggi e inizia a guadagnare taglie fino a $100,000!
{% embed url="https://go.intigriti.com/hacktricks" %}
Questo è un riassunto 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 permette di inserire codice JavaScript all'interno delle funzioni di un'applicazione in esecuzione. Ma puoi usare python per chiamare gli hook e persino per interagire con gli hook.
Questo è uno script python semplice che puoi utilizzare 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()
Chiamare lo script:
python hooking.py <hookN.js>
È utile sapere come utilizzare Python con Frida, ma per questi esempi è possibile chiamare direttamente Frida utilizzando gli strumenti da riga di comando di frida:
frida -U --no-pause -l hookN.js -f infosecadventures.fridademo
Hook 1 - Bypass Booleano
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
Hook 2 - Funzione Bruteforce
Funzione Non Statica
Se vuoi chiamare una funzione non statica di una classe, prima hai bisogno di un'istanza di quella classe. Quindi, 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() { }
});
});
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
Potresti agganciare una funzione e far sì che stampi 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 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 individuando il tipo degli argomenti.
Puoi vedere ciò nel prossimo tutorial.
![](/Mirrors/hacktricks/media/commit/26233e3b2fe8e916f59ccfec23ee36d618bdb028/.gitbook/assets/i3.png)
Suggerimento per bug bounty: iscriviti a Intigriti, una piattaforma premium per bug bounty creata da hacker, per hacker! Unisciti a noi su https://go.intigriti.com/hacktricks oggi e inizia a guadagnare taglie fino a $100,000!
{% embed url="https://go.intigriti.com/hacktricks" %}
Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!
Altri modi per supportare HackTricks:
- Se desideri vedere la tua azienda pubblicizzata in HackTricks o scaricare HackTricks in PDF controlla i PIANI DI ABBONAMENTO!
- Ottieni il merchandising ufficiale di PEASS & HackTricks
- Scopri The PEASS Family, la nostra collezione di esclusivi NFT
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @carlospolopm.
- Condividi i tuoi trucchi di hacking inviando PR a HackTricks e HackTricks Cloud github repos.